2013-01-07 36 views
7

我已經能夠使用CDT的AST API成功解析源代碼。我的問題涉及到相反的情況:我如何以編程方式構建C AST,然後告訴它將自己寫入文件?我已經看到ASTWriter類(但是它是內部的),並且無法找到關於構建實際AST的任何教程或文檔。使用CDT的抽象語法樹API來生成/編寫C代碼?

我發現了一篇論文,說明我想做什麼:Generating Rewritable Abstract Syntax Trees這使得它看起來像生成代碼將很容易,如果我可以構造樹並說'自己寫'。這是可能的CDT和我怎麼可以開始(最好沒有不推薦/內部方法?)

+0

您是否對基於CDT的解決方案更感興趣,或者您可以使用任何可以爲C構建/轉換任意AST的解決方案,然後相當打印結果? –

+0

由於產生這個問題的項目的重點發生了變化,這不再是一個主要需求。如果我們重新審視它,我寧願選擇基於CDT的解決方案(如Eugene提到的重構解決方案),因爲該項目是基於Eclipse的插件。 –

回答

1

我建議你開始探索CRefactoring及其子類(例如ExtractFunctionRefactoring)。

有很多的問題,CDT的重構框架試圖解決:

  1. 讓用戶預覽之前的變化實際上他們犯的源代碼。
  2. 對未保存的文件錯誤進行操作(例如重構未保存的源代碼編輯器中的代碼)
  3. 在新生成的代碼中確認用戶代碼格式設置。
  4. 可撤銷事務跨越幾個源文件。

我很確定,即使你不需要所有這些功能,這兩個類應該是一個很好的起點。

+0

謝謝。我的問題更多的是源代碼文件的一次性生成,所以我甚至沒有考慮過重構,但是在發佈的類中,我發現了一個名爲INodeFactory的有希望的類。結合http://wiki.eclipse.org/images/b/be/PTPUserDev2012_Ruegg_Refactoring.pdf我(希望!)我可以從這裏弄明白。 –

2

你需要的是使用ASTWriter:

ASTWriter writer = new ASTWriter() 
String code = writer.write(myAST); 

然後你可以轉儲字符串文件,該文件是Eclipse的插件資源的情況下。