代码自动生成和自动调整工具或C程序语言



我想使用一些工具(免费更好)或语言来帮助我完成以下两项任务:

任务1:
1.读取用户作为输入给出的规范文件(文本文件)。对于用户来说,规范文件的格式是由我设计的,用户必须遵循它。
2.使用规范输入来生成AST(抽象语法树)
3.通过应用一些优化技术,如循环优化、阻塞或我想要的任何其他优化,将AST转换为另一个AST。(可选步骤)
4.将转换后的AST导出到源代码文件(C程序文件)中
任务2:
1.读取源代码文件(C程序文件)并生成一个AST来表示它。
2.通过应用一些优化技术,如循环优化、阻塞或我想要的任何其他优化,将AST转换为另一个AST。(为了进行一些优化,我可以将其参数化,例如循环展开深度。)
3.将转换后的AST导出到另一个优化的源文件(C程序文件)

OP通常想要的是一个程序转换系统(PTS)。PTS通常能够接受任意语法规范,根据该语法构建生成AST的解析器,应用源到源转换将解析的AST映射到其他AST,然后从最终的AST重新生成源文本。

OP的一个特定问题是解析/取消解析C源代码。对于生产C代码(ANSI、GCC、MSStudio),几乎没有可用的PTS可以做到这一点,要做到这一点将需要做大量的工作。它们也不提供进行有趣转换所需的辅助分析,例如符号表、控制或数据流分析。

据我所知,只有我们的DMS软件重组工具包和Rose编译器对C.有这样的特定支持

然而,Rose并不是为接受DSL而设计的;它不允许任意的语法定义,从而违反了PTS模型。相反,它使用EDG解析器前端(我认为这意味着它也接受C++14)。但它无法轻松处理OP的第一个请求。Rose也进行"源代码到源代码"的转换,但这是通过手工编写的过程代码来实现的,该代码会抓取AST。它专注于科学计算,因此他们在阻塞环路等方面做了具体的工作。

DMS被设计为接受任意语法(处理C和C++14),事实上它可以同时处理多个语法,因此它将直接支持OP的第一个任务。DMS执行表面语法(直接使用C语法编写)源到源重写以及过程重写。它尚未用于循环阻塞,但DMS已用于构建C++的矢量扩展,并为SIMD指令生成代码,包括适当的循环优化。

POET(用于经验调整的参数化优化,http://www.cs.uccs.edu/~qyi/peorger)脚本语言是一种候选语言。还有其他工具或语言吗?

最新更新