标记子规则时规则的ANTLR4.7监听器

时间:2017-10-09 21:19:40

标签: antlr4

我有这样的antlr4.7语法,其中所有子规则都被标记。

date_expr
    :   attr op=( '+' | '-' ) dt_interval=ISO8601_INTERVAL
        #dateexpr_Op
    |   DATETIME_NAME
        #dateexpr_Named
    |   d=( DATETIME_LITERAL | DATE_LITERAL | TIME_LITERAL ) 
        #dateexpr_Literal
    |   attr
        #dateexpr_Attr
    |   '(' date_expr ')'
        #dateexpr_Paren
    ;

我想在date_expr规则完成时注释树。但是,查看生成的侦听器类,我看不到exitDate_expr。我该如何添加?或者,我是否必须使用访问者界面。我对语法工具不太熟悉。

感谢。

1 个答案:

答案 0 :(得分:1)

要获得beforeAllLabledAltsafterAllLabledAlts个访问点,请将带标签的alt规则包装在单个规则中:

anyDate : dateExpr ;
dateExpr
    :   attr op=( '+' | '-' ) dt_interval=ISO8601_INTERVAL    #dateexpr_Op
    |   DATETIME_NAME                                         #dateexpr_Named
    |   d=( DATETIME_LITERAL | DATE_LITERAL | TIME_LITERAL )  #dateexpr_Literal
    |   attr                                                  #dateexpr_Attr
    |   '(' date_expr ')'                                     #dateexpr_Paren
    ;

然后,ANTLR工具将使用AnyDateContext onEntryonExit方法生成侦听器界面(和/或访问者界面)。