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 e multiplicação sobre os operandos A, B e C, e os sinais de pontuação parênteses, colchetes e chaves, como por exemplo:
A + (B * C)
B * [(C + B) * (A + B)] + C
{[A + B] * [A + (C * B)]}
{A * [B + (C * A)] + A}
Resposta com recursividade à esquerda
G = ({A, B, C, D, E, F, G, H, I, J}, {A, B, C, +, *, {, }, [, ], (, )}, P, A)
P = {< A > -> < A > + < B >
| < B >
< B > -> < B > * < C >
| < C >
< C > -> { < A > }
| < D >
< D > -> < D > + < E >
| < E >
< E > -> < E > * < F >
| < F >
< F > -> [ < D > ]
| < G >
< G > -> < G > + < H >
| < H >
< H > -> < H > * < I >
| < I >
< I > -> ( < G > )
| < J >
< J > -> A
| B
| C }
Resposta com recursividade à direita
G = ({A, B, C, D, E, F, G, H, I, J}, {A, B, C, +, *, {, }, [, ], (, )}, P, A)
P = {< A > -> < B > + < A >
| < B >
< B > -> < C > * < B >
| < C >
< C > -> { < A > }
| < D >
< D > -> < E > + < D >
| < E >
< E > -> < F > * < E >
| < F >
< F > -> [ < D > ]
| < G >
< G > -> < H > + < G >
| < H >
< H > -> < I > * < H >
| < I >
< I > -> ( < G > )
| < J >
< J > -> A
| B
| C }