mfelipek / compiler_parser

In term assignment 1 for the Compilers module
1 stars 0 forks source link

Obter o FOLLOW de um NT #3

Closed mfelipek closed 8 years ago

mfelipek commented 8 years ago

Criar uma funcao que, a partir de um NT, retorna a lista de producoes FOLLOW.

mfelipek commented 8 years ago

Estou fazendo tambemS

mfelipek commented 8 years ago

Alguem consegue testar?

henriquels25 commented 8 years ago

vou fazer o clone agora e testar

henriquels25 commented 8 years ago

to com problema de recursividade nessa, tentando resolver aqui, tipo: A -> tB|Bt B -> tA|At O follow de A chama o follow de B e o follow de B chama o follow de A e ficam infinitamente assim

mfelipek commented 8 years ago

Na aula deu uma questão com um caso parecido. Acho que resolvemos tipo ignorando a recursão FIRST A = t FIRST B = t Quando ver dava pra identificar a recursão, e se encontrar, retornar uma lista vazia para o não terminal de origem.

henriquels25 commented 8 years ago

to vendo a video aula do Coursera, quando acontece isso, quer dizer que os dois são iguais, então independente de qualquer coisa, eles são iguais. Aí tipo, acho que tem que pegar tudo que for possível de um e passar pro outro.

Exemplo: A -> tB|Bt B -> tA|At

A chamou B B chamou A ao inves de A chamar B de novo, retorna {t} B retorna {t} A utiliza o {t}

Acho que funcionaria assim, só achar um jeito de identificar pra nao chamar duas vezes o mesmo NT a partir de um NT.

henriquels25 commented 8 years ago

acho que resolvi o problema de recursividade, criei um vetor global que guarda as chamadas de cada um, caso ele for chamar o mesmo novamente, ele ignora e continua o resto do método.

henriquels25 commented 8 years ago

tem só mais um detalhe que estou vendo: E->TX Caso o Y produza uma sentença vazia, o follow de E também pertence ao Follow de T. Hoje, o sistema faz isso apenas com o X.

henriquels25 commented 8 years ago

Fiz uma lógica para isto. Coloquei algumas gramaticas teste no começo do arquivo. A gramatica que está ativa é a utilizada no curso do Coursera. Faz um teste ai Mateus e fecha a tarefa se estiver OK.

mfelipek commented 8 years ago

Vou testar

Comentei ali na issue do FIRST, a gramatica e produções que botei ali são boas pra encontrar erros.

henriquels25 commented 8 years ago

Agora o programa acusa um erro para esta gramática para esta gramática, dizendo que não é LL(1).