Apresente a Análise de Precedência de Operadores, com tratamento de erros, da entrada (x (x + x) . (x) sobre a gramática a seguir.
G = ({A, B, C}, {x, +, ., (, )}, P, A)
P = {A → (B) | x
B → B+C | C
C → C.A | A}| x | + | . | ( | ) | $ | |
|---|---|---|---|---|---|---|
| x | erro 2 | > | > | erro 2 | > | > |
| + | < | > | < | < | > | > |
| . | < | > | > | < | > | > |
| ( | < | < | < | < | = | erro 1 |
| ) | erro 2 | > | > | erro 2 | > | > |
| $ | < | < | < | < | erro 3 | aceita |
Erros na consulta a matriz:
erro 1 - empilha ) e emite a mensagem: falta de parêntese à direita.
erro 2 - insere + na entrada e emite a mensagem: operador esperado.
erro 3 - descarta ) da entrada e emite a mensagem: parêntese direito ilegal.
Erros na redução do handle:
erro 4 - se + ou . definem um handle, verificar se existem variáveis em ambos os lados do operador. Em caso negativo, executar a redução e emitir a mensagem: falta expressão.
erro 5 - se o par ( ) deve ser reduzido, verificar se existe uma variável entre os parênteses. Em caso negativo, executar a redução e emitir a mensagem: expressão nula entre parênteses.
| Pilha | Relação | Entrada | Ação | Handle |
|---|---|---|---|---|
| $ | < | (x (x + x) . (x) $ | empilha ( | |
| $ ( | < | x (x + x) . (x) $ | empilha x | |
| $ ( x | erro 2 | (x + x) . (x) $ | insere + | |
| $ ( x | > | + (x + x) . (x) $ | reduz | A → x |
| $ ( A | < | + (x + x) . (x) $ | empilha + | |
| $ ( A + | < | (x + x) . (x) $ | empilha ( | |
| $ ( A + ( | < | x + x) . (x) $ | empilha x | |
| $ ( A + ( x | > | + x) . (x) $ | reduz | A → x |
| $ ( A + ( A | < | + x) . (x) $ | empilha + | |
| $ ( A + ( A + | < | x) . (x) $ | empilha x | |
| $ ( A + ( A + x | > | ) . (x) $ | reduz | A → x |
| $ ( A + ( A + A | > | ) . (x) $ | reduz | B → B+C |
| $ ( A + ( A | = | ) . (x) $ | empilha ) | |
| $ ( A + ( A ) | > | . (x) $ | reduz | A → (B) |
| $ ( A + A | < | . (x) $ | empilha . | |
| $ ( A + A . | < | (x) $ | empilha ( | |
| $ ( A + A . ( | < | x) $ | empilha x | |
| $ ( A + A . ( x | > | ) $ | reduz | A → x |
| $ ( A + A . ( A | = | ) $ | empilha ) | |
| $ ( A + A . ( A ) | > | $ | reduz | A → (B) |
| $ ( A + A . A | > | $ | reduz | C → C.A |
| $ ( A + A | > | $ | reduz | B → B+C |
| $ ( A | erro 1 | $ | empilha ) | |
| $ ( A ) | > | $ | reduz | A → (B) |
| $ A | aceita | $ |