2

我正在从事一个逆向工程学校项目,该项目需要翻译已编译 C# 项目的操作 AST。我看过关于“将 C# 代码翻译成 AST?”的帖子。在这个网站上,但它看起来不像我要找的那个。

据我所知,目前 C# 没有为 Java 提供类似的库类:http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc。 isv/reference/api/org/eclipse/cdt/core/dom/ast/ASTVisitor.html。如果C#中有这样的库类,这里的一切都解决了。

我已经咨询了某人,这里是可能的解决方案。但是我在制定解决方案时也遇到了问题:

  1. 找到另一个提供库的编译器,该库允许公开其 AST 以进行操作。但是我找不到这样的编译器。
  2. 使用 ANTLR Parser Generator 来制作我自己的编译器(这将是一个更加困难和更长的过程)。那里的下载提供了不同语言的示例语法,但不提供 C#(它有用各种语言编写的语法,包括 C#,但不生成 C# 语法)。因此问题是我找不到 C# 语法。

解决此问题的最短和最快方法是什么?如果我真的必须采取上述替代方案之一,我应该如何解决我面临的这些问题。

4

5 回答 5

4

我知道这个答案很久以前就被接受了。但是我有一个类似的问题,并且不确定那里的选项。我对作为 SharpDevelop 的一部分提供的 NRefactory 库做了一些调查。它确实从 C# 代码生成 AST。

这是作为 SD 源代码一部分的 NRefactory 演示应用程序的图像。输入一些 C# 代码,它会生成 AST 并将其显示在树形视图中。

替代文字

于 2010-12-29T10:36:22.960 回答
1

你为什么不试试NRefectory。我已经看到它在一些SharepDevelop论坛上讨论过关于 AST 的事情。

这是CodeProject上有关此主题的文章。

于 2009-08-04T11:40:10.733 回答
0

我们的DMS Software Reengineering Toolkit(简称 DMS)提供完整的 C# 3.0 解析器。它已被用于准确处理数以万计的 C# 文件。它提供自动 AST 构建、树遍历、表面语法模式匹配和转换等等。作为商业产品,它可能不适用于学生项目。

ANTLR 可以说提供了一个 C# 解析器,但我不知道它是完整的还是健壮的,或者它是否真的构建了 AST。

[编辑 2010 年 1 月 25 日:C# 4.0 解析器现在可用于具有上述所有属性的 DMS]

[编辑 2016 年 5 月:C# 6.0 解析器可用于 DMS。]

于 2009-08-21T01:34:02.087 回答
0

ANTLR 不是一个好的选择。我现在正在尝试改用 Mono Cecil。Mono Cecil 非常适合分析任何可以编译成通用中间语言 (CIL) 的源代码。缺点是它没有正确的文档。

于 2009-10-03T09:10:14.610 回答
0

我刚刚在 StackOverflow 的另一个线程上回答了一个解决方案,在该解决方案中我实现了一个 API 来从 C# 源代码创建和操作 AST

于 2010-02-06T21:52:49.873 回答