【问题标题】: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】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多