Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise de Precedência de Operadores, com tratamento de erros, da entrada "xx";"";"x"x" sobre a gramática a seguir.

G = ({A, B, C}, {x, ;, "}, P, A)
P = {AB | B;A
B → "C"
C → x}

 

Tabela de precedência de operadores da gramática G
 x;"$
xerro 1>>>
;<><>
"<><>
$<<<aceita

Erros na consulta a matriz:

erro 1 - descarta x e emite a mensagem: caractere duplicado.

Erros na redução do handle:

erro 2 - se ; define 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 o delimitador de campo.

erro 3 - se o par " " deve ser reduzido, verificar se existe uma variável entre as aspas. Em caso negativo, executar a redução e emitir a mensagem: falta o texto.

erro 4 - se o par " " deve ser reduzido, verificar se existe ambas as aspas. Em caso negativo, executar a redução e emitir a mensagem: falta o delimitador de texto.

Movimentos do analisador de precedência de operadores para "xx";"";"x"x"
PilhaRelaçãoEntradaAçãoHandle
$<" x x " ; " " ; " x " x " $empilha " 
$ "<x x " ; " " ; " x " x " $empilha x 
$ " xerro 1x " ; " " ; " x " x " $descarta x 
$ " x>" ; " " ; " x " x " $reduzC → x
$ " A<" ; " " ; " x " x " $empilha " 
$ " A ">; " " ; " x " x " $reduzB → "C"
$ A<; " " ; " x " x " $empilha ; 
$ A ;<" " ; " x " x " $empilha " 
$ A ; "<" ; " x " x " $empilha " 
$ A ; " "erro 3; " x " x " $reduzB → "C"
$ A ; A>; " x " x " $reduzAB;A
$ A<; " x " x " $empilha ; 
$ A ;<" x " x " $empilha " 
$ A ; "<x " x " $empilha x 
$ A ; " x>" x " $reduzC → x
$ A ; " A<" x " $empilha " 
$ A ; " A "<x " $empilha x 
$ A ; " A " x<" $reduzC → x
$ A ; " A " A<" $empilha " 
$ A ; " A " A ">$reduzB → "C"
$ A ; " A Aerro 4$reduzB → "C"
$ A ; A>$reduzAB;A
$ Aaceita$