error-handling - Antlr4-如何报告访问者的语义错误

标签 error-handling antlr antlr4

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

我有-

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

现在我需要添加一张支票INT > 2。如果此条件失败,如何从visitExpr()引发错误?我看到词法分析器/解析器有错误侦听器,但没有访问者。

最佳答案

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

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

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

关于error-handling - Antlr4-如何报告访问者的语义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53877542/

相关文章:

python - 在Python的列表中使用min函数获取AttributeError

java - 将字符串与词法分析器匹配 : 'expecting' error

ANTLR3词法分析器优先级

java - Antlr 获取子代币

sockets - 使用 Antlr 解析永无止境的流中的数据

forms - Symfony2 在错误页面上包含表单(404)

powershell - 尝试使用Add-QADGroupMember捕获错误

antlr - 在Antlr4中使用text属性时如何保留空白

parsing - ANTLR 4 : Bad grammar and 'no viable alternative at input'

java - 安卓/Java : UncaughtExceptionHandler and Bugsnag in parallel?