0

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

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

在此规则之下还有其他规则,例如 Shift,它们包含不同优先级的运算符。所有这些规则都导致了原子规则,我在其中声明了表达式的有效操作数,其中我想支持内积:

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

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

<x,y>-5>  

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

4

1 回答 1

0

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

{InnerPr} '<' vect=Expr ',' vect2=Expr =>'>';
于 2013-11-14T14:12:25.310 回答