标记子规则时的规则的 ANTLR4.7 侦听器
ANTLR4.7 listener for a rule when sub rules are labeled
我有一个这样的 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
规则完成时对树进行注释。但是,查看生成的侦听器 class,我看不到 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
方法生成侦听器界面(and/or 访问者界面)。
我有一个这样的 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
规则完成时对树进行注释。但是,查看生成的侦听器 class,我看不到 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
方法生成侦听器界面(and/or 访问者界面)。