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 |