Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise Preditiva Tabular da entrada id * (id + id * id) sobre a gramática a seguir.

G = ({A, B, C}, {id, +, *, (, )}, P, A)
P = {AA+B | B
BB*C | C
C → (A) | id}

 

Eliminação de Recursividade à Esquerda:

G = ({A, A₁, B, B₁, C}, {id, +, *, (, )}, P, A)
P = {ABA₁
A₁ → +BA₁ | ε
BCB₁
B₁ → *CB₁ | ε
C → (A) | id}

Fatoração à Esquerda:

G = ({A, A₁, B, B₁, C}, {id, +, *, (, )}, P, A)
P = {ABA₁
A₁ → +BA₁ | ε
BCB₁
B₁ → *CB₁ | ε
C → (A) | id}

Conjuntos FIRST(α) e FOLLOW(A):

FIRST(A)  = {id, (}
FIRST(A₁) = {+, ε}
FIRST(B)  = {id, (}
FIRST(B₁) = {*, ε}
FIRST(C)  = {id, (}
FOLLOW(A)  = {), $}
FOLLOW(A₁) = {), $}
FOLLOW(B)  = {+, ), $}
FOLLOW(B₁) = {+, ), $}
FOLLOW(C)  = {+, *, ), $}

Tabela de Análise Preditiva:

Tabela de análise preditiva da gramática G
 id+*()$
AABA₁  ABA₁  
A₁ A₁ → +BA₁  A₁ → εA₁ → ε
BBCB₁  BCB₁  
B₁ B₁ → εB₁ → *CB₁ B₁ → εB₁ → ε
CC → id  C → (A)  

Analisador Preditivo Tabular:

Movimentos do analisador preditivo tabular para id * (id + id * id)
PilhaEntradaDerivação
$ Aid * (id + id * id) $ABA₁
$ A₁ Bid * (id + id * id) $BCB₁
$ A₁ B₁ Cid * (id + id * id) $C → id
$ A₁ B₁ idid * (id + id * id) $ 
$ A₁ B₁* (id + id * id) $B₁ → *CB₁
$ A₁ B₁ C ** (id + id * id) $ 
$ A₁ B₁ C(id + id * id) $C → (A)
$ A₁ B₁ ) A ((id + id * id) $ 
$ A₁ B₁ ) Aid + id * id) $ABA₁
$ A₁ B₁ ) A₁ Bid + id * id) $BCB₁
$ A₁ B₁ ) A₁ B₁ Cid + id * id) $C → id
$ A₁ B₁ ) A₁ B₁ idid + id * id) $ 
$ A₁ B₁ ) A₁ B₁+ id * id) $B₁ → ε
$ A₁ B₁ ) A₁+ id * id) $A₁ → +BA₁
$ A₁ B₁ ) A₁ B ++ id * id) $ 
$ A₁ B₁ ) A₁ Bid * id) $BCB₁
$ A₁ B₁ ) A₁ B₁ Cid * id) $C → id
$ A₁ B₁ ) A₁ B₁ idid * id) $ 
$ A₁ B₁ ) A₁ B₁* id) $B₁ → *CB₁
$ A₁ B₁ ) A₁ B₁ C ** id) $ 
$ A₁ B₁ ) A₁ B₁ Cid) $C → id
$ A₁ B₁ ) A₁ B₁ idid) $ 
$ A₁ B₁ ) A₁ B₁) $B₁ → ε
$ A₁ B₁ ) A₁) $A₁ → ε
$ A₁ B₁ )) $ 
$ A₁ B₁$B₁ → ε
$ A₁$A₁ → ε
$$aceita