0

我想使用一些工具(免費爲佳)或語言幫我做了以下兩項工作:C程序的代碼自動生成和自動調整工具或語言?

任務1:
1.閱讀規範文件(文本文件)的用戶提供了輸入。對用戶來說,規範文件的格式是由我設計的,用戶必須遵循它。
2.使用規範輸入生成AST(抽象語法樹)。
3.通過應用一些優化技術(例如循環優化,阻塞或我想要的任何其他優化)將AST轉換爲另一個AST。 (可選步驟)
4.將轉換的AST導出到源代碼文件(C程序文件)。
任務2:
1.讀取源代碼文件(C程序文件)並生成一個AST來表示它。
2.通過應用一些優化技術,例如循環優化,阻塞或我想要的任何其他優化,將AST轉換爲另一個AST。 (對於某些優化,我可以參數化它,例如循環展開深度。)
3.將轉換的AST導出到另一個優化的源文件(C程序文件)。

回答

0

POET(經驗調整的參數化優化,http://www.cs.uccs.edu/~qyi/poet)腳本語言是一個候選者。還有其他工具或語言嗎?

+0

你可能會給我們一些關於詩人的信息;鏈接頁面不包含任何描述性內容。 – 2015-02-09 10:56:26

+0

對不起,我已更正鏈接。 – 2015-02-09 12:44:53

+0

我遇到的大多數轉化系統在「LifeAfterParsing」失敗(檢查我的生物)。 POET在這方面非常出色:http://www.cs.uccs.edu/~qyi/poet/documents/tutorial-compiler。pdf弱點是遞歸下降解析;這可能適用於預處理的C(也許不適用於相當有名的歧義),但不太可能處理類似C++的複雜性。 – 2015-02-09 15:51:30

2

OP所要求的一般是program transformation system (PTS)。 PTS通常能夠接受任意語法規範,構建一個解析器,從該語法生成​​AST,應用源到源轉換將解析的AST映射到其他AST,然後從最終AST重新生成源文本。

OP的一個特定問題是解析/解析C源代碼。幾乎沒有任何PTS可用於生產C代碼(ANSI,GCC,MSStudio),並且爲了正確使用這些工具還有很多工作要做。它們也不提供進行有趣轉換所需的輔助分析,如符號表,控制或數據流分析。

據我所知,只有我們DMS Software Reengineering ToolkitRose Compiler,有C.

這樣的具體支持

玫瑰,不過,不是用來接受DSL;它違反了PTS模型,不允許任意的語法定義。相反,它使用EDG解析器前端(我認爲這意味着它也可以接受C++ 14)。但它不能輕鬆處理OP的第一個請求。 Rose也可以進行「源到源」的轉換,但是可以通過手寫程序代碼來抓取AST。它專注於科學計算,因此他們已經完成了阻止循環等方面的具體工作。

DMS旨在接受任意語法(並處理C以及C++ 14),並且實際上可以處理多於一個在同一時間,所以它將直接支持OP的第一個任務。 DMS做表面語法(用C語法直接編寫)源到源的重寫以及程序的重寫。它尚未用於循環阻塞,但DMS已用於構建C++的向量擴展,併爲SIMD指令生成代碼,包括適當的循環優化。