【问题标题】:Code auto-generation and auto-tuning tools or language for C program?C 程序的代码自动生成和自动调整工具或语言?
【发布时间】:2015-04-09 01:06:32
【问题描述】:

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

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

【问题讨论】:

    标签: optimization compiler-construction code-generation abstract-syntax-tree dsl


    【解决方案1】:

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

    OP 的一个具体问题是解析/反解析 C 源代码。几乎没有可用的 PTS 对生产 C 代码(ANSI、GCC、MSStudio)执行此操作,要做到这一点需要做很多工作。它们也不提供进行有趣转换所需的辅助分析,例如符号表、控制或数据流分析。

    据我所知,只有我们的DMS Software Reengineering ToolkitRose Compiler 对C 有这样的特定支持。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你可以给我们一些关于诗人做什么的信息;链接页面不包含任何描述性内容。
      • 我遇到的大多数转换系统都在“LifeAfterParsing”失败(查看我的简历)。 POET 在这方面给人留下了深刻的印象:cs.uccs.edu/~qyi/poet/documents/tutorial-compiler.pdf 一个弱点是递归下降解析;这可能适用于预处理的 C(可能不适用于相当著名的歧义),但不太可能处理 C++ 之类的复杂性。
      猜你喜欢
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2010-10-04
      • 2010-09-23
      相关资源
      最近更新 更多