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 = {ABAA | C
B → + | - | * | /
C → x | y | z}

 

Eliminação de Recursividade à Esquerda:

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

Fatoração à Esquerda:

G = ({A, B, C}, {+, -, *, /, x, y, z}, P, A)
P = {ABAA | 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$
AABAAABAAABAAABAAACACACsinc
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 $ABAA
$ A A B+ - * / x y z z $B → +
$ A A ++ - * / x y z z $ 
$ A A- * / x y z z $ABAA
$ A A A B- * / x y z z $B → -
$ A A A -- * / x y z z $ 
$ A A A* / x y z z $ABAA
$ 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 $ABAA
$ 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 $AC
$ A A A A Cx y z z $C → x
$ A A A A xx y z z $ 
$ A A A Ay z z $AC
$ A A A Cy z z $C → y
$ A A A yy z z $ 
$ A A Az z $AC
$ A A Cz z $C → z
$ A A zz z $ 
$ A Az $AC
$ A Cz $C → z
$ A zz $ 
$ A$erro
$$aceita