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

标记子规则时规则的ANTLR4.7侦听器,antlr4,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_Li

我有一个类似这样的
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\u expr
规则完成时对树进行注释。但是,查看生成的侦听器类,我没有看到任何
exitDate\u expr
。我如何添加这个?或者,我必须为它使用访客界面吗。我不太熟悉语法工具


谢谢。

要在访问点之前和之后获得
标签数据
标签数据
访问点,请将标签的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
onetry
onExit
方法生成侦听器界面(和/或访问者界面)。

澄清一下,这是一种常见的习惯用法吗?我有一个dateExpr发生在几种情况下。要确定日期部分的上下文,我可以从日期部分的出口向上遍历树,这意味着它必须知道父项的类型,或者使用类似于您的示例的内容(我将遍历子树)。谢谢