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 = {A → B | B;A
B → "C"
C → x}
x | ; | " | $ | |
---|---|---|---|---|
x | erro 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.
Pilha | Relação | Entrada | Ação | Handle |
---|---|---|---|---|
$ | < | " x x " ; " " ; " x " x " $ | empilha " | |
$ " | < | x x " ; " " ; " x " x " $ | empilha x | |
$ " x | erro 1 | x " ; " " ; " x " x " $ | descarta x | |
$ " x | > | " ; " " ; " x " x " $ | reduz | C → x |
$ " A | < | " ; " " ; " x " x " $ | empilha " | |
$ " A " | > | ; " " ; " x " x " $ | reduz | B → "C" |
$ A | < | ; " " ; " x " x " $ | empilha ; | |
$ A ; | < | " " ; " x " x " $ | empilha " | |
$ A ; " | < | " ; " x " x " $ | empilha " | |
$ A ; " " | erro 3 | ; " x " x " $ | reduz | B → "C" |
$ A ; A | > | ; " x " x " $ | reduz | A → B;A |
$ A | < | ; " x " x " $ | empilha ; | |
$ A ; | < | " x " x " $ | empilha " | |
$ A ; " | < | x " x " $ | empilha x | |
$ A ; " x | > | " x " $ | reduz | C → x |
$ A ; " A | < | " x " $ | empilha " | |
$ A ; " A " | < | x " $ | empilha x | |
$ A ; " A " x | < | " $ | reduz | C → x |
$ A ; " A " A | < | " $ | empilha " | |
$ A ; " A " A " | > | $ | reduz | B → "C" |
$ A ; " A A | erro 4 | $ | reduz | B → "C" |
$ A ; A | > | $ | reduz | A → B;A |
$ A | aceita | $ |