Macroprocessor: fix priority of operators

- == and != have now lower priority than <= < >= >, for consistency with the
  Dynare modelling language (and incidentally C and C++, but not Julia).

- ^ has now higher priority and no associativity, for consistency with the
  Dynare modelling language (and usual arithmetic notation).

- & has now higher priority than |, and both have lower priority than + and -,
  but higher than inequality comparators. This is not the same as C and C++ (in
  which & and | are just above && and ||), but this allows for expressions such
  as "a|b == c" to have their most natural semantics (i.e. this will compare
  the union of a and b with c; the C/C++ priority level would have resulted in
  a type error).

Ref #5.
issue#70
Sébastien Villemot 2018-09-04 17:03:54 +02:00
parent 4624a3104d
commit 3fd6858fb8
1 changed files with 6 additions and 2 deletions

View File

@ -74,12 +74,16 @@ class MacroDriver;
%left LOGICAL_OR
%left LOGICAL_AND
%left LESS GREATER LESS_EQUAL GREATER_EQUAL EQUAL_EQUAL EXCLAMATION_EQUAL
%left EQUAL_EQUAL EXCLAMATION_EQUAL
%left LESS GREATER LESS_EQUAL GREATER_EQUAL
%nonassoc IN
%nonassoc COLON
%left UNION
%left INTERSECTION
%left PLUS MINUS
%left TIMES DIVIDE UNION INTERSECTION POWER
%left TIMES DIVIDE
%precedence UMINUS UPLUS EXCLAMATION
%nonassoc POWER
%precedence LBRACKET
%type <vector<string>> comma_name