Вопрос теоретикам компьютерных наук
Про графы потока управления (в просторечии CFG) - под катом,
чтобы не смущать генеральную популяцию.
Я ищу приладу, которая бы получала на вход упомянутый ГПУ в самом простом виде, скажем, последовательности строк одного из четырех видов:
и порождала бы разумную структуризацию этого ГПУ с помощью условных операторов, циклов и операторов break/continue, минимизируя последние, и минимизируя оставшиеся "голые" операторы goto, если ГПУ оказался несводимым (irreducible, см. рис.).
Например, введя
можно на выходе ожидать, скажем,
Судя по ссылкам и поиску, имеющиеся прилады для работы с ГПУ заточены на преобразование из структурных операторов с целью компиляции и оптимизации, т.е. на обратную задачу.
Задача интересная, но не верится, что никто никогда не писал подобных прилад, например, в качестве дипломной работы или (если прилада оказалась очень умная) диссертации — не хочется изобретать велосипед.
This entry was originally posted at http://spamsink.dreamwidth.org/1056278.html. Please comment there using OpenID.
чтобы не смущать генеральную популяцию.
Я ищу приладу, которая бы получала на вход упомянутый ГПУ в самом простом виде, скажем, последовательности строк одного из четырех видов:
labelNNN:
basic block NNN
if (condNNN) goto labelNNN
goto labelNNN
и порождала бы разумную структуризацию этого ГПУ с помощью условных операторов, циклов и операторов break/continue, минимизируя последние, и минимизируя оставшиеся "голые" операторы goto, если ГПУ оказался несводимым (irreducible, см. рис.).
Например, введя
basic block 1
label1:
if (cond1) goto label2
basic block 2
if (cond2) goto label3
basic block 3
label3:
basic block 4
goto label1
label2:
можно на выходе ожидать, скажем,
for (basic block 1; !cond1; basic block 4) {
basic block 2;
if (cond2) continue;
basic block 3;
}
| или |
basic block 1
while (!cond1) {
basic block 2;
if (!cond2) basic block 3;
basic block 4;
}
|
Судя по ссылкам и поиску, имеющиеся прилады для работы с ГПУ заточены на преобразование из структурных операторов с целью компиляции и оптимизации, т.е. на обратную задачу.
Задача интересная, но не верится, что никто никогда не писал подобных прилад, например, в качестве дипломной работы или (если прилада оказалась очень умная) диссертации — не хочется изобретать велосипед.
This entry was originally posted at http://spamsink.dreamwidth.org/1056278.html. Please comment there using OpenID.