Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

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

Analisador Preditivo Tabular:

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