【问题标题】:AST to XML in generally (maybe ANTLR)通常从 AST 到 XML(也许是 ANTLR)
【发布时间】: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


【解决方案1】:

more Java tools besides ANTLR 可以做到这一点(JavaCC 是一种流行的替代方案,仅举一个例子)。

使用解析器生成器解决此问题,您需要执行以下操作:

  1. 定义解析器可以解释的语法并生成词法分析器和解析器(在您的情况下,您的 3 种语言需要 3 种语法);
  2. 遍历您的解析器创建的 AST,并输出纯文本(在您的情况下为 XML);

ANTLR's Wiki 上提供了 Java、C# 和 C 的语法,我确信 JavaCC(和其他解析器生成器工具:Google 是您的朋友)存在现成的语法。但请注意,它是一个 Wiki,许多语法处于实验状态,或者包含错误。

您可以跳过第 1 步并找到为您构建 AST 的现有解析器。您只需要自己遍历 AST 并从中创建一个 XML。例如,Here 是 Java 5 解析器(对于其他解析器,Google 是您的朋友)。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多