C 代码分解器

C code decomposer

本文关键字:分解 代码      更新时间:2023-10-16

我想知道是否存在一个程序,可以通过用goto语句替换所有循环和函数调用来将c源代码分解为较低级别的代码。因此,它将代码简化为变量声明/堆分配,if 语句、goto 语句和逻辑/算术函数。

我认为这样的程序对于设计虚拟机来解释 C 代码很有用。

例:

for(int a = 0; a < 100; a++){
    printf("Hello");
}

会成为

int a = 0;
if(!(a<100)){
    goto endForLoopOne;
}
forLoopOne:
    printf("Hello");
    if(a<100){
        a++;
        goto forLoopOne;
    }
endForLoopOne:

gccclang(或者可能是许多其他编译器)允许您从 C 源代码获取程序集输出。
在 gcc -S 标志中将生成一个.s文件。

gcc -S <your c source>

汇编的语法将是AT&T。

据我了解,您所询问的功能在某种程度上是在编译器构造中实现的。原来的高级代码转换为中间 3 地址代码。我认为可以编写一个简单的解析器/编译器来做到这一点。这个月,我在编译器设计课程中编写了一个这样的程序。它是用 c 编写的,使用 flex(词汇分析器)和 bison(yacc)。