Apresente a tabela de Análise de Precedência de Operadores, com tratamento de erros, da gramática a seguir.
G = ({A, B, C, D}, {id, +, -, *, /, (, )}, P, A)
P = {A → A+B | A-B | B
B → B/C | C
C → C*D | D
D → (A) | id}| + | - | / | * | ( | ) | id | $ | |
|---|---|---|---|---|---|---|---|---|
| + | > | > | < | < | < | > | < | > |
| - | > | > | < | < | < | > | < | > |
| / | > | > | > | < | < | > | < | > |
| * | > | > | > | > | < | > | < | > |
| ( | < | < | < | < | < | = | < | erro 1 |
| ) | > | > | > | > | erro 2 | > | erro 2 | > |
| id | > | > | > | > | 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 - ou * 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.