【问题标题】:Modify AST tree in C and compile the new AST tree在 C 中修改 AST 树并编译新的 AST 树
【发布时间】:2020-07-26 10:22:49
【问题描述】:

我想做的是 1.解析C代码生成AST 2.修改AST 3. 编译新的AST,不改变.c源文件。

有什么工具可以用来做这件事吗?如果没有,有什么工具可以用来修改汇编代码吗?

我查看了gcc-plugin,关于它的文档很少,我只能弄清楚gcc在解析源代码时如何打印信息(例如变量类型),但我不知道我该怎么做修改它们。

【问题讨论】:

标签: c parsing gcc compiler-construction abstract-syntax-tree


【解决方案1】:

我们的DMS Software Reenginering Toolkit 及其C front end 就是为此而设计的。

DMS 提供通用解析和转换功能。 C 前端建立在 DMS 之上,了解 C 的许多方言,可以将它们解析为 AST,包括在许多情况下保留预处理器条件。

然后使用 DMS 的重写功能对 AST 进行更改。与其直接攻击树节点,人们通常会在概念上编写如下形式的规则:

if (sourceCodePattern) and condition then replacementCodepattern

其中 sourceCodePattern 和 replacementCodePattern 是具有可变占位符的 C 代码片段。一个例子:

 rule make_autoinc(l: lefthandside, e:expression):statement->statement
     " \l = \l + \e ; " ->  " \l++; ";

在应用所有重写规则后,DMS 可以将修改后的源代码漂亮地打印回文件,将缩进、数字基数、cmets 等保留为完全有效、可编译的源代码。

在那之后你用它做什么是你的事。

C 前端还可以构建符号表并构建控制和数据流信息,这通常是执行所需更改所必需的。

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2017-07-13
    • 2023-03-14
    相关资源
    最近更新 更多