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指令生成代码,包括适当的循环优化。