Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise Preditiva Tabular da entrada + / x y * - + x y z x 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$
AABAAABAAABAAABAAACACAC 
BB → +B → -B → *B → /    
C    C → xC → yC → z 

Analisador Preditivo Tabular:

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