Desenvolva uma Gramática Livre do Contexto (GLC) que reconheça expressões matemáticas na notação in-fixada, 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, TERMO, REAL, INTEIRO, SINAL, NUMERO, DIGITO},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -, +, *, /, .}, P, EXPRESSAO)
P = {< EXPRESSAO > -> < EXPRESSAO > + < TERMO >
| < EXPRESSAO > - < TERMO >
| < TERMO >
< TERMO > -> < TERMO > * < REAL >
| < TERMO > / < REAL >
| < 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, TERMO, REAL, INTEIRO, SINAL, NUMERO, DIGITO},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -, +, *, /, .}, P, EXPRESSAO)
P = {< EXPRESSAO > -> < TERMO > + < EXPRESSAO >
| < TERMO > - < EXPRESSAO >
| < TERMO >
< TERMO > -> < REAL > * < TERMO >
| < REAL > / < TERMO >
| < 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 }