Exercício 07.55

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  }

Recomendamos

Revista Espírito Livre Vida de Programador Duolingo