2009-08-04 145 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