2009-08-04 24 views
1

我正在开发一个逆向工程学校项目,该项目需要翻译编译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#中有这样的库类,这里的所有东西都解决了。如何操作C#AST?

我已经咨询过某人,这里有可能的解决方案。 但我在解决方案上也遇到了问题。 1)找到另一个编译器,该编译器提供了一个允许其AST被暴露以进行操作的库。但是我找不到这样的编译器。 2)使用ANTLR解析器生成器与我自己的编译器一起出来,这样做(tt将是一个更加困难和更长的过程)。该下载为不同的语言提供了示例语法,但不提供C#(它具有用C#编写的各种语言的语法,但不生成C#语法)。因此问题是我无法找到C#语法。

什么是最短和最快的方法来解决这个问题?如果我真的愿意采取上述的一种选择,我该如何解决我面临的这些问题。

非常感谢你,如果你能帮我解决我的问题!

+0

我对你是否想用C#操纵C#的AST,或者只是操纵使用任何工具,在所有的AST不清楚。我对你在ANTLR的评论感到困惑:我认为ANTLR可以处理C#3.0语法来解析和构建C#树。 – 2009-08-21 01:27:27

回答

0

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

0

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

ANTLR可以提供一个C#解析器,但我不知道它是完整的还是强大的,或者它实际上是否构建AST。

[编辑2010年1月25日:C#4.0现在分析器可DMS与上述所有特性]

[编辑2016年5月:适用于DMS C#6.0分析器]

+0

为了更好地阐明:我希望做的事情是让我能够用C#项目解析C#文件或目录,并且能够构建一个允许我操纵它的AST。操作将工程C#代码逆向转换为UML。 – yeeen 2009-08-21 02:32:22

+0

UML有各种子模型。使用符号表生成分析树中的类图应该非常容易。制作状态图表可能相当困难。我们有一些使用DMS将Java源代码处理成OMG可执行UML的经验,这有点棘手;它需要全面的控制和数据流分析。没有后者可用于ANTLR或我所知的任何通用解析系统,但DMS除外。因人而异。 – 2009-08-21 02:42:28

+0

DMS - 文件管理系统? YMMV - 无论如何,我只需要逆向工程进入UML类图。我现在正在研究ANTLR,因为它似乎是我可以用来操纵AST的唯一方法。稍后将需要使用类层次结构分析方法来转换为UML,该UML应该存储在数据库中。需要等待未来的UML部分指令。我在这里发布了另一个qn:“http://stackoverflow.com/questions/1291153/building-own-c-compiler-using-antlr-compilation-unit”。仍在工作。也许你可以给一些指导。 – yeeen 2009-08-21 08:00:16

3

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

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

alt text