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 = {A → A+B | B
B → BC | C
C → D* | 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:
a | b | + | * | ( | ) | $ | |
---|---|---|---|---|---|---|---|
A | A → BA₁ | A → BA₁ | A → BA₁ | A → BA₁ | A → BA₁ | sinc | sinc |
A₁ | A₁ → +BA₁ | A₁ → ε | A₁ → ε | ||||
B | B → CB₁ | B → CB₁ | sinc | B → CB₁ | B → CB₁ | sinc | sinc |
B₁ | B₁ → CB₁ | B₁ → CB₁ | B₁ → ε | B₁ → CB₁ | B₁ → CB₁ | B₁ → ε | B₁ → ε |
C | C → DC₁ | C → DC₁ | sinc | C → DC₁ | C → DC₁ | sinc | sinc |
C₁ | C₁ → ε | C₁ → ε | C₁ → ε | C₁ → * | C₁ → ε | C₁ → ε | C₁ → ε |
D | D → E | D → E | sinc | sinc | D → (A) | sinc | sinc |
E | E → a | E → b | E → ε | E → ε | E → ε | E → ε | E → ε |
Analisador Preditivo Tabular:
Pilha | Entrada | Derivação |
---|---|---|
$ A | (a + + b) * a b * $ | A → BA₁ |
$ A₁ B | (a + + b) * a b * $ | B → CB₁ |
$ A₁ B₁ C | (a + + b) * a b * $ | C → DC₁ |
$ A₁ B₁ C₁ D | (a + + b) * a b * $ | D → (A) |
$ A₁ B₁ C₁ ) A ( | (a + + b) * a b * $ | |
$ A₁ B₁ C₁ ) A | a + + b) * a b * $ | A → BA₁ |
$ A₁ B₁ C₁ ) A₁ B | a + + b) * a b * $ | B → CB₁ |
$ A₁ B₁ C₁ ) A₁ B₁ C | a + + b) * a b * $ | C → DC₁ |
$ A₁ B₁ C₁ ) A₁ B₁ C₁ D | a + + b) * a b * $ | D → E |
$ A₁ B₁ C₁ ) A₁ B₁ C₁ E | a + + b) * a b * $ | E → a |
$ A₁ B₁ C₁ ) A₁ B₁ C₁ a | a + + 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₁ B | b ) * a b * $ | B → CB₁ |
$ A₁ B₁ C₁ ) A₁ B₁ C | b) * a b * $ | C → DC₁ |
$ A₁ B₁ C₁ ) A₁ B₁ C₁ D | b) * a b * $ | D → E |
$ A₁ B₁ C₁ ) A₁ B₁ C₁ E | b) * a b * $ | E → b |
$ A₁ B₁ C₁ ) A₁ B₁ C₁ b | b) * 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₁ C | a b * $ | C₁ → DC₁ |
$ A₁ B₁ C₁ D | a b * $ | D → E |
$ A₁ B₁ C₁ E | a b * $ | E → a |
$ A₁ B₁ C₁ a | a b * $ | |
$ A₁ B₁ C₁ | b * $ | C₁ → DC₁ |
$ A₁ B₁ C₁ D | b * $ | D → E |
$ A₁ B₁ C₁ E | b * $ | E → b |
$ A₁ B₁ C₁ b | b * $ | |
$ A₁ B₁ C₁ | * $ | C₁ → * |
$ A₁ B₁ * | * $ | |
$ A₁ B₁ | $ | B₁ → ε |
$ A₁ | $ | A₁ → ε |
$ | $ | aceita |