domingo, 16 de outubro de 2016

Gramática não ambígua para expressões

Aqui está uma gramática não ambígua para expressões aritméticas e/ou lógicas.
Os operadores foram divididos conforme sua precedência, isto é,
precedência de op_prec_5 > op_prec_4 > ... > op_prec_1 > op_prec_0.

Estão inclusas algumas operações usuais:

op_prec_0 : OR

op_prec_1 : AND


op_prec_2 : MENOR_QUE

          | MENOR_OU_IGUAL
          | MAIOR_QUE
          | MAIOR_OU_IGUAL
          | IGUAL
          | NAO_IGUAL

op_prec_3 : MAIS

          | MENOS

op_prec_4 : VEZES

          | DIVISAO

op_prec_5 : NOT

          | MENOS


exp   : exp op_prec_0 exp1
      | exp1

exp1  : exp1 op_prec_1 exp2

      | exp2

exp2  : exp2 op_prec_2 exp3

      | exp3

exp3  : exp3 op_prec_3 exp4

      | exp4

exp4  : exp4 op_prec_4 exp5

      | exp5

exp5  : op_prec_5 exp5

      | exp_f

exp_f : NUMERO

      | VARIAVEL
      | ABRE_PARENTESE exp FECHA_PARENTESE
      | outra_coisa_qualquer


A última regra de operadores foi usada para os operadores unários:
a negação lógica e o sinal "-" unário.
Eles em geral tem uma maior precedência na maioria das linguagens.

Nenhum comentário:

Postar um comentário