讨论了为 ANTLR 创建新语言目标的过程?虽然由于可用的目标数量,这似乎是ANTLR3的一些常识,但我没有看到源代码中捆绑的任何文档,也没有在Google中找到任何明显的地方。
我希望找不到任何针对 ANTLR4 的此类文档,但我根本没有看到任何文档。
ANTLR 3和ANTLR 4的过程完全不同。
- ANTLR 3
- 大多数处理由 ANTLR 工具执行,因此运行时非常简单。
- 多个目标的源代码作为主ANTLR 3存储库的一部分存储。
- ANTLR 4
- 大多数处理由 ANTLR 运行时执行,因此运行时是看似少量复杂、精致、对性能极其敏感的源代码。即使哈希码或数据结构的选择稍有改变,也可能意味着速度或内存使用量的O(n³)或更差的差异。
- 目标是独立开发和维护的,根本不存储在主ANTLR 4存储库中。
一种方法(可能不是唯一的方法)可以从 C# 目标的源代码管理历史记录中推断出来。除此之外,您应该对 Java 和目标语言中可用和使用的数据结构有很好的了解。运行时算法对哈希代码的计算方式和用于在映射中存储对象的方式非常敏感,因此需要精确地保留 Java 目标的行为语义,即使这意味着生成的代码看起来不像 Java 目标。
在撰写本文时,还没有如何创建新的ANTLR目标的指南。Sam Harwell,ANTLR4的联合作者,C#目标的作者,已经开始记录如何创建一个新目标,但它还没有完成。
对编写新目标感兴趣的人可以查看 C# 是如何实现的(当然还有原始 Java 目标)。但要意识到这绝不是一项微不足道的任务!