Closed mfelipek closed 8 years ago
Recursão a esquerda é fácil identificar, mas ambiguidade não tanto.
A Andreia disse no EAD algo sobre isso já termos implementado isso no trabalho de formais, mas acho que não precisava fazer nada envolvido com isso...
Estava olhando a video aula do coursera e o cara falou algo interessante: if any entry is multiple defined, then the grammar is not LL(1)
Tipo, se no nosso algoritmo, alguma vez ele for tentar colocar mais de um registro em uma entrada da tabela preditiva, quer dizer que a gramática não é LL(1), isso já testaria ambiguidade, recursividade a esquerda, etc.
Vou testar implementar deste jeito pra ver se funciona.
Adicionei dois 'ifs' na parte que gera a tabela preditiva para verificar se já existia algum registro.
Aparentemente funcionou bem. Ele reclamou caso a gramatica seja alterada para uma recursiva a esquerda. O algoritmo também está dizendo que todas as outras gramaticas de exemplo que tinhamos, a não ser a do exemplo, do coursera, não são LL(1). Acredito que por serem ambiguas.
Adicionei uma nova gramatica de exemplo no código que encontrei neste site: http://www.dcc.ufrj.br/~fabiom/comp20131/08LL1.pdf Nos slides diz que ela é LL(1), o sistema aceitou esta gramática e conseguiu processar um exemplo de entrada.
Dá uma testada ai Mateus.
Adicionei um método antes de pegar os first e follow pra verificar se tem alguma recursão a esquerda. Com a recursão, o método estava tendo recursões infinitas e as vezes o método da tabela achava que a gramática era LL(1).
Agora acredito que está OK.
A partir da lista de produções do NT, verificar se não existe recursão a esquerda nem é ambígua.