syntax-error - 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 识别的语法上出错?
抱歉,我无法在此处提供语法摘要,但对代码的访问受到限制。
解决方案
结果表明,较新版本的 ANTLR(v4.5 及更高版本)将在对包含语义谓词的名为channels的用户定义规则进行词法分析时窒息。ANTLR v4.4 非常乐意为它进行 lex、解析和生成有效的 Java 代码。我将规则名称更改为channelz,语法现在通过 4.9.3 快照生成具有所有 ANTLR 版本的代码。不幸的是,ANTLR v4.7 及更高版本生成的解析器代码包含许多其他仍有待解决的错误。
推荐阅读
- java - java.time: 比较两个 Instants - 获取两者之间的小时数、分钟数、秒数、年数、月数
- python-3.x - 如何从 txt 文件中追加值?Python3
- java - 无法在 vs 代码中加载注释处理器工厂
- python - [E, ]**F 是什么意思?
- qt - 如果 UI 线程被阻塞,如何杀死 QtQuick QML 应用程序?
- javascript - 截断对象数组中的文本?
- pdf - 如何在flutter中从应用程序目录加载pdf文件?
- c# - LINQ Group by 嵌套对象值和重复父对象
- python - 在 Python 中使用周期性正态分布(von mises)提取时间特征
- javascript - 如何将对象“展平”为数组数组