Модули fortran находят, где переменные определены/назначены

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

subroutine myroutine(aa,bb)
use xx_module
use yy_module

...
end subroutine myroutine

В части ... представлено множество переменных, которые импортируются из этих модулей. Есть ли хороший способ (или хорошие инструменты), чтобы узнать, какие переменные поступают из какого модуля и так далее? Или мне нужно просмотреть каждый модуль, чтобы увидеть, где каждый из них определен, а затем назначен (что может произойти в другом модуле...)?


person hatmatrix    schedule 24.11.2011    source источник


Ответы (3)


SciTools Understand делает, среди многих других, именно такие вещи. Двойной щелчок по переменной приведет вас к определению. Затем выполните поиск среди вхождений.

введите здесь описание изображения

person Rook    schedule 25.11.2011
comment
Я только что попробовал эту программу, но, похоже, она не понимает конструкции Fortran 2003, такие как процедуры с привязкой к типу. Это также очень дорого. - person bdforbes; 26.11.2011
comment
@bdforbes - Прошло некоторое время с тех пор, как я в последний раз использовал его; В то время F002 не было доступно. Но я помню, что их поддержка была довольно кооперативной. Поскольку они заявляют о поддержке F2003, может быть, вы могли бы подтолкнуть их в правильном направлении? - person Rook; 26.11.2011
comment
Просите, и вы получите - но, к сожалению, действительно дорого для академика. Возможно, когда-нибудь в будущем... но теперь я знаю о существовании таких инструментов и о том, какого типа. Спасибо. - person hatmatrix; 26.11.2011

В системе UNIX/Linux:

grep -ni "variable" filenames

это то, что я обычно делаю из командной строки. Здесь переменная — это имя переменной, которую вы ищете, а имена файлов — это имя файла (или нескольких файлов), который вы ищете. Это должно сразу дать вам представление о том, какие переменные поступают из какого модуля. Оттуда вы можете взяться за детективную работу. Если вы сомневаетесь, введите «man grep».

person milancurcic    schedule 25.11.2011
comment
Спасибо - это, конечно, мой выбор по умолчанию (я обычно rgrep в emacs или grep -R -ni -e "expression" *.f), но мне было интересно, есть ли менее ручной способ, учитывая многочисленные места, где появляются переменные или выражения. - person hatmatrix; 26.11.2011

Если вы используете eclipse, есть Photran, плагин для работы с проектами Fortran. Я не использую его сам, поэтому я не уверен на 100%, но я думаю, что он должен делать то, что вам нужно.

person canavanin    schedule 25.11.2011
comment
Спасибо - я регулярно бываю в emacs... но только что скачал для этого eclipse. Кажется, он поставляется с некоторыми дополнительными инструментами, но не уверен, что он точно выполняет этот «статический анализ кода» (о котором я теперь знаю, что касается моего вопроса)... - person hatmatrix; 26.11.2011