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 запускает на выполнение два программных модуля:
- f2c (www.netlib.org/f2c) — для трансляции фортрановских файлов *.f в файлы языка С *.c;
- c2cpp — для удаления дублирующих определений (обеспечение трансляции полученных файлов C++ компилятором) и обработки текста, в части связанной с операторами I/O (обеспечение удобочитаемости полученных файлов).
Конвертор f2c должен быть установлен в системе.
Все примеры команд приведены для системы LINUX.
Инсталляция f2cpp
- Установите в системе конвертор f2c
- Скопируйте архив f2cpp.tar.gz в нужную директорию и распакуйте его cp f2cpp.tar.gz ~/. cd ~ tar -xzf f2cpp.tar.gz
- Установите путь к распакованному архиву. Например, в файле .bashrc добавьте строку: PATH=~/f2cpp:$PATH Учтите, что сеансовая переменная PATH будет переустановлена только после того, как Вы заново войдете в систему.
Использование f2cpp
- Прежде всего, скомпилируйте все файлы проекта конвертором f2c. Учтите, что в силу возможных отклонений от стандарта FORTRAN77 компиляция некоторых файлов может быть неудачной. f2c -a -C++ -p *.f
- Перейдите в директорию, где располагаются файлы проекта, и запустите скрипт 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
]]>