我正在尝试制定一个将重写为嵌套树(类似于二叉树)的规则。
例如:
a + b + c + d;
会解析为像( ( (a + b) + c) + d)
. 基本上每个根节点都会有三个子节点(LHS '+' RHS),其中 LHS 可能是更多嵌套节点。
我尝试了一些类似的事情:
rule: lhs '+' ID;
lhs: ID | rule;
和
rule
: rule '+' ID
| ID '+' ID;
(有一些树重写)但他们都给了我一个关于它是左递归的错误。我不确定如何在没有某种递归的情况下解决这个问题。
编辑:我最近的尝试在右侧递归,这与我想要的相反:
rule:
ID (op='+' rule)?
-> {op == null}? ID
-> ^(BinaryExpression<node=MyBinaryExpression> ID $op rule)
给(a + (b + (c + d) ) )