我有一个这样的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
.我该如何添加?或者,我是否必须为此使用访问者界面。我对语法工具不太熟悉。
谢谢。
要实现beforeAllLabledAlts
和afterAllLabledAlts
访问点,请将标记的 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
onEntry
和onExit
方法生成侦听器接口(和/或访客接口)。