/AFD-e-AFND---TCOMP-

Construir um automato finito deterministico, automato finito não deterministico, converter um AFND em AFD - Trabalho de Teoria da computação n1

Primary LanguagePython

Autômato finito determinístico - AFD

  • Primeiro é necessário instânciar o AFD.
        afd = Automato()
  • O alfabeto deve ser passado por meio de um vetor, caracteres repetidos serão ignorados.
        afd.set_alfabeto(['0','1']) 
  • O conjunto de estados deve ser passados por meio de um vetor, estados repetidos serão ignorados.
        afd.set_estados(['q1','q2','q3','q4'])
  • O estado inicial deve está contido nos estados e deve ser passado como uma string.
        afd.set_estadoInicial('q1')
  • O conjunto de estados finais devem ser passados por meio de um vetor, estados não contidos no conjunto de estados ou estados repetidos serão ignorado.
        afd.set_estadosFinais(['q2','q4'])
  • As funções de transição devem ser passadas por meio de um dicionário que conterá os estados e esses estados devem ter um dicionário que terá suas entradas contidas no alfabeto e suas respectivas saidas.
        afd.set_transicoes({'q1':{'0':'q3','1':'q2'},
                            'q2':{'0':'q1','1':'q4'},
                            'q3':{'0':'q2','1':'q4'},
                            'q4':{'0':'q4','1':'q1'}}) 
  • A string que será testado não pode conter caracteres que diferentes do alfabeto.
        afd.set_string('110') #String Aceita
        afd.set_string('110001') #String Recusada

Autômato finito não-determinístico - AFND

  • Primeiro é necessário instânciar o AFND.
        afnd = Automato()
  • O alfabeto deve ser passado por meio de um vetor, caracteres repitidos serão ignorados.
        afnd.set_alfabeto(['0','1']) 
  • O conjunto de estados deve ser passados por meio de um vetor, estados repetidos serão ignorados.
        afnd.set_estados(['a','b','c','d','e','f'])
  • O estado inicial deve está contido nos estados e deve ser passado como uma string.
        afnd.set_estadoInicial('a')
  • O conjunto de estados finais deve ser passados por meio de um vetor, estados não contidos no conjunto de estados ou estados repetidos serão ignorado.
        afnd.set_estadosFinais(['a','c','f'])
  • As funções de transição deve, ser passadas por meio de um dicionário que conterá os estados e esses estados devem ter um dicionário que terá suas entradas contidas no alfabeto e o epsilon e suas respectivas saidas dentro de um vetor.
        afnd.set_transicoes({'a': {'0': ['f'], '1': ['b'],'epsilon':[]},
                             'b': {'0': [], '1': ['b'],'epsilon':['e']},
                             'c': {'0': [],'1':['d'],'epsilon':[]},
                             'd': {'0': [], '1': ['f'],'epsilon':[]},
                             'e': {'0': [], '1': ["c"],'epsilon':['c']},
                             'f': {'0': ['f'], '1': ["c"],'epsilon':['a']}})  
  • A string que será testado não pode conter caracteres que diferentes do alfabeto.
        afnd.set_string("1")  #String Recusada
        afnd.set_string("10") #String Aceita

AFND to AFD

  • Deve se seguir todos etapas de "configuração" já descritas de um AFND menos a de set_string.
        afnd = AFND.Automato()
        afnd.set_alfabeto(['0','1'])
        afnd.set_estados(['a','b','c','d','e','f'])
        afnd.set_estadoInicial('a')
        afnd.set_estadosFinais(['d'])
        afnd.set_transicoes({'a': {'0': ['e'], '1': ['b'],'epsilon':[]},
                             'b': {'0': [], '1': ['c'],'epsilon':['d']},
                             'c': {'0': [],'1':['d'],'epsilon':[]},
                             'd': {'0': [], '1': [],'epsilon':[]},
                             'e': {'0': ['f'], '1': [],'epsilon':['b','c']},
                             'f': {'0': ['d'], '1': [],'epsilon':[]}}) 
  • Instanciar convert passando como parâmetro o AFND.
        convert = convert(afnd)
  • Setar uma string que será testada no AFND e no AFD gerado.
        convert.set_string_all("1101")
        #Result :
                #Resultado AFD : 
                #String Recusada
                #Resultado AFND : 
                #String Recusada
        
        convert.set_string_all("111")
        #Result :
                #Resultado AFD : 
                #String Aceita
                #Resultado AFND : 
                #String Aceita

        convert.set_string_all("0")
        #Result :
                #Resultado AFD : 
                #String Aceita
                #Resultado AFND : 
                #String Aceita