Мне было интересно, существует ли программа, чтобы разбить исходный код ac до кода нижнего уровня, заменив все циклы и вызовы функций оператором goto. Таким образом, это уменьшило бы код до объявления переменной/распределения кучи, оператора 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:
gcc
и clang
(или, возможно, многие другие компиляторы) позволяют получить сборку с источника c.
В gcc -S флаг создаст файл .s
.
gcc -S <your c source>
Синтаксис сборки будет AT & T, хотя.
Насколько я понимаю, функциональность, о которой вы просите, несколько реализована в построении компилятора. Оригинальный код высокого уровня преобразуется в код промежуточного 3-го адреса. То, что я думаю, может быть написан простой парсер/компилятор, который может это сделать. Я написал одну такую программу для назначения в курсе проектирования компилятора в этом месяце. Она была написана в c использованием flex (лексический анализатор) и bison (yacc).