我试图制定一个规则,将重写成嵌套树(类似于二叉树)。ANTLR规则重写为嵌套树
例如:
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)))
你必须使用嵌套表达式,因为ANTLR是LL(*)。见[这个问题](http://stackoverflow.com/questions/1452729/antlr-grammar-for-expressions?rq=1)。或者你可以在树解析器中做到这一点,这可能会更容易/更快取决于你的语法。 – 2012-06-26 21:59:47
如果'a + b'都是子节点,那么根是什么?你为什么不想以root身份运营? –
根节点是一个虚构的节点。树结构是我工作内容的一部分。 –