Какой компилятор Fortran поддерживает эти функции? - PullRequest
1 голос
/ 20 июля 2011

У меня есть какой-то устаревший код, который я пытаюсь скомпилировать, и мои доступные компиляторы задыхаются. Вот строки, вызывающие проблемы:

строка 5:

DIMENSION MMO(12)/31,28,31,30,31,30,31,31,30,31,30,31/

строки 7, 8:

DEFINE FILE 4(ANSI,FB,140,3360,0)
DEFINE FILE 7(SDF, ,42,42)

строка 119:

1905 FORMAT(J2,J4,J2,29I5)

Лахей-Фудзисту 95 говорит:

1116-S: "fz32.f", line 5, column 24: Comma expected.
1110-S: "fz32.f", line 5, column 28: Missing name.
1336-S: "fz32.f", line 7, column 7: DEFINE FILE statement not supported.
1336-S: "fz32.f", line 8, column 7: DEFINE FILE statement not supported.
1511-S: "fz32.f", line 119: Invalid character string 'J' found in format specification.
1515-S: "fz32.f", line 119: Edit descriptor must be specified after the repeat specification in a format specification.

... и другие пропущенные ошибки в именах

Гфортран 77 говорит:

fz32.f:5:
         DIMENSION MMO(12)/31,28,31,30,31,30,31,31,30,31,30,31/
                          ^
Invalid form for DIMENSION statement at (^)
fz32.f:7:
         DEFINE FILE 4(ANSI,FB,140,3360,0)
         1                     2
Unrecognized statement name at (1) and invalid form for assignment or statement-function definition at (2)
fz32.f:8:
         DEFINE FILE 7(SDF, ,42,42)
         1                  2
Unrecognized statement name at (1) and invalid form for assignment or statement-function definition at (2)
fz32.f:119:
    1905 FORMAT(J2,J4,J2,29I5)
                ^
Unrecognized FORMAT specifier at (^)
fz32.f:119:
    1905 FORMAT(J2,J4,J2,29I5)
                   ^
Unrecognized FORMAT specifier at (^)
fz32.f:119:
    1905 FORMAT(J2,J4,J2,29I5)
                      ^
Unrecognized FORMAT specifier at (^)

Сбой gcc с похожими ошибками.

Так кто-нибудь знает, какой компилятор мог бы быть использован для сборки этого кода?

Кроме того, в строках 7 и 8 ANSI и SDF не определены ранее в коде. Как работают эти строки? Я ожидаю, что они будут форматировать флаги, но я не вижу, чтобы это было задокументировано.

Ответы [ 3 ]

3 голосов
/ 21 июля 2011

DEFINE FILE вероятно взяты из компилятора FORTRAN IBM OS / 360 и связаны с операционной системой JCL.Вероятно, есть и другие реализации, но в современных операциях не требуется (и не хватает полезности) указывать будущее количество записей и размер записи в файле.Подробнее см. this .

Инициализированное измерение (нестандартное расширение языка) можно изменить на оператор data:

DIMENSION MMO(12)
DATA MMO/31,28,31,30,31,30,31,31,30,31,30,31/

Я смутно припоминаювстречал код формата J и раньше, но не помню, что это значит.Учитывая контекст, вы можете изменить их на I и посмотреть, будет ли это работать:

1905 FORMAT(I2,I4,I2,29I5)
2 голосов
/ 21 июля 2011

Я думаю, что это все нестандартный фортран. Это было довольно распространено до FORTRAN 77, когда производители пытались конкурировать, предлагая удобные расширения. Это была также замкнутая ловушка, но тогда люди были менее чувствительны к этому. Я думаю, что вам было бы лучше перевести ваш код на стандартную совместимость, выводя, что должен делать этот материал. Это зависит от того, сколько строк у вас есть, насколько сложно это будет. Есть некоторые продукты преобразования кода (например, SPAG, http://www.polyhedron.com/spagqa0html) - я не знаю, поймут ли они эти расширения.

1 голос
/ 21 июля 2011

Это:

DIMENSION MMO(12)/31,28,31,30,31,30,31,31,30,31,30,31/

- это просто нестандартная версия оператора данных.В F77 вы могли бы сделать

  DIMENSION MMO(12)
  DATA MMO /31,28,31,30,31,30,31,31,30,31,30,31/

или в современном фортране вы могли бы сделать

  integer, dimension(12) ::  mmo = [31,28,31,30,31,30,31,31,30,31,30,31 ]

Материал define немного более неясен (и, вероятно, идентифицирует компиляторкак компилятор DEC или связанный с ним - ой, это старый).Похоже, вы захотите преобразовать

DEFINE FILE 4(ANSI,FB,140,3360,0)
DEFINE FILE 7(SDF, ,42,42)

во что-то вроде

OPEN(unit=4, access='direct', reclen=FB)
OPEN(unit=7, access='direct')

и посмотрите, как это получится.

Спецификатор J, который я могу 'я нигде не нахожу (и поиск в Google так же полезен, как вы думаете).Так что, возможно, я ошибаюсь из-за DEC.Можете ли вы дать нам пример того, как используется формат 1905?

...