Antlr4 - 如何报告来自访问者的语义错误



我有一个语法,我想同时用于Java和C++目标。因此,我不能在语法中使用任何语义谓词,因为它消除了目标语言的独立性。

我有类似的东西——

expr : SOME_FUNCTION '(' INT, INT ')'

现在我需要添加一个检查,例如 INT > 2 .如果此条件失败,如何从visitExpr()抛出错误?我看到词法分析器/解析器有错误侦听器,但没有访问者。

错误侦听器用于报告错误。默认情况下,有一个控制台侦听器,它仅将错误打印到控制台。这发生在解析(句法)阶段。通过添加自己的错误侦听器,可以将错误信息收集到应用程序结构中以供以后处理。

检查分析树以确定逻辑错误的语义阶段位于句法阶段之后。但是,您仍然可以使用提到的错误信息结构在访问解析树时接收更多错误。无需抛出异常或类似的东西。您要做的就是收集更多错误并直接存储它们。

完成这两个阶段后,您可以使用错误结构可视化所有错误(编辑器中的红色下划线、错误窗格中的显示等)。

最新更新