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