ANTLR 4.4 识别的解析器语法在 ANTLR 4.6 和更新的 ANTLR 版本中产生词法分析器语法错误

Parser grammar recognized by ANTLR 4.4 produces lexer syntax errors with ANTLR 4.6 and newer ANTLR versions

我有一个无扫描安全标记转换语法,它可以正确生成代码并使用 antlr-4.4-complete.jar 运行良好。但是当我升级到 antlr4-4.6-complete.jar 或更新版本时,代码生成失败并显示“错误(50):<.g4 文件路径>::: 语法错误:不匹配的字符‘:’期待‘{’”和其他错误。

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

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

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

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

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