]]> ]]>

f2cpp

Реализация языка программирования FORTRAN

При разработке софта в области научного программирования достаточно часто возникает задача интеграции ранее разработанных программ, написанных на FORTRAN, в текущие проекты. Быстро конвертировать фортрановский код на язык С позволяет утилита f2c. Но читать полученный код достаточно трудно, поскольку смысл кода теряется за многочисленными операциями I/O низкого уровня, в которые транслируются простые команды I/O языка FORTRAN. Чтобы не приходилось вручную чистить код, генерируемый f2c, можно воспользоваться скриптом f2cpp, который обертывает маловразумительные куски кода, генерированные f2c, в читаемый и сжатый код.

Скрипт f2cpp бесплатен (следуя GPL лицензии). Скрипт можно загрузить здесь

f2cpp (версия 1.1.1) разрабатывался и тестировался в системе LINUX GENTOO. В случае обнаружения проблем использования скрипта в других операционных системах, пожалуйста, обращайтесь к автору script@pbiosoft.ru.

Скрипт f2cpp.sh запускает на выполнение два программных модуля:

  1. f2c (www.netlib.org/f2c) — для трансляции фортрановских файлов *.f в файлы языка С *.c;
  2. c2cpp — для удаления дублирующих определений (обеспечение трансляции полученных файлов C++ компилятором) и обработки текста, в части связанной с операторами I/O (обеспечение удобочитаемости полученных файлов).

Конвертор f2c должен быть установлен в системе.

Все примеры команд приведены для системы LINUX.

Инсталляция f2cpp

  1. Установите в системе конвертор f2c
  2. Скопируйте архив f2cpp.tar.gz в нужную директорию и распакуйте его cp f2cpp.tar.gz ~/. cd ~ tar -xzf f2cpp.tar.gz
  3. Установите путь к распакованному архиву. Например, в файле .bashrc добавьте строку: PATH=~/f2cpp:$PATH Учтите, что сеансовая переменная PATH будет переустановлена только после того, как Вы заново войдете в систему.

Использование f2cpp

  1. Прежде всего, скомпилируйте все файлы проекта конвертором f2c. Учтите, что в силу возможных отклонений от стандарта FORTRAN77 компиляция некоторых файлов может быть неудачной. f2c -a -C++ -p *.f
  2. Перейдите в директорию, где располагаются файлы проекта, и запустите скрипт c2cpp, подав ему на вход все скомпилированные файлы проекта cd ~/projects c2cpp *.c

Возможно использование в один шаг, через запуск скрипта f2cpp.sh из директории проекта cd ~/projects f2cpp.sh

Возможные проблемы

Одной из задач, которые выполянет скрипт, является вынесение всех структур, определенных в глобальной области видимости в файлы f2cpp.h (объявления) и f2cpp.cpp (определения). Если сделать это невозможно (что обусловлено неявными ошибками в коде), то выполнение скрипта прерывается с выдачей диагностических сообщений, вида:

[ERROR] "RegexDict" has the same structs with different bodies:

 <<--  file05.c : <<--
struct {
    integer probe;
    real dotden;
} sample;

 -->>  file33.c : -->>
struct {
    real dotionden;
} sample;

После коррекции ошибок в указанных *.c файлах, нужно заново выполнить скрипт c2cpp.


Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам