next up previous contents
След.: Выполнение программы Выше: f08_new_win Пред.: Введение   Содержание


Алфавит программы и программные единицы

Алфавит Фортрана основан на латинском алфавите, общий стиль выбора ключевых слов ориентирован на читаемость программы в контексте английского языка, причем математического лексического среза. Так, именованные константы вводятся атрибутом PARAMETER (параметры -- так называют константы, входящие в математическую модель); массивам отвечает атрибут DIMENSION (размерность -- он указывает размерность вектора, то есть число компонент одномерного массива, или размерность пространства, то есть число измерений массива многомерного).

Фортран не чувствителен к регистру символов. Таким образом, имена AirPressure, airpressure и AIRpressure с точки зрения Фортрана -- одно и то же. При умелом стилистическом применении этого свойства оно удобно, но, как обычно бывает, возможен и обратный эффект: dt, dT и DT воспринимаются человеком (но не компилятором) как различные объекты.

Слово -- это последовательность непробельных символов. Ряд слов имеет особый смысл в языке -- они называются ключевыми словами. Ключевые слова не зарезервированы, то есть могут быть использованы в программе для целей программиста, если это не вызывает двусмысленности. Ключевое слово может обозначать оператор, исполняемый или неисполняемый, либо указывать атрибут. Исполняемый оператор -- это команда, то есть предписание выполнить некоторые действия. Неисполняемый оператор -- это описание, объекта данных, программной единицы и т.п. В ряде случаев оператор состоит из устойчивого сочетания ключевых слов, например, DOUBLE PRECISION или END IF -- такое сочетание тоде будем называть ключевым словом.

Комментарии в современном Фортране начинаются с восклицательного знака и простираются до конца строки. Комментарий -- это текст, игнориуемый компилятором и использующийся для внесения пометок в программу. Впрочем, имеется исключение из этого принципа: существуют расширения языка, инструкции к которым оформляются в виду комментария, так что компилятор без поддержки расширения игнорирует их.

Многострочных комментариев нет. Поддерживаются комментарии в стиле старого Фортрана -- с символом * или C в первой позиции строки. Пользоваться ими не рекомендуется. В современном Фортране длина строки ограничена $ 132$ символами. Логическая строка программы может быть продолжена на другой строке: для этого в конце прерываемой физической строки ставится символ &. Этот символ является последним непробельным сиволом строки либо после него идет комментарий. Строкой продолжения считается первая строка, содержащая непробельные символы и не являющаяся комментарием. Строка продолжения может начинаться с символа & (в качестве первого непробельного символа), а в случае, если разрывается лексическая единица или символьная строка, это обязательно.

Пробелы существенны качественно, но не количественно; иными словами, отсутствие пробела там, где он необходим как разделитель -- ошибка, но наличие двух и более пробелов равносильно одному. Пробел, разделяющий устойчивое сочетание пары ключевых слов, может быть опущен. В частности, допустимы: DOUBLEPRECISION. Технически это отдельное ключевое слово. Под пробелом понимается пробельный символ, в том числе табуляция. Оператор никаким специальным символом завершать не надо, но если операторов в строке более одного, они разделяются точкой с запятой.

Строка может начинаться с метки, которая представляет собой целое положительное число (не более, чем пятизначное, всего $ 99999$ различных меток), отделенное от остальной строки хотя бы одним пробелом. Роль меток в современном Фортране существенно уменьшилась (по сравнению со старым Фортраном), но они находят применение в операторах ввода-вывода (метки определяют строки, содержащие описание формата, или указывают, куда перейти в случае тех или иных особых ситуаций, таких, как ошибки или обнаружение конца файла). Ведущие нули допускаются, но не меняют значения метки (так, метки 10 и 0010 -- это одна и та же метка). Пустая строка не может быть помечена (при необходимости перейти на строку, которая «ничего не делает», используется оператор CONTINUE). Метки разных строк должны различаться.

К программным единицам относятся: основная программа, внешняя процедура, модуль, подмодуль и блок данных. Внешние процедуры могут быть подпрограммами или функциями. Модуль содержит определения, которые могут быть доступны другим программным единицам. Определения могут быть: объектов данных, типов, процедур, интерфейсных блоков. Подмодули расширяют модули: они могут содержать определения процедур, объявленных в модуле или другом подмодуле; их назначение -- облегчение совместной разработки больших проектов. Подмодулю доступны определения родительского модуля и подмодуля. Блоки данных используется для задания начальных значений объектам данных в именованных common-блоках (устаревшая черта). Модули и подмодули, содержащие процедуры, являются родительскими областями видимости для них, равно как и основная программа или процедура -- для внутренних процедур. Их имена видны в родительской области видимости, в том числе из других внутренних процедур, но не извне.

Программа должна содержать ровно одну основную программу и от нуля и более других программных единиц. Процедуры делятся на подпрограммы и функции. Имена функций могут фигурировать в выражениях, при этом происходит обращение к функции, а возвращаемое значение используется в выражении. Если процедура не объявлена стерильной, она может изменять доступные ей объекты данных извне своего тела. Для вызова подпрограмм предусмотрен оператор CALL.

Всякая программная единица состоит из последовательности операторов. Операторы делятся на выполняемые и невыполняемые: первые указывают действия, вторые -- свойства объектов. Операторы заголовка -- это PROGRAM, FUNCTION, SUBROUTINE, MODULE, SUBMODULE и BLOCK DATA. Оператор END завершает программную единицу. Каждая программная единица состоит из заголовка, неисполняемых операторов, исполняемых операторов, внутренних процедур и оператора END. В основной программе заголовок может быть опущен. В блоке данных нет исполняемых операторов и внутренних процедур. Необходимым является только оператор END. Собственно, минимальная программа на Фортране состоит из одного оператора END. Примеры:

PROGRAM HELLO_WORLD

PRINT*, 'HELLO, WORLD!'

END

Или

PROGRAM SINS

REAL, PARAMETER:: pi = 3.14

REAL, DIMENSION(200):: X = [(I*pi/100,I=0,199)], Y

Y = SIN(X)

PRINT*, SUM(Y*pi/100)

END

В этих программах: может быть опущен заголовок; если он есть, в конце может стоять END PROGRAM и END PROGRAM HELLO_WORLD и END PROGRAM SINS.

Правила формирования имен обычны для императивных языков: первым символом должна быть буква, пробельные символы не допускаются (в свободном формате), число символов ограничено $ 31$ . Ряд имен имеет предопределенное Стандартом значение (например, имена операторов), но Фортран допускает использование этих имен в своих целях, если это не приводит к неоднозначности.

В текст программы может быть целиком включен другой файл -- с помощью строки INCLUDE. После слова INCLUDE указывается символьная константа -- имя файла. Эта строка не является оператором, не может снабжаться меткой и на этой строке не могут размещаться другие операторы. Глубина вложенности этих строк зависит от реализации. Включение текста не может привести, ни на каком уровне вложенности, к включению текста, содержащего эту строку. Первая строка включаемого текста не может быть строкой продолжения, а последняя строка не должна требовать продолжения. Если файл может включаться в различные программы, формат исходного текста которых может быть фиксированным (см. § 15.6), Стандарт рекомендует: размещать метки в первых пяти позициях строки; считать пробелы значимыми; использовать для комментирования символ !, но не размещать его в шестой позиции; для продолжения строки завершать ее символом & в 73 позиции, а строки продолжения начинать с этого символа в шестой позиции.

Операторы делятся на собственно операторы (точнее, однострочные операторы) и конструкции. Конструкции все имеют следующий синтаксис:

[имя:]ЗАГОЛОВОК

тело конструкции

END КОНСТРУКЦИЯ [имя]

Например, оператор IF(X>0) Y=LOG(X) однострочный, а

ln:IF(X>0) THEN

Y = LOG(X)

END IF ln

-- конструкция, и делают они одно и то же: вычисляют логарифм переменной X и присваивают результат переменной Y.

Имя конструкции может не указываться и служит стилистическим целям, а также позволяет прервать конструкцию с помощью оператора EXIT, которому указывается имя конструкции. Без указания имени конструкции этот оператор прерывает ближайший объемлющий цикл.



Ilya A. Chernov 2012-12-19
X