Программа

Программа состоит из одного или нескольких модулей. Модуль определяет независимую часть программы.

ОПИСАНИЕ-МОДУЛЯ ::= [ЗАГОЛОВОК-МОДУЛЯ] СПИСОК-ОПИСАНИЙ

ЗАГОЛОВОК-МОДУЛЯ ::= module ИМЯ-МОДУЛЯ [ ( ОПИСАНИЯ-АРГУМЕНТОВ ) ];

ИМЯ-МОДУЛЯ ::= ИДЕНТИФИКАТОР

Аргументы, описанные в круглых скобках, являются формальными параметрами модуля. Структура ОПИСАНИЙ-АРГУМЕНТОВ определена в разд. 6.3.1.

СПИСОК-ОПИСАНИЙ ::= ОПИСАНИЕ (; ОПИСАНИЕ)*

ОПИСАНИЕ ::=

ИМПОРТ-МОДУЛЯ | ОПИСАНИЕ-ТИПА |

ОПИСАНИЕ-ГЛОБАЛЬНЫХ-ПЕРЕМЕННЫХ |

ОПРЕДЕЛЕНИЕ-ПРЕДИКАТА | СПЕЦИФИКАЦИЯ-ПРЕДИКАТА |

ОПИСАНИЕ-ФОРМУЛЫ | ОПРЕДЕЛЕНИЕ-КЛАССА |

ОПИСАНИЕ-СООБЩЕНИЯ | ОПРЕДЕЛЕНИЕ-ПРОЦЕССА

ОПИСАНИЕ-ФОРМУЛЫ (см. разд. 6.9) определяет функцию или предикат; они встречаются в предусловиях, постусловиях и формулах. Три последние альтернативы ОПИСАНИЯ используются для задания процессов; см. разд. 6.10.


ИМПОРТ-МОДУЛЯ ::=

import ИМЯ-МОДУЛЯ [ ( АРГУМЕНТЫ )] [ as ЛОКАЛЬНОЕ-ИМЯ-МОДУЛЯ ]

ЛОКАЛЬНОЕ-ИМЯ-МОДУЛЯ ::= ИДЕНТИФИКАТОР

Имена модулей, встречающиеся в описаниях данного модуля, должны быть определены конструкцией ИМПОРТ-МОДУЛЯ. Если импортируемый модуль имеет формальные параметры, то в круглых скобках задается соответствующий набор фактических параметров. Конструкция АРГУМЕНТЫ определена в разд. 6.3.3. Правила подстановки фактических параметров на место формальных те же самые, что и для вызова предиката. ЛОКАЛЬНОЕ-ИМЯ-МОДУЛЯ используется в теле модуля как эквивалент ИМЯ-МОДУЛЯ ( АРГУМЕНТЫ ).

ОПИСАНИЕ-ГЛОБАЛЬНЫХ-ПЕРЕМЕННЫХ ::=

ОПИСАНИЕ-ПЕРЕМЕННЫХ | ОПИСАНИЕ-ПЕРЕМЕННЫХ-С-ИНИЦИАЛИЗАЦИЕЙ

Глобальные переменные обычно определяют внешние параметры задачи. В нижеследующих определениях предикатов эти переменные считаются аргументами. Они используются в теле предиката, но не упоминаются в заголовке.

ОПИСАНИЕ-ПЕРЕМЕННЫХ ::=

ИЗОБРАЖЕНИЕ-ТИПА-ПЕРЕМЕННОЙ ИМЯ-ПЕРЕМЕННОЙ (, ИМЯ-ПЕРЕМЕННОЙ)*

ОПИСАНИЕ-ПЕРЕМЕННЫХ-С-ИНИЦИАЛИЗАЦИЕЙ ::=

ИЗОБРАЖЕНИЕ-ТИПА-ПЕРЕМЕННОЙ ОПРЕДЕЛЕНИЕ-ПЕРЕМЕННОЙ

(, ОПРЕДЕЛЕНИЕ-ПЕРЕМЕННОЙ)*

ОПРЕДЕЛЕНИЕ-ПЕРЕМЕННОЙ ::= ИМЯ-ПЕРЕМЕННОЙ = ВЫРАЖЕНИЕ |

ИМЯ-ПЕРЕМЕННОЙ

Тип выражения должен быть совместим с типом переменой, которой присваивается значение переменной.

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

Следующей областью локализации являются конструкции: изображение подтипа, определение массива, элемент агрегата вида “итерация выражений”. Переменные, определенные в каждой из этих конструкций, локализованы в конструкции и недоступны вне нее. Класс также определяет независимую область локализации. Поля класса доступны префиксацией объекта класса (см. разд. 6.6).

Исполнение программы начинается исполнением предиката с именем main. Рекомендован предикат со следующими параметрами: main( seq(string)argv: int ret_code ). Параметр argv поставляет массив входных аргументов при исполнении программы. Параметру ret_code присваивается значение кода выхода.

Для вывода информации используется оператор print, аргументы которого - выражения и массивы.