Ybadoo - Soluções em Software Livre
Turmas
2º Semestre de 2025

Analisadores de precedência de operadores operam sobre a classe das gramáticas de operadores, ou seja, gramáticas que os não-terminais aparecem sempre separados por símbolos terminais e que as produções não derivam a palavra vazia. A análise de precedência de operadores é bastante eficiente e é aplicada, principalmente, no reconhecimento de expressões, como expressões aritméticas e lógicas. Considerando a tabela de precedência de operadores apresentada a seguir, apresente a sequência de movimentos para o reconhecimento da entrada a * b (c) d.

G = ({A, B, C, D}, {+, *, a, b, c, d, (, )}, P, A)
P = {AA + B | B
BB * C | C
C → (A) | D} D → a | b | c | d}
Tabela de precedência de operadores da gramática G
 +*a..d()$
+<<<<>>
*>><<>>
a..d>>erro 2erro 2>>
(<<<<=erro 1
)>>erro 2erro 2>>
$<<<<erro 3aceita

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.

Movimentos do analisador de precedência de operadores para a * b (c) d
PilhaRelaçãoEntradaAçãoHandle
$<a * b (c) d $empilha a 
$ a>* b (c) d $reduzD → a
$ A<* b (c) d $empilha * 
$ A *<b (c) d $empilha b 
$ A * berro 2(c) d $insere + 
$ A * b>+ (c) d $reduzD → b
$ A * A>+ (c) d $reduzBB * C
$ A<+ (c) d $empilha + 
$ A +<(c) d $empilha ( 
$ A + (<c) d $empilha c 
$ A + ( c>) d $reduzD → c
$ A + ( A=) d $empilha ) 
$ A + ( A )erro 2d $insere + 
$ A + ( A )>+ d $reduzC → (A)
$ A + A<+ d $empilha + 
$ A + A +<d $empilha d 
$ A + A + d>$reduzD → d
$ A + A + A>$reduzAA + B
$ A + A>$reduzAA + B
$ Aaceita$