Desenvolva uma Gramática Livre do Contexto (GLC) que reconheça expressões matemáticas na notação pós-fixada (notação polonesa inversa), considerando os operadores aritméticos de adição, subtração, multiplicação e divisão sobre operandos numéricos inteiros e reais, como por exemplo:
1 2 +
1 2.5 * 3 +
1 3 / -6 *
10 -20.0 30.5 * +
Resposta com recursividade à esquerda
G = ({EXPRESSAO, OPERADOR, OPERANDO, REAL, INTEIRO, SINAL, NUMERO, DIGITO},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -, +, *, /, .}, P, EXPRESSAO)
P = {< EXPRESSAO > -> < OPERANDO > < OPERANDO > < OPERADOR >
< OPERADOR > -> +
| -
| *
| /
< OPERANDO > -> < EXPRESSAO >
| < REAL >
< REAL > -> < SINAL > . < NUMERO >
| < INTEIRO > . < NUMERO >
| < INTEIRO >
< INTEIRO > -> < SINAL > < NUMERO >
< SINAL > -> +
| -
| ε
< NUMERO > -> < NUMERO > < DIGITO >
| < DIGITO >
< DIGITO > -> 0
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9 }
Resposta com recursividade à direita
G = ({EXPRESSAO, OPERADOR, OPERANDO, REAL, INTEIRO, SINAL, NUMERO, DIGITO},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -, +, *, /, .}, P, EXPRESSAO)
P = {< EXPRESSAO > -> < OPERANDO > < OPERANDO > < OPERADOR >
< OPERADOR > -> +
| -
| *
| /
< OPERANDO > -> < EXPRESSAO >
| < REAL >
< REAL > -> < SINAL > . < NUMERO >
| < INTEIRO > . < NUMERO >
| < INTEIRO >
< INTEIRO > -> < SINAL > < NUMERO >
< SINAL > -> +
| -
| ε
< NUMERO > -> < DIGITO > < NUMERO >
| < DIGITO >
< DIGITO > -> 0
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9 }