我使用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>
当解析器到达第一个“大于”符号时,将无法区分它是比较规则的一部分还是内积规则的结束标记。
我希望我清楚自己。虽然我理解这个问题,但我无法解决。我很感激你的帮助!
答案 0 :(得分:0)
这可以用句法谓词来解决,例如:这样的事情可以解决问题:
{InnerPr} '<' vect=Expr ',' vect2=Expr =>'>';