0
我想知道如何编写重写规则来为此规则生成AST树。ANTLR中的relop操作的AST规则
e5 : (simpleexpression) (relop simpleexpression)*
;
relop : RELOP_GT
| RELOP_LT
| RELOP_GE
| RELOP_LE
;
我想知道如何编写重写规则来为此规则生成AST树。ANTLR中的relop操作的AST规则
e5 : (simpleexpression) (relop simpleexpression)*
;
relop : RELOP_GT
| RELOP_LT
| RELOP_GE
| RELOP_LE
;
这似乎是一个二进制的操作,其中(子)树的根是运营商,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