mfelipek / compiler_parser

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

Obter FIRST de um NT #2

Closed mfelipek closed 8 years ago

mfelipek commented 8 years ago

Criar uma funcao que determina o FIRST para um NT informado. Recebe o NT, retorna uma lista de producoes FIRST.

mfelipek commented 8 years ago

Vou fazer

mfelipek commented 8 years ago

Alguem consegue testar?

henriquels25 commented 8 years ago

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.

henriquels25 commented 8 years ago

Faz um teste nas minhas alterações, ve se está funcionando aí

mfelipek commented 8 years ago

Vou testar, blz, tinha esquecido dessa regra

mfelipek commented 8 years ago

Acho que ficou OK, ta tratando também se vários NT seguidos derivam a sentença vazia pra aplicar a regra.

mfelipek commented 8 years ago

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.

mfelipek commented 8 years ago

Pera, essa gramatica tem recursão a esquerda, vou arrumar ela

henriquels25 commented 8 years ago

isso, testa sem recursão a esquerda pra ver se o nosso método está funcionando

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).