2012-01-27 86 views

回答

0

这似乎是一个二进制的操作,其中(子)树的根是运营商,relop,树叶是simpleexpression秒。在这种情况下,简单地使用内联树运营商^,这使得令牌/树才根:

e5 : simpleexpression (relop^ simpleexpression)? 
     ; 

relop : RELOP_GT 
     | RELOP_LT 
     | RELOP_GE 
     | RELOP_LE 
     ; 

请注意,我改变了*?,因为你原来的规则会接受输入,如:

1 <= 2 < 3 

在此将评估为许多编程语言:

true < 3 

这可以看作是一个无效的表达(你的语言可能会接受它,当然,在这种情况下,请离开*!)。

的直列^,表达

1 <= 2 

将被解析成以下AST:

<= 
/\ 
1 2 

另见:How to output the AST built using ANTLR?