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 (a++b)*ab* sobre a gramática a seguir.

G = ({A, B, C, D, E}, {a, b, +, *, (, )}, P, A)
P = {AA+B | B
BBC | C
CD* | D
D → (A) | E
E → a | b | ε}

 

Eliminação de Recursividade à Esquerda:

G = ({A, A₁, B, B₁, C, D, E}, {a, b, +, *, (, )}, P, A)
P = {A  → BA₁
A₁ → +BA₁ | ε
B  → CB₁
B₁CB₁ | ε
C  → D* | D
D  → (A) | E
E  → a | b | ε}

Fatoração à Esquerda:

G = ({A, A₁, B, B₁, C, C₁, D, E}, {a, b, +, *, (, )}, P, A)
P = {A  → BA₁
A₁ → +BA₁ | ε
B  → CB₁
B₁CB₁ | ε
C  → DC₁
C₁ → * | ε
D  → (A) | E
E  → a | b | ε}

Conjuntos FIRST(α) e FOLLOW(A):

FIRST(A)  = {a, b, +, *, (, ε}
FIRST(A₁) = {+, ε}
FIRST(B)  = {a, b, *, (, ε}
FIRST(B₁) = {a, b, *, (, ε}
FIRST(C)  = {a, b, *, (, ε}
FIRST(C₁) = {*, ε}
FIRST(D)  = {a, b, (, ε}
FIRST(E)  = {a, b, ε}
FOLLOW(A)  = {), $}
FOLLOW(A₁) = {), $}
FOLLOW(B)  = {+, ), $}
FOLLOW(B₁) = {+, ), $}
FOLLOW(C)  = {a, b, +, *, (, ), $}
FOLLOW(C₁) = {a, b, +, *, (, ), $}
FOLLOW(D)  = {a, b, +, *, (, ), $}
FOLLOW(E)  = {a, b, +, *, (, ), $}

Tabela de Análise Preditiva:

Tabela de análise preditiva da gramática G
 ab+*()$
AABA₁ABA₁ABA₁ABA₁ABA₁sincsinc
A₁  A₁ → +BA₁  A₁ → εA₁ → ε
BBCB₁BCB₁sincBCB₁BCB₁sincsinc
B₁B₁CB₁B₁CB₁B₁ → εB₁CB₁B₁CB₁B₁ → εB₁ → ε
CCDC₁CDC₁sincCDC₁CDC₁sincsinc
C₁C₁ → εC₁ → εC₁ → εC₁ → *C₁ → εC₁ → εC₁ → ε
DDEDEsincsincD → (A)sincsinc
EE → aE → bE → εE → εE → εE → εE → ε

Analisador Preditivo Tabular:

Movimentos do analisador preditivo tabular para (a++b)*ab*
PilhaEntradaDerivação
$ A(a + + b) * a b * $ABA₁
$ A₁ B(a + + b) * a b * $BCB₁
$ A₁ B₁ C(a + + b) * a b * $CDC₁
$ A₁ B₁ C₁ D(a + + b) * a b * $D → (A)
$ A₁ B₁ C₁ ) A ((a + + b) * a b * $ 
$ A₁ B₁ C₁ ) Aa + + b) * a b * $ABA₁
$ A₁ B₁ C₁ ) A₁ Ba + + b) * a b * $BCB₁
$ A₁ B₁ C₁ ) A₁ B₁ Ca + + b) * a b * $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ Da + + b) * a b * $DE
$ A₁ B₁ C₁ ) A₁ B₁ C₁ Ea + + b) * a b * $E → a
$ A₁ B₁ C₁ ) A₁ B₁ C₁ aa + + b) * a b * $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁+ + b) * a b * $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁+ + b) * a b * $B₁ → ε
$ A₁ B₁ C₁ ) A₁+ + b) * a b * $A₁ → +BA₁
$ A₁ B₁ C₁ ) A₁ B ++ + b) * a b * $ 
$ A₁ B₁ C₁ ) A₁ B+ b ) * a b * $sinc
$ A₁ B₁ C₁ ) A₁+ b ) * a b * $A₁ → +BA₁
$ A₁ B₁ C₁ ) A₁ B ++ b ) * a b * $ 
$ A₁ B₁ C₁ ) A₁ Bb ) * a b * $BCB₁
$ A₁ B₁ C₁ ) A₁ B₁ Cb) * a b * $CDC₁
$ A₁ B₁ C₁ ) A₁ B₁ C₁ Db) * a b * $DE
$ A₁ B₁ C₁ ) A₁ B₁ C₁ Eb) * a b * $E → b
$ A₁ B₁ C₁ ) A₁ B₁ C₁ bb) * a b * $ 
$ A₁ B₁ C₁ ) A₁ B₁ C₁) * a b * $C₁ → ε
$ A₁ B₁ C₁ ) A₁ B₁) * a b * $B₁ → ε
$ A₁ B₁ C₁ ) A₁) * a b * $A₁ → ε
$ A₁ B₁ C₁ )) * a b * $ 
$ A₁ B₁ C₁* a b * $C₁ → *
$ A₁ B₁ ** a b * $ 
$ A₁ B₁a b * $B₁CB₁
$ A₁ B₁ Ca b * $C₁DC₁
$ A₁ B₁ C₁ Da b * $DE
$ A₁ B₁ C₁ Ea b * $E → a
$ A₁ B₁ C₁ aa b * $ 
$ A₁ B₁ C₁b * $C₁DC₁
$ A₁ B₁ C₁ Db * $DE
$ A₁ B₁ C₁ Eb * $E → b
$ A₁ B₁ C₁ bb * $ 
$ A₁ B₁ C₁* $C₁ → *
$ A₁ B₁ ** $ 
$ A₁ B₁$B₁ → ε
$ A₁$A₁ → ε
$$aceita