Apresente a Análise de Precedência de Operadores, com tratamento de erros, da entrada (a; (a; a) a; (a) sobre a gramática a seguir.
G = ({S, L}, {a, ;, (, )}, P, S)
P = {S → (L) | a
L → L;S | S}| a | ; | ( | ) | $ | |
|---|---|---|---|---|---|
| a | erro 2 | > | erro 2 | > | > |
| ; | < | > | < | > | > |
| ( | < | < | < | = | erro 1 |
| ) | 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 ; 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 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.
| Pilha | Relação | Entrada | Ação | Handle |
|---|---|---|---|---|
| $ | < | (a; (a; a) a; (a) $ | empilha ( | |
| $ ( | < | a; (a; a) a; (a) $ | empilha a | |
| $ (a | > | ; (a; a) a; (a) $ | reduz | S → a |
| $ ( S | < | ; (a; a) a; (a) $ | empilha ; | |
| $ ( S ; | < | (a; a) a; (a) $ | empilha ( | |
| $ ( S ; ( | < | a; a) a; (a) $ | empilha a | |
| $ ( S ; ( a | > | ; a) a; (a) $ | reduz | S → a |
| $ ( S ; ( S | < | ; a) a; (a) $ | empilha ; | |
| $ ( S ; ( S ; | < | a) a; (a) $ | empilha a | |
| $ ( S ; ( S ; a | > | ) a; (a) $ | reduz | S → a |
| $ ( S ; ( S ; S | > | ) a; (a) $ | reduz | L → L;S |
| $ ( S ; ( S | = | ) a; (a) $ | empilha ) | |
| $ ( S ; ( S ) | erro 2 | a; (a) $ | inserir ; | |
| $ ( S ; ( S ) | > | ; a; (a) $ | reduz | S → (L) |
| $ ( S ; S | > | ; a; (a) $ | reduz | L → L;S |
| $ ( S | < | ; a; (a) $ | empilha ; | |
| $ ( S ; | < | a; (a) $ | empilha a | |
| $ ( S ; a | > | ; (a) $ | reduz | S → a |
| $ ( S ; S | > | ; (a) $ | reduz | L → L;S |
| $ ( S | < | ; (a) $ | empilha ; | |
| $ ( S ; | < | (a) $ | empilha ( | |
| $ ( S ; ( | < | a) $ | empilha a | |
| $ ( S ; ( a | > | ) $ | reduz | S → a |
| $ ( S ; ( S | = | ) $ | empilha ) | |
| $ ( S ; ( S ) | > | $ | reduz | S → (L) |
| $ ( S ; S | > | $ | reduz | L → L;S |
| $ ( S | erro 1 | $ | empilha ) | |
| $ ( S ) | > | $ | reduz | S → (L) |
| $ S | aceita | $ |