Apresente a Análise Preditiva Tabular, com recuperação local de erros, da entrada z y x - * * x * sobre a gramática a seguir.
G = ({A, B, C}, {+, -, *, /, x, y, z}, P, A)
P = {A → AAB | C
B → + | - | * | /
C → x | y | z}
Eliminação de Recursividade à Esquerda:
G = ({A, B, C, D}, {+, -, *, /, x, y, z}, P, A)
P = {A → CD
D → ABD | ε
B → + | - | * | /
C → x | y | z}
Fatoração à Esquerda:
G = ({A, B, C, D}, {+, -, *, /, x, y, z}, P, A)
P = {A → CD
D → ABD | ε
B → + | - | * | /
C → x | y | z}
Conjuntos FIRST(α) e FOLLOW(A):
FIRST(A) = {x, y, z}
FIRST(D) = {x, y, z, ε}
FIRST(B) = {+, -, *, /}
FIRST(C) = {x, y, z}
FOLLOW(A) = {+, -, *, /, $}
FOLLOW(D) = {+, -, *, /, $}
FOLLOW(B) = {+, -, *, /, x, y, z, $}
FOLLOW(C) = {+, -, *, /, x, y, z, $}
Tabela de Análise Preditiva:
+ | - | * | / | x | y | z | $ | |
---|---|---|---|---|---|---|---|---|
A | erro 1 | erro 1 | erro 1 | erro 1 | A → CD | A → CD | A → CD | erro 2 |
D | D → ε | D → ε | D → ε | D → ε | D → ABD | D → ABD | D → ABD | D → ε |
B | B → + | B → - | B → * | B → / | erro 2 | |||
C | erro 1 | erro 1 | erro 1 | erro 1 | C → x | C → y | C → z | erro 2 |
+ | desempilha | |||||||
- | desempilha | |||||||
* | desempilha | |||||||
/ | desempilha | |||||||
x | desempilha | |||||||
y | desempilha | |||||||
z | desempilha | |||||||
$ | erro 3 | erro 3 | erro 3 | erro 3 | erro 3 | erro 3 | erro 3 | aceita |
erro 1 - retira o token da entrada e emite a mensagem: operando esperado.
erro 2 - retira a variável da pilha e emite a mensagem: expressão esperada.
erro 3 - retira o token da entrada e emite a mensagem: fim de arquivo encontrado.
Analisador Preditivo Tabular:
Pilha | Entrada | Derivação |
---|---|---|
$ A | z y x - * * x * $ | A → CD |
$ D C | z y x - * * x * $ | C → z |
$ D z | z y x - * * x * $ | |
$ D | y x - * * x * $ | D → ABD |
$ D B A | y x - * * x * $ | A → CD |
$ D B D C | y x - * * x * $ | C → y |
$ D B D y | y x - * * x * $ | |
$ D B D | x - * * x * $ | D → ABD |
$ D B D B A | x - * * x * $ | A → CD |
$ D B D B D C | x - * * x * $ | C → x |
$ D B D B D x | x - * * x * $ | |
$ D B D B D | - * * x * $ | D → ε |
$ D B D B | - * * x * $ | B → - |
$ D B D - | - * * x * $ | |
$ D B D | * * x * $ | D → ε |
$ D B | * * x * $ | B → * |
$ D * | * * x * $ | |
$ D | * x * $ | D → ε |
$ | * x * $ | erro 3 |
$ | x * $ | erro 3 |
$ | * $ | erro 3 |
$ | $ | aceita |