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

问题描述

我有一个无扫描仪安全标记转换语法,可以正确生成代码并使用 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-errorantlr4backwards-compatibility

解决方案


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


推荐阅读