Skip to content

Instantly share code, notes, and snippets.

@Gabrielgtt
Last active December 1, 2019 00:27
Show Gist options
  • Save Gabrielgtt/3137339b7e985afcfeb5848d84d6b415 to your computer and use it in GitHub Desktop.
Save Gabrielgtt/3137339b7e985afcfeb5848d84d6b415 to your computer and use it in GitHub Desktop.
import sys
arquivoAutomato, palavra_input = sys.argv[1], sys.argv[2]
def ler_entrada():
estados = {}
finais = []
inicio = 'A'
with open(arquivoAutomato, 'r') as aa:
for cnt, linha in enumerate(aa):
## Pego os estados
if cnt == 0:
for pal in linha.split()[1:]:
estados[pal[:-1] if pal[-1] == ',' else pal] = []
## Pego o estado inicial
elif cnt == 1:
inicio = linha.split()[1]
## Pego os estados de aceitacao
elif cnt == 2:
for pal in linha.split()[1:]:
finais.append(pal[:-1] if pal[-1] == ',' else pal)
## Leio as transicoes
else:
de, para, ent = linha.split()
estados[de].append((ent, para))
return (estados, finais, inicio)
class Automato:
def __init__(self, estados, finais, inicio):
self.estados = estados
self.inicio = inicio
self.finais = finais
def aceita(self, idx, palavra, estadoAtual):
palavraRestante = "e" if idx == len(palavra) else palavra[idx:]
print("{0} {1}".format(estadoAtual, palavraRestante))
if idx == len(palavra):
return estadoAtual in self.finais
deu = False
for caracter, novoEstado in self.estados[estadoAtual]:
if caracter == palavra[idx]:
deu = deu or self.aceita(idx+1, palavra, novoEstado)
return deu
def checar_pertencimento(self, palavra):
print("Estado Palavra")
aceitou = self.aceita(0, palavra, self.inicio)
print("")
if aceitou:
print("A palavra foi aceita")
else:
print("A palavra foi não foi aceita")
if __name__ == "__main__":
automato = Automato(*ler_entrada())
automato.checar_pertencimento(palavra_input)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment