ANTLR运算符优先级

jam*_*o00 9 compiler-construction antlr xtext

如何在ANTLR中实现运算符优先级?

我目前正在使用XText/Antlr包.

编辑:

我做了sepp2k建议的,现在运算符优先级有效,但是3 +*这样的东西现在也可以工作了.操作员基本上"摔倒"树.

另外,我在ANTLR的网站上尝试了C语法,同样的事情发生在ANTLRworks中.

谁知道问题是什么?

BinaryExpression:
  'or'? AndOp; //or op

AndOp:
  'and'? ComparisonOp;

ComparisonOp:
  ('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;

ConcatOp:
  '..'? AddSubOp;

AddSubOp:
  ('+' | '-')? MultDivOp;

MultDivOp:
  ('*' | '/')? ExpOp;

ExpOp:
  '^'? expr=Expression;
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 13

使用ANTLR,您可以编码语法规则中的优先级.喜欢:

expr:  mult ('+' mult)* ;
mult:  atom ('*' atom)* ;
atom:  INT | '(' expr ')' ;
Run Code Online (Sandbox Code Playgroud)

这将"1 + 2*3 +(4*5 + 6)"解析为"(1 +(2*3))+((4*5)+ 6)"