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)"