正确解决ANTLR中错误语法的方法

时间:2014-09-23 10:48:09

标签: antlr4

我使用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");}
.....

0 个答案:

没有答案