обратный перевод из fortran90 (или gfortran) в ratfor90?

обратный перевод из fortran90 (или gfortran) в ratfor90?

У меня, скорее всего, глупый вопрос, и я, возможно, задаю его не на том форуме, но не знаю, куда обратиться. Хорошо, я работаю с gfortran через ratfor90 (это хороший маленький препроцессор для gfortran и fortran90, который очень прост, выглядит как C и был разработан для таких неудачников, как я...) Вы пишете очень короткий ratfor90, затем он транслируется в полноценный код gfortran, а вычисления идут оттуда... Мой вопрос: есть ли «обратный» транслятор, который берет полноценный код gfortran и транслирует его в гораздо более короткий и легко читаемый файл ratfor90?

(На всякий случай — мой компьютер — Dell Precision M, Ubuntu 14.04, среда KDE...)

решение1

Кто-томощьсделали это как исследовательский проект, но

  • это что-то вроде декомпилятора (их не так много, чтобы обсуждать), и
  • Начнем с того, что у ratfor не так уж много разработчиков.

Тем не менее, все, что я вижу в этом районе, старое (что и ожидалось, учитывая два упомянутых пункта):

  • Методы обратной компиляцииКристина Сифуэнтес, 1994, упоминает программу, описанную в книге Б. С. Бейкера. Алгоритм структурирования потоковых графов, Журнал ACM, 24(1):98–120, январь 1977 г.

    Бейкер [Бак77] представил алгоритм для структурирования потоковых графов в эквивалентные потоковые графы, которые использовали следующие структуры управления: if..then..else, многоуровневый break, многоуровневый next и бесконечные циклы. Goto использовались всякий раз, когда граф не мог быть структурирован с использованием предыдущих структур. Алгоритм был расширен и на неприводимые графы. Было продемонстрировано, что алгоритм генерировал правильно сформированные и правильно вложенные программы, и что любые операторы goto в конечном графе переходили вперед. Этот алгоритм был реализован в struct программа на PDP11/54, работающая под управлением Unix. Она использовалась для переписывания программ Fortran в Ratfor, расширенный язык Fortran, который использовал управляющие структуры. Программа struct позже использовалась J.Reuter в decomp декомпилятор для структурирования графов, построенных из объектных файлов с символьной информацией.

  • Помощь по дизассемблерам/декомпиляторам, ветка Usenet в 1990 году, комментарий Марка Уильяма Хопкина гласит:

    Существует стандартная утилита UNIX (по крайней мере для используемой нами версии 4.3 bsd), которая делает что-то вроде этого:"struct". Эта утилита берет стандартные программы Fortran-77 и генерирует из них код Ratfor. Ratfor — это «рационализированный» Fortran, включающий все структуры управления, полученные из Algol.

Как вы можете видеть, оба комментируют одну и ту же программу из 1970-х годов. Комментарий о 4.3BSD показывает, что вы можете найти ее источник в сети. То, что я нашел, завершает страницу руководства следующим образом:

BUGS
       Struct knows Fortran 66 syntax, but not full Fortran 77.
       If  an  input  Fortran  program contains identifiers which are reserved
       words in Ratfor, the structured version of the program will  not  be  a
       valid Ratfor program.
       The labels generated cannot go above 32767.
       If you get a goto without a target, try −e .

То есть программа не была завершена и (за исключением другого исследовательского проекта) вряд ли дала бы вам то, что нужно.

Связанный контент