【问题标题】:Antlr4 - How do I report semantic error from visitorAntlr4 - 我如何报告访问者的语义错误
【发布时间】:2018-12-20 23:49:57
【问题描述】:
我有一个语法,我想同时用于 Java 和 C++ 目标。所以,我不能在语法中使用任何语义谓词,因为它消除了目标语言的独立性。
我有类似的东西-
expr : SOME_FUNCTION '(' INT, INT ')'
现在我需要添加一张支票,例如INT > 2。如果此条件失败,我如何从 visitExpr() 抛出错误?我看到词法分析器/解析器有错误侦听器,但没有访问者。
【问题讨论】:
标签:
error-handling
antlr
antlr4
【解决方案1】:
错误侦听器用于报告错误。默认情况下,有一个控制台监听器,它只将错误打印到控制台。这发生在解析(句法)阶段。通过添加自己的错误侦听器,您可以将错误信息收集到应用程序结构中以供以后处理。
检查解析树以确定逻辑错误的语义阶段在句法阶段之后。但是,您仍然可以在访问解析树时使用上述错误信息结构来接收更多错误。无需抛出异常或类似的东西。您所做的就是收集更多错误并直接存储它们。
两个阶段完成后,您就可以使用错误结构来可视化所有错误(编辑器中的红色下划线,显示在错误窗格中等)。