2014-11-25 2 views
0

Мне было интересно, существует ли программа для разрыва исходного кода до кода нижнего уровня, заменяя все циклы и вызовы функций оператором goto. Таким образом, это уменьшило бы код до объявления переменной/распределения кучи, оператора if, инструкции goto и логических/арифметических функций.C code decposer

Я думаю, что такая программа была бы полезна для проектирования виртуальной машины для интерпретации кода 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: 
+0

На самом деле я думаю, что такой трансформатор сделает более сложным ** реализовать код C. В моем начале класс компилятора довольно легко было скомпилировать операторы _for_ и _if_. Операторы _goto_ сложнее, потому что в общем случае они могут прыгать где угодно в функции, а не в четко определенных местах, таких как конец блока _if_. –

ответ

0

Из того, что я понимаю функциональность вы спрашиваете о некоторой степени реализована в конструкции компилятора. Оригинальный код высокого уровня преобразуется в код промежуточного 3-го адреса. То, что я думаю, может быть написан простой парсер/компилятор, который может это сделать. Я написал одну такую ​​программу для назначения в курсе проектирования компилятора в этом месяце. Она была написана в c использованием flex (лексический анализатор) и bison (yacc).

1

gcc и clang (или, возможно, многие другие компиляторы) позволяют получить сборку с источника c.
В флагом gcc -S будет создан файл .s.

gcc -S <your c source> 

Синтаксис сборки будет & T, хотя.