Exercício 07.60

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  }

Recomendamos

Revista Tema Revista LibreOffice Magazine Um Sábado Qualquer