标记子规则时规则的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发生在几种情况下。要确定日期部分的上下文,我可以从日期部分的出口向上遍历树,这意味着它必须知道父项的类型,或者使用类似于您的示例的内容(我将遍历子树)。谢谢