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