编写ANTLR目标

时间:2013-10-29 22:37:46

标签: antlr antlr3 antlr4

为ANTLR创建新语言目标的过程在哪里讨论?虽然由于可用的目标数量似乎与ANTLR3有一些共同的知识,但我没有看到源代码中捆绑的任何文档,也没有找到任何明显的谷歌地方。

我希望找不到ANTLR4的任何此类文档,但我根本没有看到任何文档。

3 个答案:

答案 0 :(得分:1)

ANTLR 3和ANTLR 4的过程完全不同。

  • ANTLR 3
    • 大多数处理都是由ANTLR工具执行的,因此运行时非常简单。
    • 多个目标的源代码存储为主ANTLR 3存储库的一部分。
  • ANTLR 4
    • 大多数处理是由ANTLR运行时执行的,因此运行时是一个看似很少的复杂,精致,对性能非常敏感的源代码。即使对哈希码或数据结构的选择稍作改动也可能意味着速度或内存使用量的O(n³)或更差。
    • 目标是独立开发和维护的,根本不存储在主ANTLR 4存储库中。

可以从C# target的源控制历史中推断出一种方法,但可能不是唯一的方法。除此之外,您应该非常了解可用的数据结构,并在Java和目标语言中使用。运行时算法非常对哈希码的计算方式以及用于在地图中存储对象的方式非常敏感,因此需要精确保留Java目标的行为语义,即使意味着生成的代码看起来不像Java目标。

答案 1 :(得分:0)

在撰写本文时,没有指导如何创建新的ANTLR目标。 ANTLR4的共同主持人,C# target的作者Sam Harwell已经开始making notes on how to create a new target,但还没有完成(还)。

有兴趣编写新目标的人可以看看C#是如何实现的(当然还有原始的Java目标)。但要意识到这绝不是一项微不足道的任务!

答案 2 :(得分:-1)

也许有人可以建立一个Jython桥,这样我们至少可以轻松获得Python?