Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise Preditiva Tabular, com recuperação local de erros, da entrada z y x - * * x * sobre a gramática a seguir.

G = ({A, B, C}, {+, -, *, /, x, y, z}, P, A)
P = {AAAB | C
B → + | - | * | /
C → x | y | z}

 

Eliminação de Recursividade à Esquerda:

G = ({A, B, C, D}, {+, -, *, /, x, y, z}, P, A)
P = {ACD
DABD | ε
B → + | - | * | /
C → x | y | z}

Fatoração à Esquerda:

G = ({A, B, C, D}, {+, -, *, /, x, y, z}, P, A)
P = {ACD
DABD | ε
B → + | - | * | /
C → x | y | z}

Conjuntos FIRST(α) e FOLLOW(A):

FIRST(A) = {x, y, z}
FIRST(D) = {x, y, z, ε}
FIRST(B) = {+, -, *, /}
FIRST(C) = {x, y, z}
FOLLOW(A) = {+, -, *, /, $}
FOLLOW(D) = {+, -, *, /, $}
FOLLOW(B) = {+, -, *, /, x, y, z, $}
FOLLOW(C) = {+, -, *, /, x, y, z, $}

Tabela de Análise Preditiva:

Tabela de análise preditiva da gramática G
 +-*/xyz$
Aerro 1erro 1erro 1erro 1ACDACDACDerro 2
DD → εD → εD → εD → εDABDDABDDABDD → ε
BB → +B → -B → *B → /   erro 2
Cerro 1erro 1erro 1erro 1C → xC → yC → zerro 2
+desempilha       
- desempilha      
*  desempilha     
/   desempilha    
x    desempilha   
y     desempilha  
z      desempilha 
$erro 3erro 3erro 3erro 3erro 3erro 3erro 3aceita

erro 1 - retira o token da entrada e emite a mensagem: operando esperado.

erro 2 - retira a variável da pilha e emite a mensagem: expressão esperada.

erro 3 - retira o token da entrada e emite a mensagem: fim de arquivo encontrado.

Analisador Preditivo Tabular:

Movimentos do analisador preditivo tabular para z y x - * * x *
PilhaEntradaDerivação
$ Az y x - * * x * $ACD
$ D Cz y x - * * x * $C → z
$ D zz y x - * * x * $ 
$ Dy x - * * x * $DABD
$ D B Ay x - * * x * $ACD
$ D B D Cy x - * * x * $C → y
$ D B D yy x - * * x * $ 
$ D B Dx - * * x * $DABD
$ D B D B Ax - * * x * $ACD
$ D B D B D Cx - * * x * $C → x
$ D B D B D xx - * * x * $ 
$ D B D B D- * * x * $D → ε
$ D B D B- * * x * $B → -
$ D B D -- * * x * $ 
$ D B D* * x * $D → ε
$ D B* * x * $B → *
$ D ** * x * $ 
$ D* x * $D → ε
$* x * $erro 3
$x * $erro 3
$* $erro 3
$$aceita