Какие регулярные выражения можно использовать для исправления этого нестандартного синтаксиса Fortran? - PullRequest
2 голосов
/ 27 октября 2011

У меня есть куча файлов на Fortran 77, которые используют нестандартную структурную нотацию ( описано здесь ):

STRUCTURE /item/
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END STRUCTURE

Это, очевидно, синтаксис, который использовался некоторыми старымикомпиляторы, но позже были стандартизированы в Fortran 90 следующим образом:

TYPE item
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END TYPE

Я хочу использовать sed или другой подходящий инструмент для автоматической обработки моих исходных файлов, чтобы найти все варианты использования старого синтаксиса.и исправьте их, чтобы использовать обновленный синтаксис (т.е. измените все экземпляры «структуры» на «тип» и удалите косые черты).Я уверен, что могу создать некоторый набор регулярных выражений, чтобы сделать это, но я не достаточно опытен в этой области, чтобы начать.

Кстати, есть аналогичная несовместимость с записьюнотация, также описанная в ссылке:

RECORD /item/ pear, store_catalog(100)

становится:

TYPE(item) pear, store_catalog(100)

Я предполагаю, что аналогичные методы можно использовать и для исправления этих случаев.

1 Ответ

5 голосов
/ 27 октября 2011

Я не очень знаком с синтаксисом Фортрана, поэтому не знаю, как это обобщить, но ваш пример может быть обработан с помощью

sed 's%^STRUCTURE /\(.*\)/$%TYPE \1%;
     s%^END STRUCTURE$%END TYPE%'

Обратите внимание на использование % для разделения команды (s, замена), шаблона и замены. Обычно вы используете /, но это часть сопоставляемого шаблона.

Ваша проблема RECORD действительно должна иметь аналогичное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...