ANTLR中的relop操作的AST规则

时间:2012-01-27 09:40:28

标签: compiler-construction antlr

我想知道如何编写重写规则来为此规则生成AST树。

e5    : (simpleexpression) (relop simpleexpression)* 
      ;

relop : RELOP_GT 
      | RELOP_LT 
      | RELOP_GE 
      | RELOP_LE 
      ;

1 个答案:

答案 0 :(得分: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?