Closed mfelipek closed 8 years ago
Vou fazer
Alguem consegue testar?
Testei, adicionei um detalhe: Caso um elemento da produção gere uma sentença vazia, o FIRST do proximo elemento também faz parte do FIRST do elemento atual, ai fica recursivo isso tambem. Exemplo: T->XY, caso X gerar sentença vazia, o FIRST do Y também faz parte do FIRST do X.
Faz um teste nas minhas alterações, ve se está funcionando aí
Vou testar, blz, tinha esquecido dessa regra
Acho que ficou OK, ta tratando também se vários NT seguidos derivam a sentença vazia pra aplicar a regra.
Achei um problema, amanhã vou corrigir ele.
Não terminais: S,A,B,C,D Terminais: a,b,c,d Simbolo produção: P Simbolo Inicio de produção: S Produções S->ABCD A->&|aA B->&|Bb C->c|AB D->d
O resultado certo seria: First(S) = First(A) U First(B) U First(C) U First(D) - ε = {a, b, c, d} First(A) = {a, ε} First(B) = {b, ε } First(C) = {c} U First(A) U First(B) = {a, b, c, ε} First(D) = {d}
Follow(S) = {$} Follow(A) = First(B) U Follow(B) U Follow(C) = {a, b, c, d} Follow(B) = {b} U Follow(B) U First(C) U Follow(C)= {a, b, c, d} Follow(C) = First(D) = {d} Follow(D) = Follow(S) = {$}
Peguei essa questão desse link
Essa questão é bem boa pra encontrar problemas, é bem complexa.
Pera, essa gramatica tem recursão a esquerda, vou arrumar ela
isso, testa sem recursão a esquerda pra ver se o nosso método está funcionando
Agora o programa acusa um erro para esta gramática para esta gramática, dizendo que não é LL(1).
Criar uma funcao que determina o FIRST para um NT informado. Recebe o NT, retorna uma lista de producoes FIRST.