【问题标题】:Parser grammar recognized by ANTLR 4.4 produces lexer syntax errors with ANTLR 4.6 and newer ANTLR versionsANTLR 4.4 识别的解析器语法在 ANTLR 4.6 和更新的 ANTLR 版本中产生词法分析器语法错误
【发布时间】:2021-08-15 10:15:56
【问题描述】:

我有一个无扫描安全标记转换语法,可以正确生成代码并使用 antlr-4.4-complete.jar 运行良好。但是当我升级到 antlr4-4.6-complete.jar 或更新版本时,代码生成失败并出现“error(50): <.g4 file path>::: syntax error: mismatched character ':' Expecting '{'” 和其他错误.

ANTLR v4.6(或者可能是 v4.5,因为我没有尝试过那个版本)中的哪些变化会导致其词法分析器在 v4.4 识别的语法上出错?

抱歉,我无法在此处提供语法摘要,但对代码的访问受到限制。

【问题讨论】:

    标签: syntax-error antlr4 backwards-compatibility


    【解决方案1】:

    事实证明,较新版本的 ANTLR(v4.5 及更高版本)将在对包含语义谓词的名为 channels 的用户定义规则进行词法分析时窒息。 ANTLR v4.4 非常乐意为它进行 lex、解析和生成有效的 Java 代码。我将规则名称更改为 channelz,语法现在通过 4.9.3 快照生成具有所有 ANTLR 版本的代码。不幸的是,由 ANTLR v4.7 及更高版本生成的解析器代码包含许多其他仍有待解决的错误。

    【讨论】:

      【解决方案2】:

      您可以通过打开页面https://github.com/antlr/antlr4/releases/tag/VERSION查看更改,其中VERSION是您感兴趣的版本号。

      所以对于4.5,那就是:https://github.com/antlr/antlr4/releases/tag/4.5

      【讨论】:

      • 谢谢,巴特。我确认行为在 4.5 中发生了变化,但无法通过查看发布信息来确定原因。将尝试逐条恢复语法,直到再次调用词法分析器的 displayRecognitionError。
      猜你喜欢
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多