Analisadores de precedência de operadores operam sobre a classe das gramáticas de operadores, ou seja, gramáticas em 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. Apresente a sequência de movimentos da entrada a+b*c/d-e, considerando a tabela de precedência de operadores apresentada a seguir.
G = ({A, B, C}, {a, b, c, d, e, +, -, *, /}, P, A)
P = {A → A + B | A - B | B
B → B * C | B / C | C
C → a | b | c | d | e}Tabela de precedência de operadores da gramática G| | + | - | * | / | a ... b | $ |
|---|
| + | > | > | < | < | < | > |
|---|
| - | > | > | < | < | < | > |
|---|
| * | > | > | < | < | < | > |
|---|
| / | > | > | < | < | < | > |
|---|
| a ... b | > | > | > | > | | > |
|---|
| $ | < | < | < | < | < | aceita |
|---|
Movimentos do analisador de precedência de operadores para a+b*c/d-e| # | Pilha | Relação | Entrada | Ação | Handle |
|---|
| 0 | $ | < | a+b*c/d-e$ | empilha a | |
|---|
| 1 | $ a | > | +b*c/d-e$ | reduz | C → a |
|---|
| 2 | $ A | < | +b*c/d-e$ | empilha + | |
|---|
| 3 | $ A + | < | b*c/d-e$ | empilha b | |
|---|
| 4 | $ A + b | > | *c/d-e$ | reduz | C → b |
|---|
| 5 | $ A + A | < | *c/d-e$ | empilha * | |
|---|
| 6 | $ A + A * | < | c/d-e$ | empilha c | |
|---|
| 7 | $ A + A * c | > | /d-e$ | reduz | C → c |
|---|
| 8 | $ A + A * A | < | /d-e$ | empilha / | |
|---|
| 9 | $ A + A * A / | < | d-e$ | empilha d | |
|---|
| 10 | $ A + A * A / d | > | -e$ | reduz | C → d |
|---|
| 11 | $ A + A * A / A | > | -e$ | reduz | B → B / C |
|---|
| 12 | $ A + A * A | > | -e$ | reduz | B → B * C |
|---|
| 13 | $ A + A | > | -e$ | reduz | A → A + B |
|---|
| 14 | $ A | < | -e$ | empilha - | |
|---|
| 15 | $ A - | < | e$ | empilha e | |
|---|
| 16 | $ A - e | > | $ | reduz | C → e |
|---|
| 17 | $ A - A | > | $ | reduz | A → A - B |
|---|
| 18 | $ A | aceita | $ | | |
|---|