我有这样的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
。我该如何添加?或者,我是否必须使用访问者界面。我对语法工具不太熟悉。
感谢。
答案 0 :(得分:1)
要获得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
方法生成侦听器界面(和/或访问者界面)。