我使用ANTLR来解析编程语言。根据ANTLR书(第9.4章),我实现了一些"错误替代"。本书通过通知错误监听器来描述一个简单的实现:
.....
| ID '{' expr '}' '}' {notifyErrorListeners("Too many braces");}
.....
在阅读完本书之后,我认为将通知实现为侦听器会更容易,所以我在BaseListener中写道:
public void exitExprError(@NotNull MyParser.ExprErrorContext ctx) {
parser.notifyErrorListeners(ctx.start, "Too many braces", null);
}
在我的监听器中,我可以从上下文中提取开始和停止标记,这使我可以更精细地控制标记错误的位置(ctx.start)。
然而,语法文件中的监听器作为监听器实现起来更简单,更快。
我的问题是:
是否也可以在语法文件中向侦听器添加参数?
类似的东西:
.....
| ID '{' expr '}' '}' {notifyErrorListeners(ctx.start,"Too many braces");}
.....