树表示,如果声明,正确地分析我有以下几点:如果语句在ANTLR
ifStatement
: 'IF' expression 'THEN' statementBlock
(options {greedy=true;}
: 'ELSE' statementBlock)?
;
现在,我想它解析为一个AST这一点。这是我做的:
ifStatement
: 'IF'^ expression 'THEN'! statementBlock
(options {greedy=true;}
: 'ELSE'! statementBlock)?
;
新增!
和^
,为->
建造指令似乎没有工作。
我的结果是有3个孩子的AST:1是条件式,2和3是语句块。 else部分是可选的:如果没有其他部分,则节点3丢失。
问题是语句块总是空的。如何解决这个问题?
对不起,这个问题到底是什么?你想要什么结果,你得到了什么不同的结果?你希望我们能为你做什么? – 2011-03-27 22:48:46
抱歉不清楚,但是,我的代码不会返回包含3个节点的父节点。如果我还没有一个else语句,然后2. 通常,我的父节点需要有1个孩子,表达式,第二个孩子的第一个语句,第三个else语句 – pantelis 2011-03-27 23:38:40
所以你*要*得到一个AST与三个孩子先行的,后续的,替代的),但实际上,根据输入中是否存在“ELSE”条款,您实际上会获得(先行的,随后的,替代的)或(先行的,后续的),并且您正在寻找使AST得到建立,使它具有相同的结构吗? – 2011-03-28 00:38:34