Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise Preditiva Tabular, com recuperação de erros em modo pânico, da entrada + - * / x y z z sobre a gramática a seguir.

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

Eliminação de Recursividade à Esquerda:

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

Fatoração à Esquerda:

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

Conjuntos FIRST(α) e FOLLOW(A):

FIRST(A) = {+, -, *, /, x, y, z}
FIRST(B) = {+, -, *, /}
FIRST(C) = {x, y, z}
FOLLOW(A) = {+, -, *, /, x, y, z, $}
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$
AA → BAAA → BAAA → BAAA → BAAA → CA → CA → Csinc
BB → +B → -B → *B → /sincsincsincsinc
CsincsincsincsincC → xC → yC → zsinc

Analisador Preditivo Tabular:

Movimentos do analisador preditivo tabular para + - * / x y z z
PilhaEntradaDerivação
$ A+ - * / x y z z $A → BAA
$ A A B+ - * / x y z z $B → +
$ A A ++ - * / x y z z $ 
$ A A- * / x y z z $A → BAA
$ A A A B- * / x y z z $B → -
$ A A A -- * / x y z z $ 
$ A A A* / x y z z $A → BAA
$ A A A A B* / x y z z $B → *
$ A A A A ** / x y z z $ 
$ A A A A/ x y z z $A → BAA
$ A A A A A B/ x y z z $B → /
$ A A A A A // x y z z $ 
$ A A A A Ax y z z $A → C
$ A A A A Cx y z z $C → x
$ A A A A xx y z z $ 
$ A A A Ay z z $A → C
$ A A A Cy z z $C → y
$ A A A yy z z $ 
$ A A Az z $A → C
$ A A Cz z $C → z
$ A A zz z $ 
$ A Az $A → C
$ A Cz $C → z
$ A zz $ 
$ A$erro
$$aceita