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 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₁sincsinc
A₁ A₁ → +BA₁  A₁ → εA₁ → ε
BBCB₁sinc BCB₁sincsinc
B₁ B₁ → εB₁ → *CB₁ B₁ → εB₁ → ε
CC → idsincsincC → (A)sincsinc

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 $erro
$ A₁ B₁ ) A₁ B₁) * id $B₁ → ε
$ A₁ B₁ ) A₁) * id $A₁ → ε
$ A₁ B₁ )) * id $ 
$ A₁ B₁* id $B₁ → *CB₁
$ A₁ B₁ C ** id $ 
$ A₁ B₁ Cid $C → id
$ A₁ B₁ idid $ 
$ A₁ B₁$B₁ → ε
$ A₁$A₁ → ε
$$aceita