2

我需要解析用某些语言(Java、C、C#...)编写的文件,然后将 AST(抽象语法树)跟踪到 xml。(实际上目的是操纵它并追踪到另一种语言 - 这第二部分已经实现)。经过调查,我发现没有通用的方法可以做到这一点。

最接近的是srcML。但第一个问题是它不是 Java =)。第二个问题是语言的数量(只有 3 种)。

我知道DMS可以解决这个问题,但它不是免费和开源的。

因此,据我所知,只有一种方法可以做到这一点:采用ANTLR并尝试将 AST 转换为 XML。所以问题是如何使用 ANTLR(Java) 来做到这一点,或者我可能会错过一些(不是 ANTLR 方式)来做到这一点。

4

1 回答 1

2

除了 ANTLR 之外,还有更多的 Java 工具可以做到这一点(JavaCC是一种流行的替代品,仅举一个例子)。

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

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

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

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

祝你好运。

于 2011-11-02T16:11:32.073 回答