Xtext语法留下递归 - 左保理

时间:2013-11-12 17:33:26

标签: antlr xtext

我使用Xtext来构建支持数组表达式的语言。这时我已经编写了支持数学表达式的规则,现在我正在尝试编写一个规则来支持矩阵乘法(内积)。
数学表达式的规则遵循此thread中建议的模式。规则中有以下比较规则:

Compare returns Expression:
   Shift (({Gt.left=current} '>'| {Lt.left=current} '<') right=Shift)*  

在此规则下面还有其他规则,例如Shift,其中包含不同优先级的运算符。所有这些规则都导致Atomic规则,我声明了Expression的有效操作数,其中我想支持内部产品:

Atomic returns Expression:
   {NumberLiteral} value=NUMBER|
   {SymbolRef} symbol=[Symbol]|
   ...
   {InnerPr}'<'vect=Expr ',' vect2=Expr '>';

现在这会导致左递归。如果我写表达式

<x,y>-5>  

当解析器到达第一个“大于”符号时,将无法区分它是比较规则的一部分还是内积规则的结束标记。
我希望我清楚自己。虽然我理解这个问题,但我无法解决。我很感激你的帮助!

1 个答案:

答案 0 :(得分:0)

这可以用句法谓词来解决,例如:这样的事情可以解决问题:

{InnerPr} '<' vect=Expr ',' vect2=Expr =>'>';