Maria Eduarda Hang
Thiago Sant' Helena
25 Novembro de 2019
Utilizamos Python para o desenvolvimento dos algoritmos. A linguagem peca pela velocidade, porém é muito eficiente no sentido de facilidade com que se programa com ela, e para os fins didáticos deste trabalho essa facilidade foi relevante.
Nenhuma biblioteca externa foi utilizada, toda leitura de arquivos e processamentos dos objetos trabalhados foram criados do zero.
As estruturas utilizadas foram basicamente listas (list
), com comportamento de pilhas ou listas ordenadas, dicionários (dict
) e conjuntos (set
) de Python. As listas foram utilizadas para implementação explícita de pilhas e quando a ordem dos objetos era releante, os dicionários para fazer ligações entre símbolos e suas produções, enquanto os conjuntos foram utilizados para lidar com algoritmos em que a utilização de lógica de grupos tornava-os mais simples.
Para rodar cada teste, basta entrada na pasta Aplicacao
e executar
python <arquivo_de_teste>
Onde cada arquivo de teste na psta se relaciona com um aspecto solicitado pelo enunciado do trabalho.
[X] a) Leitura, gravação e edição de AF, GR e ER (0,25pt)
[X] b) Conversão de AFND (com e semε) para AFD (0,5pt)
[X] c) Conversão de AFD para GR e de GR para AFND (0,5pt)
[X] d) Reconhecimento de sentenças em AF (0,5pt)
[X] e) Minimização de AFD (1,0pt)
[X] f) União e interseção de AFD (1,0pt)
[X] g) Conversão de ER para AFD (usando o algoritmo baseado em árvore sintática - LivroAho - seção 3.9) (1,5pt)
[X] h) Leitura, gravação e edição de GLC. (0,5pt)
[X] i) Transformação de GLC para uma GLC na forma normal de Chomsky (0,5pt)
[X] j) Eliminação de recursão a esquerda (1,0pt)
[X] k) Fatoração (1,0pt)
[X] l) Reconhecimento de sentenças em AP (via implementação de alguma tabela de aná-lise) (1,75pt)
[X] m) Separar as operações em dois grupos: Automatos e Gramáticas (0,0 pt)