Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

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 = {AA+B | A-B | B
BB/C | C
CC*D | D
D → (A) | id}

 

Tabela 1: tabela de precedência de operadores da gramática G
 +-/*()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.