Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise Preditiva Tabular da entrada ((x + y) ^ (z * y)) / (x - y) sobre a gramática a seguir.

G = ({A, B, C, D, E}, {+, -, *, /, ^, (, ), x, y, z}, P, A)
P = {AA+B | A-B | B
BB*C | B/C | C
CC^D | D
D → (A) | E
E → x | y | z}

 

Eliminação de Recursividade à Esquerda:

G = ({A, A₁, B, B₁, C, B₁, D, E}, {+, -, *, /, ^, (, ), x, y, z}, P, A)
P = {ABA₁
A₁ → +BA₁ | -BA₁ | ε
BCB₁
B₁ → *CB₁ | /CB₁ | ε
CDC₁
C₁ → ^DC₁ | ε
D → (A) | E
E → x | y | z}

Fatoração à Esquerda:

G = ({A, A₁, B, B₁, C, B₁, D, E}, {+, -, *, /, ^, (, ), x, y, z}, P, A)
P = {ABA₁
A₁ → +BA₁ | -BA₁ | ε
BCB₁
B₁ → *CB₁ | /CB₁ | ε
CDC₁
C₁ → ^DC₁ | ε
D → (A) | E
E → x | y | z}

Conjuntos FIRST(α) e FOLLOW(A):

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

Tabela de Análise Preditiva:

Tabela de análise preditiva da gramática G
 xyz+-*/^()$
AABA₁ABA₁ABA₁     ABA₁  
A₁   A₁ → +BA₁A₁ → -BA₁    A₁ → εA₁ → ε
BBCB₁BCB₁BCB₁     BCB₁  
B₁   B₁ → εB₁ → εB₁ → *CB₁B₁ → /CB₁  B₁ → εB₁ → ε
CCDC₁CDC₁CDC₁     CDC₁  
C₁   C₁ → εC₁ → εC₁ → εC₁ → εC₁ → ^DC₁ C₁ → εC₁ → ε
DDEDEDE     D → (A)  
EE → xE → yE → z        

Analisador Preditivo Tabular:

Movimentos do analisador preditivo tabular para ((x + y) ^ (z * y)) / (x - y)
PilhaEntradaDerivação
$ A((x + y) ^ (z * y)) / (x - y) $ABA₁
$ A₁ B((x + y) ^ (z * y)) / (x - y) $BCB₁
$ A₁ B₁ C((x + y) ^ (z * y)) / (x - y) $CDC₁
$ A₁ B₁ C₁ D((x + y) ^ (z * y)) / (x - y) $D → (A)
$ A₁ B₁ C₁ ) A (((x + y) ^ (z * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A(x + y) ^ (z * y)) / (x - y) $ABA₁
$ A₁ B₁ C₁ ) A₁ B(x + y) ^ (z * y)) / (x - y) $BCB₁
$ A₁ B₁ C₁ ) A₁ B₁ C(x + y) ^ (z * y)) / (x - y) $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ D(x + y) ^ (z * y)) / (x - y) $D → (A)
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A ((x + y) ^ (z * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) Ax + y) ^ (z * y)) / (x - y) $ABA₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ Bx + y) ^ (z * y)) / (x - y) $BCB₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ Cx + y) ^ (z * y)) / (x - y) $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ Dx + y) ^ (z * y)) / (x - y) $DE
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ Ex + y) ^ (z * y)) / (x - y) $E → x
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ xx + y) ^ (z * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁+ y) ^ (z * y)) / (x - y) $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁+ y) ^ (z * y)) / (x - y) $B₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁+ y) ^ (z * y)) / (x - y) $A₁ → +BA₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B ++ y) ^ (z * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ By) ^ (z * y)) / (x - y) $BCB₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ Cy) ^ (z * y)) / (x - y) $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ Dy) ^ (z * y)) / (x - y) $DE
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ Ey) ^ (z * y)) / (x - y) $E → y
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ yy) ^ (z * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁) ^ (z * y)) / (x - y) $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁) ^ (z * y)) / (x - y) $B₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁) ^ (z * y)) / (x - y) $A₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ )) ^ (z * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁^ (z * y)) / (x - y) $C₁ → ^DC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ D ^^ (z * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ D(z * y)) / (x - y) $D → (A)
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A ((z * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) Az * y)) / (x - y) $ABA₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ Bz * y)) / (x - y) $BCB₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ Cz * y)) / (x - y) $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ Dz * y)) / (x - y) $DE
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ Ez * y)) / (x - y) $E → z
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ zz * y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁* y)) / (x - y) $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁* y)) / (x - y) $B₁ → *CB₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C ** y)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ Cy)) / (x - y) $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ Dy)) / (x - y) $DE
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ Ey)) / (x - y) $E → y
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁ yy)) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁ C₁)) / (x - y) $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁ B₁)) / (x - y) $B₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ) A₁)) / (x - y) $A₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁ C₁ ))) / (x - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁) / (x - y) $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁) / (x - y) $B₁ → ε
$ A₁ B₁ C₁ ) A₁) / (x - y) $A₁ → ε
$ A₁ B₁ C₁ )) / (x - y) $ 
$ A₁ B₁ C₁/ (x - y) $C₁ → ε
$ A₁ B₁/ (x - y) $B₁ → /CB₁
$ A₁ B₁ C // (x - y) $ 
$ A₁ B₁ C(x - y) $CDC₁
$ A₁ B₁ C₁ D(x - y) $D → (A)
$ A₁ B₁ C₁ ) A ((x - y) $ 
$ A₁ B₁ C₁ ) Ax - y) $ABA₁
$ A₁ B₁ C₁ ) A₁ Bx - y) $BCB₁
$ A₁ B₁ C₁ ) A₁ B₁ Cx - y) $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ Dx - y) $DE
$ A₁ B₁ C₁ ) A₁ B₁ C₁ Ex - y) $E → x
$ A₁ B₁ C₁ ) A₁ B₁ C₁ xx - y) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁- y) $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁- y) $B₁ → ε
$ A₁ B₁ C₁ ) A₁- y) $A₁ → -BA₁
$ A₁ B₁ C₁ ) A₁ B -- y) $ 
$ A₁ B₁ C₁ ) A₁ By) $BCB₁
$ A₁ B₁ C₁ ) A₁ B₁ Cy) $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ Dy) $DE
$ A₁ B₁ C₁ ) A₁ B₁ C₁ Ey) $E → y
$ A₁ B₁ C₁ ) A₁ B₁ C₁ yy) $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁) $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁) $B₁ → ε
$ A₁ B₁ C₁ ) A₁) $A₁ → ε
$ A₁ B₁ C₁ )) $ 
$ A₁ B₁ C₁$C₁ → ε
$ A₁ B₁$B₁ → ε
$ A₁$A₁ → ε
$$aceita