Декомпозер кода C

0

Мне было интересно, существует ли программа, чтобы разбить исходный код 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:
  • 0
    На самом деле, я думаю, что такой преобразователь затруднит реализацию кода на Си. В моем классе начала компилятора это было довольно легко составить для операторов и если заявления. Операторы goto сложнее, потому что в целом они могут перемещаться в любом месте функции, а не в четко определенных местах, таких как конец блока if .
Теги:

2 ответа

1

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

gcc -S <your c source>

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню