【发布时间】:2011-12-20 10:48:36
【问题描述】:
我需要解析用某些语言(Java、C、C#...)编写的文件,然后将 AST(抽象语法树)追踪到 xml。 (实际上目的是操纵它并追踪到另一种语言 - 这第二部分已经实现)。经过调查,我发现没有通用的方法可以做到这一点。
最接近的是srcML。但第一个问题是它不是 Java =)。第二个问题是语言的数量(只有 3 种)。
我知道DMS可以解决这个问题,但它不是免费开源的。
所以,据我所知,只有一种方法可以做到这一点:采用ANTLR 并尝试将 AST 转换为 XML。所以问题是如何使用 ANTLR(Java) 来做到这一点,或者我可能错过了一些(不是 ANTLR 方式)来做到这一点。
【问题讨论】:
-
Bart Kiers 正确地观察到 ANTLR 有大量的语法(和 JavaCC [以及隐含的其他免费解析器生成器工具],并且其中许多还没有完全准备好迎接黄金时段。冒着冒犯了开源社区,有时你得到的正是你所支付的。DMS 不是开源的(这里明显的反对意见),但我们的语法已经生产就绪,我们认为这是我们的业务,让他们保持方式。实际上,恕我直言,拥有 XML 并没有太大帮助;您需要额外的机器来完成您想要的工作,这就是 DMS 的真正意义所在。
-
说了这么多,如果你真的只想要 AST 作为 XML,并坚持开源,我衷心推荐 ANTLR 作为最佳选择。添加一个 hack 来遍历 AST 并转储 XML 应该很容易做到。
-
...您正在使用 just AST 并翻译另一种语言?我知道 AST 是“必要的”第一步,但我看不出如何构建翻译器,更不用说一个好的翻译器,而不将名称解析为范围和类型。这对大多数语言来说都很难,对现代流行的语言来说也更难(包括对 C++ 来说是一个彻头彻尾的怪物,而且比你对泛型 Java 的预期更糟糕)。包括 ANTLR 在内的“解析器生成器工具”都没有提供太多帮助。 DMS 语言前端在我们有精力的地方提供了这一点(Java 到 1.6、C++、...)
-
... 作为一般规则,AST 不足以操纵一种语言(更不用说翻译它了)。见semanticdesigns.com/Products/DMS/LifeAfterParsing.html。
标签: xml antlr abstract-syntax-tree code-translation