Last active
December 1, 2019 00:27
-
-
Save Gabrielgtt/3137339b7e985afcfeb5848d84d6b415 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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