Обозначение НТД, на который дана ссылка | Номер раздела, приложения |
ГОСТ 27465-87 | 2.1, приложение 3 |
________________
* Толковый словарь русского языка/Под ред. Д.Н.Ушакова. - М.: Государственное издательство иностранных и национальных словарей, 1938.
условный оператор : : = | |||||
if условие then | |||||
последовательность_операторов | |||||
{elsif условие then | |||||
последовательность_операторов} | |||||
[else | |||||
последовательность_операторов] | |||||
end if; |
графический символ : : = основной_графический_символ | ||||
строчная_буква дополнительный_специальный_символ | ||||
основной_графический_символ : : = прописная_буква | ||||
цифра специальный_ символ символ_пробела | ||||
основной_символ : : = основной_графический_символ | ||||
символ_управления_форматом |
Символ | Наименование |
" | Кавычки |
# | Номер |
& | Коммерческое И |
' | Апостроф |
( | Круглая скобка левая |
) | Круглая скобка правая |
* | Звездочка |
+ | Плюс |
, | Запятая |
- | Минус |
. | Точка |
/ | Дробная черта |
: | Двоеточие |
; | Точка с запятой |
< | Меньше |
= | Равно |
> | Больше |
_ | Подчеркивание |
Вертикальная черта | |
! | Восклицательный знак |
Знак денежной единицы | |
% | Проценты |
? | Вопросительный знак |
@ | Коммерческое ЭТ |
[ | Квадратная скобка левая |
\ | Обратная дробная черта |
] | Квадратная скобка правая |
Сиркюмфлекс | |
Слабое ударение | |
{ | Фигурная скобка левая |
} | Фигурная скобка правая |
Черта сверху |
Ограничитель | Наименование |
=> | Стрелка |
.. | Двойная точка |
** | Двойная звездочка (возведение в степень) |
:= | Присваивание (читается: "становится равным") |
/= | Неравенство (читается: "не равно") |
> = | Больше или равно |
< = | Меньше или равно |
< < | Левая скобка метки |
>> | Правая скобка метки |
< > | Бокс (коробка) |
12 | 0 | 1Е6 | 123_456 | - - целые литералы | |||
12.0 | 0.0 | 0.456 | 3.14159_26 | - - вещественные литералы | |||
1.34Е-12 | 1.0Е+6 | - - вещественные литералы с порядком |
литерал_с_основанием : : = основание # целое_с_основанием | ||||
[. целое_с_основанием] # [порядок] | ||||
основание : : = целое целое_с_основанием : : = | ||||
расширенная_цифра { [подчеркивание] расширенная__цифра} расширенная_цифра : : = цифра буква |
2#1111_1111# | 16#FF# | 016#0FF# | |||
- - целые литералы со значением 255 | |||||
16#Е#Е1 | 2#1110_0000# | ||||
- - целые литералы со значением 224 | |||||
16#F.FF#E+2 | 2#1.1111_1111_111#E11 | ||||
- - вещественные литералы со значением 4095.0 |
" Дневное сообщение" | |||||
"" | - - пустой строковый литерал | ||||
" " | "А" """" | - - три строковых литерала длиной 1 | |||
"Символы, такие, как , % и } допустимы в строковых литералах". |
прагма : : = pragma идентификатор | ||||
[ (сопоставление_аргумента {, сопоставление_аргумента}) ]; | ||||
сопоставление_аргумента : : = | ||||
[идeнтификaтop_аргумента =>] имя | ||||
[идентификатор_ аргумента =>] выражение |
Зарезервированные слова | |
abort | - прекращение |
abs | - абсолютная величина |
accept | - принятие |
access | - ссылка_на |
all | - все |
and | - и |
array | - массив |
at | - положение |
begin | - начало |
body | - тело |
case | - выбор |
constant | - константа |
declare | - описание |
delay | - задержка |
delta | - дельта |
digits | - цифр |
do | - выполнение |
else | - иначе |
elsif | - инесли* |
________________ * Наименование соответствует оригиналу. - Примечание изготовителя базы данных. | |
end | - конец |
entry | - вход |
exception | - исключение |
exit | - выход |
for | -для |
function | - функция |
generic | - настройка |
goto | - переход_на |
if | - если |
in | - в |
in | - входной |
is | - есть |
limited | - лимитируемый |
loop | - цикл |
mod | - по_модулю |
new | - новый |
not | - не |
null | - пусто |
of | - из |
or | - или |
others | - другие |
out | - выходной |
package | - пакет |
pragma | - прагма |
private | - личный |
procedure | - процедура |
raise | - возбуждение |
range | - диапазон |
record | - запись |
rem | - остаток |
renames | - синоним |
return | - возврат |
reverse | - в_обратном_порядке |
select | - отбор |
separate | - отдельно |
subtype | - подтип |
task | - задача |
terminate | - завершение |
then | - то |
type | - тип |
use | - использовать |
when | - когда |
while | - пока |
with | - совместно_с |
xor | - либо |
основное_описание : : = | |||||
описание_объекта | описание_числа | ||||
описание_типа | описание_подтипа | ||||
описание_подпрограммы | описание_пакета | ||||
описание_задачи | описание_настройки | ||||
описание_исключения | конкретизация_настройки | ||||
описание_переименования | описание_субконстанты |
описание_объекта : : = | |||||
список_идентификаторов : [constant] | |||||
указание_подтипа [: = выражение] ; | |||||
список идентификаторов : [constant] | |||||
определение_ограниченного_индексируемого_типа [: = выражение] ; | |||||
описание _числа : : = | |||||
список_идентификаторов : constant | |||||
: = универсальное _статическое_выражение; | |||||
список_идентификаторов : : = | |||||
идентификатор {, идентификатор} |
СЧЕТ, СУММА: INTEGER; РАЗМЕР: INTEGER range 0 .. 10_000 : = 0; СОРТИРОВАН: BOOLEAN : = FALSE; ТАБЛИЦА_ЦВЕТОВ: array (1 .. К) of ЦВЕТ; РЕЖИМ: ВЕКТОР_БИТ (1 .. 10) : = (others => TRUE); Примеры описаний констант: | ||||
ПРЕДЕЛ | : constant INTEGER := 10_000; | |||
НИЖНИЙ_ПРЕДЕЛ: | constant INTEGER : = ПРЕДЕЛ/10; | |||
ДОПУСК | : constant ВЕЩЕСТВ : = ДИСПЕРСИЯ (1.15); |
ПИ | : constant: = 3.14159_26536; - - вещественное | |||
- - число | ||||
ДВА_ПИ | : constant : = 2.0*ПИ; - - вещественное число | |||
МАКСИМУМ | : constant : = 500; | - - целое число | ||
СТЕПЕНЬ_16: constant : = 2 * * 16; - - целое 65_536 | ||||
ОДИН, ONE, EINS: constant : = 1; | - - три различных имени 1 |
описание_типа : : = полное_описание_типа | |||||
неполное_описание_типа описание_личного_типа | |||||
полное_описание_типа : : = | |||||
type идентификатор [раздел_дискриминантов] | |||||
is определение_типа; | |||||
определение_типа : : = определение_перечислимого__типа | |||||
определение_целого_типа опредeлeниe_вeщecтвeннoгo_типa определение_индексируемого_типа определение_именуемого_типа определение_сылочного_типа определение_производного_типа |
(БЕЛЫЙ, КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, КОРИЧНЕВЫЙ, ЧЕРНЫЙ) range 1 .. 72 array (1 .. 10) of INTEGER Примеры описаний типов: type ЦВЕТ is (БЕЛЫЙ, КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, | ||||
ГОЛУБОЙ, КОРИЧНЕВЫЙ, ЧЕРНЫЙ); | ||||
type СТОЛБЕЦ is range 1 .. 72; type ТАБЛИЦА is array (1 .. 10) of INTEGER; |
описание_подтипа : : = | ||||
subtype идентификатор is указание_подтипа; | ||||
указание_подтипа : : = обозначение_типа [ограничение] обозначение _типа : : = имя_типа имя_подтипа ограничение : : = ограничение_диапазона | ||||
ограничение_плавающего_типа ограничение_фиксированного_типа ограничение_индекса ограничение_дискриминанта |
определение_производного_типа : : = | ||||
new указание_подтипа |
определение _перечислимого_типа : : = | ||||
(спецификация_литерала_перечисления {, спецификация_литерала_перечисления}) | ||||
спецификация_литерала_перечисления : : = | ||||
литерал_перечисления | ||||
литерал_перечисления : : = | ||||
идентификатор символьный_литерал |
type ДЕНЬ is (ПНД, ВТР, СРД, ЧТВ, ПТН, СББ, ВСК); type МАСТЬ is (ТРЕФЫ, БУБНЫ, ЧЕРВЫ, ПИКИ); type РОД is (M, Ж); type УРОВЕНЬ is (НИЗШИЙ, СРЕДНИЙ, СРОЧНЫЙ); type ЦВЕТ is (БЕЛЫЙ, КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, | ||||||
КОРИЧНЕВЫЙ, ЧЕРНЫЙ); | ||||||
type СВЕТ is (КРАСНЫЙ, ЯНТАРНЫЙ, ЗЕЛЕНЫЙ) : | ||||||
- - КРАСНЫЙ и ЗЕЛЕНЫЙ совмещены. | ||||||
type ШЕСТНАДЦАТЕРИЧНЫЕ is ('A', 'B', 'C', 'D', 'Е', 'F') ; type СМЕШАННЫЙ is ('А', 'В', '*', В, НИЧТО, '?', '%') ; subtype ДЕНЬ НЕДЕЛИ is ДЕНЬ range ПНД .. ПТН; subtype КОЗЫРЬ is МАСТЬ range ЧЕРВЫ .. ПИКИ; subtype РАДУГА is ЦВЕТ rangy КРАСНЫЙ .. ГОЛУБОЙ; | ||||||
- - КРАСНЫЙ - цвет, но не свет. |
ограничение_плавающего_типа : : = | |||||
определение_точности_плавающего_типа | |||||
[ограничение_диапазона] | |||||
определение_точности_плавающего_типа : : = | |||||
digits статическое_пpocтoe_выpaжeниe |
type плавающий_тип is new | ||||
предопределенный_плавающий_тип; | ||||
subtype Т is плавающий _тип digits Д | ||||
[range плавающий_тип (Л) .. плавающий_тип (П)]; |
type КОЭФФИЦИЕНТ is digits 10 range - 1.0 .. 1.0; type ВЕЩЕСТВ is digits 8; | ||||
type МАССА is digits | 7 range 0.0 .. 1.0E35; | |||
subtype КОРОТКИЙ_КОЭФФ is КОЭФФИЦИЕНТ digits 5; - - подтип с меньшей точностью subtype ВЕРОЯТНОСТЬ is ВЕЩЕСТВ range 0.0 .. 1.0; - - подтип с меньшим диапазоном. |
ограничение_фиксированного_типа : : = | |||||
определение_точности_фиксированного_типа | |||||
[ограничение_диапазона] | |||||
определение_точности_фиксированного_типа : : = | |||||
delta статическое_простое_выражение |
type фиксированный_тип is new | ||||
предопределенный_фиксированный_тип; | ||||
subtype Т is фиксированный_тип delta Д range | ||||
фиксированный_тип (Л) .. фиксированный_тип (П); |
определение_индексируемого_типа : : = | |||||
определение_неограниченного_индексируемого_типа определение_ограниченного__индексируемого_типа | |||||
определение_неограниченного_индексируемого_типа : : = | |||||
array (определение_подтипа_индекса | |||||
{, определение_подтипа_индекса}) of указание_подтипа_компонента | |||||
определение_ограниченного_индексируемого_типа : : = | |||||
array ограничение_индекса of | |||||
указание_подтипа_компонента | |||||
определение_подтипа_индекса : : = | |||||
обозначение_типа range > | |||||
ограничение_индекса : : = | |||||
(дискретный_диапазон {, дискретный_диапазон}) | |||||
дискретный_диапазон : : = | |||||
указание_дискретного_подтипа диапазон |
type T is array (POSITIVE range МИН..МАКС) | |||||
of КОМПОНЕНТОВ; |
subtype подтип_индекс is POSITIVE range МИН .. МАКС; type индексируемый_тип is array (подтип_индекса range >) | |||||
of КОМПОНЕНТОВ; | |||||
subtype Т is индексируемый_тип (подтип_индекса); |
МОЕ_РАСПИСАНИЕ: РАСПИСАНИЕ; - - все массивы типа | ||||
- - РАСПИСАНИЕ имеют одни и те же границы. |
type ПЕРЕМ_СТРОЧКА (ДЛИНА: INTEGER) is | |||||
record | |||||
ОБРАЗ: STRING (N..ДЛИНА) ; | |||||
end record; | |||||
ПУСТАЯ_СТРОЧКА: ПЕРЕМ_СТРОЧКА (0); - - ПУСТАЯ_СТРОЧКА. ОБРАЗ - пустой массив |
определение_именуемого_типа : : = | |||||
record | |||||
список_компонентов | |||||
end record | |||||
список_компонентов : : = | |||||
описание_компонента {описание_компонента} {описание_компонента} раздел_вариантов null; | |||||
описание_компонента : : = | |||||
список_идентификаторов : определение_подтипа_компонента [:= выражение]; | |||||
определение_подтипа_компонента : : =указание_подтипа |
type ДАТА is | |||||
record | |||||
ДЕНЬ: INTEGER range 1..31; МЕСЯЦ: ИМЯ_МЕСЯЦА; ГОД: INTEGER range 0..4000; | |||||
end record; | |||||
type КОМПЛЕКСНЫЙ is | |||||
record | |||||
ВЕЩ: ВЕЩЕСТВ: = 0.0; МНИМ: ВЕЩЕСТВ: =0.0; | |||||
end record; |
раздел_дискриминантов : : = | |||||||
(спецификация_дискриминанта {; спецификация_дискриминанта}) | |||||||
спецификация_дискриминанта : : = | |||||||
список_идентификаторов : обозначение_типа | |||||||
[: = выражение] |
type БУФЕР (РАЗМЕР: РАЗМЕР_БУФЕРА: = 100) is - - см. 3.5.4 | |||||
record | |||||
ПОЗ: РАЗМЕР_БУФЕРА: = 0; ЗНАЧЕНИЕ: STRING (1..РАЗМЕР); | |||||
end record; | |||||
type КВАДРАТ (СТОРОНА: INTEGER) is | |||||
record | |||||
MATP: МАТРИЦА (1..СТОРОНА, 1..СТОРОНА); - - см. 3.6 | |||||
end record; | |||||
type ДВОЙНОЙ_КВАДРАТ (ЧИСЛО: INTEGER) is | |||||
record | |||||
ЛЕВЫЙ: КВАДРАТ (ЧИСЛО); ПРАВЫЙ: КВАДРАТ (ЧИСЛО); | |||||
end record; | |||||
type ЭЛЕМЕНТ (ЧИСЛО: POSITIVE) is | |||||
record | |||||
СОДЕРЖАНИЕ: INTEGER; - - компонент не зависит от дискриминанта | |||||
end record; |
ограничение_дискриминанта : : = | ||||
(сопоставление_дискриминанта {, сопоставление_дискриминанта}) | ||||
сопоставление_дискриминанта : : = | ||||
[простое_имя_дискриминанта { простое_имя_дискриминанта} = >] выражение |
БОЛЬШОЙ: БУФЕР (200); - - ограничен, всегда 200 символов | |||||||
- - (явное значение дискриминанта) | |||||||
СООБЩЕНИЕ: БУФЕР; | - - неограничен, вначале 100 символов | ||||||
- - (значение дискриминанта по умолчанию) | |||||||
БАЗИС: КВАДРАТ (5); | - - ограничен, всегда 5 на 5 | ||||||
НЕПРАВИЛЬНЫЙ: КВАДРАТ; - - неправильно, КВАДРАТ должен быть ограничен |
раздел_вариантов : : = | |||||
case простое_имя_дискриминанта is | |||||
вариант {вариант} | |||||
end case; | |||||
вариант : : = | |||||
when выбор { выбор} => | |||||
список_компонентов | |||||
выбор : : = простое_выражение | |||||
дискретный_диапазон others простое_имя_компонента |
type УСТРОЙСТВО is (ПЕЧАТАЮЩЕЕ_УСТРОЙСТВО, ДИСК, БАРАБАН); type СОСТОЯНИЕ is (ОТКРЫТ, ЗАКРЫТ); type ПЕРИФЕРИЙНЫЙ (МОДУЛЬ: УСТРОЙСТВО: = ДИСК) is | |||||||
record | |||||||
СТАТУС: СОСТОЯНИЕ; case МОДУЛЬ is | |||||||
when ПЕЧАТАЮЩЕЕ_УСТРОЙСТВО => | |||||||
СЧЕТ_СТРОЧЕК: INTEGER range 1..PA3MEP_CTP; | |||||||
when others = > | |||||||
ЦИЛИНДР: ИНДЕКС_ЦИЛИНДРА; ТРАКТ: НОМЕР_ТРАКТА; | |||||||
end case; | |||||||
end record; |
ПИШУЩЕЕ_УСТРОЙСТВО: ПЕРИФЕРИЙНЫЙ (МОДУЛЬ => | ||||||||
ПЕЧАТАЮЩЕЕ_УСТРОЙСТВО); | ||||||||
АРХИВ: УСТРОЙСТВО_ДИСКА; |
неполное_описание_типа : : = | ||||
type идентификатор [раздел_дискриминантов]; |
type ЯЧЕЙКА; - - неполное описание типа | ||||||
type СВЯЗЬ is access | ЯЧЕЙКА; | |||||
type ЯЧЕЙКА is | ||||||
record | ||||||
ЗНАЧЕНИЕ: INTEGER; СЛЕД: СВЯЗЬ; ПРЕД: СВЯЗЬ; | ||||||
end record; | ||||||
ГОЛОВА: СВЯЗЬ: = new ЯЧЕЙКА' (0, null, null); СЛЕДУЮЩИЙ: СВЯЗЬ: = ГОЛОВА. СЛЕД; |
type ПЕРСОНА (ПОЛ: РОД); - - неполное описание типа | ||||||
type АВТОМОБИЛЬ; | - - неполное описание типа | |||||
type ИМЯ_ПЕРСОНЫ is access ПЕРСОНА; type ИМЯ_АВТОМОБИЛЯ is access АВТОМОБИЛЬ; type АВТОМОБИЛЬ is | ||||||
record | ||||||
НОМЕР: INTEGER; ВЛАДЕЛЕЦ: ИМЯ_ПЕРСОНЫ; | ||||||
end record; | ||||||
type ПЕРСОНА (ПОЛ: РОД) is | ||||||
record | ||||||
ИМЯ: STRING (1..20) ; РОДИЛСЯ: ДАТА; ВОЗРАСТ: INTEGER range 0..130; МАШИНА: ИМЯ_АВТОМОБИЛЯ; case ПОЛ is when M = > ЖЕНА: ИМЯ_ПЕРСОНЫ (ПОЛ => Ж); when Ж = > МУЖ: ИМЯ_ПЕРСОНЫ (ПОЛ => M); | ||||||
end case; | ||||||
end record; МОЙ_АВТО, ВАШ_АВТО, СЛЕДУЮЩИЙ_АВТО: ИМЯ_АВТОМОБИЛЯ; - - неявно инициированы пустым значением |
раздел_описаний : : = {основной_элемент_описания} {дополнительный_элемент_описания} основной_элемент_описания : : = основное_описание спецификатор_представления спецификатор_использования дополнительный_элемент_описания : : = тело описание_подпрограммы описание_пакета | ||||
описание_задачи | описание_настройки | |||
спецификатор_использования конкретизация_настройки тело : : = соответствующее_тело след_тела соответствующее_тело : : = тело_подпрограммы тело_пакета тело_задачи |
имя : : = простое_имя | ||||
символьный_литерал | знак_операции | |||
индексируемый_компонент | отрезок | |||
именуемый_компонент | атрибут | |||
простое_имя : : = идентификатор префикс : : = имя вызов_функции |
ПИ | - - простое имя числа (см. 3.2.2) | |||
ПРЕДЕЛ | - - простое имя константы (см. 3.2.1) | |||
СЧЕТ | - - простое имя скалярной переменной (см. 3.2.1) | |||
ПУЛЬТ | - - простое имя массива (см. 3.6.1) | |||
МАТРИЦА | - - простое имя типа (см. 3.6) | |||
СЛУЧАЙНОЕ | - - простое имя функции (см. 6.1) | |||
ОШИБКА | - - простое имя исключения (см. 11.1) |
индексируемый компонент : : = | ||||
префикс (выражение {, выражение}) |
МОЕ_РАСПИСАНИЕ (СБ) | - - компонент одномерного массива (см. 3.6.1) | |||
СТРАНИЦА (10) | - - компонент одномерного массива (см. 3.6) | |||
ПУЛЬТ (М, К+1) | - - компонент двумерного массива (см. 3.6.1) | |||
СТРАНИЦА (10) (20) | - - компонент компонента (см. 3.6) | |||
ЗАПРОС (СРЕДА) | - - вход семейства входов (см. 9.5) | |||
СЛЕДУЮЩЕЕ_ОБРАМЛЕНИЕ (Л), (М, Н) - - компонент вызова функции (см. 6.1) |
ЗАВТРА.МЕСЯЦ - - компонент записи (см. 3.7) СЛЕДУЮЩИЙ_АВТО.ВЛАДЕЛЕЦ - - компонент записи (см. 3.8.1) СЛЕДУЮЩИЙ_АВТО.ВЛАДЕЛЕЦ.ВОЗРАСТ - - компонент записи (см. 3.8.1) ПИШУЩЕЕ_УСТРОЙСТВО.МОДУЛЬ - - компонент записи (дискриминант) (см. - - компонент записи (дискриминант) (см. 3.7.3) МИН_ЯЧЕЙКА (Н) .ЗНАЧЕНИЕ - - компонент записи результата | |||||||||
- - вызова функции (см. 6.1 и 3.8.1) | |||||||||
УПРАВЛЕНИЕ.ЗАХВАТИТЬ - - вход задачи УПРАВЛЕНИЕ (см. 9.1 и 9.2) ПУЛ (К) . ПИСАТЬ - - вход задачи ПУЛ (К) (см. 9.1 и 9.2) СЛЕДУЮЩИЙ_АВТО. all - - объект, указанный ссылочной перемен- | |||||||||
- - ной СЛЕДУЮЩИЙ_АВТО (см. 3.8.1) |
УПРАВЛЕНИЕ_ТАБЛИЦЕЙ. ВНЕСТИ - - процедура видимого раздела пакета (см. 7.5) УПРАВЛЕНИЕ_ПО_КЛЮЧУ. "td> | ||||||||
- - и обязательное приложение 3) |
3.14159_26536 | - - литерал вещественного типа | |||
1_345 | - - литерал целого типа | |||
ТРЕФЫ | - - литерал перечисления | |||
'А' | - - символьный литерал | |||
"НЕКОТОРЫЙ_ТЕКСТ" | - - строковый литерал |
агрегат : : = (сопоставление_компонентов | ||||
{ , сопоставление_компонентов } ) | ||||
сопоставление_компонентов : : = [выбор { выбор} = > ] выражение |
4.0 | - - литерал вещественного типа | |||
ПИ | - - именованное число | |||
(1..10 => 0) | - - агрегат индексируемого типа | |||
СУММА | - - переменная | |||
INTEGER'LAST | - - атрибут | |||
СИНУС (X) | - - вызов функции | |||
ЦВЕТ' (СИНИЙ) | - - квалифицированное выражение | |||
ВЕЩЕСТВ (М*К) | - - преобразование типа | |||
(СЧЕТ_СТРОЧЕК +10) | - - выражение в скобках |
ТОМ | - - первичное | |||
not ИСПОРЧЕН | - - множитель | |||
2 * СЧЕТ_СТРОЧЕК | - - слагаемое | |||
-4.0 | - - простое выражение | |||
-4.0 + А | - - простое выражение | |||
В ** 2-4.0 * А * С | - - простое выражение | |||
ПАРОЛЬ (1..3) = "АБВ" | - - отношение | |||
СЧЕТ in МАЛОЕ_ЦЕЛ | - - отношение | |||
СЧЕТ not in МАЛОЕ_ЦЕЛ | - - отношение | |||
ИНДЕКС = 0 or ЭЛЕМЕНТ_ГР | - - выражение | |||
(ХОЛОД and СОЛНЦЕ) or ТЕПЛО | - - выражение (скобки обязательны) | |||
А ** (В ** С) | - - выражение (скобки обязательны) |
not СОЛНЦЕ or ТЕПЛО | - - совпадает с (not СОЛНЦЕ) or ТЕПЛО | |||
Х > 4.0 and Y > 0.0 | - - совпадает с (X > 4.0) and (Y > 0.0) | |||
-4.0 * A ** 2 | - - совпадает с - (4.0 * (А ** 2)) | |||
abs (1 + A) + B | - - совпадает с (abs (1 + А)) + В | |||
Y ** (-3) | - - скобки необходимы | |||
А/В * С | - - совпадает с (А/В) * С | |||
А + (В + С) | - - вычисляется В + С, а затем к результату прибавляется А |
Знак операции | Операция | Тип операнда | Тип результата |
and | Конъюнкция | Любой логический тип | Тот же логический тип |
Массив логических компонентов | Тот же индексируемый тип | ||
or | Дизъюнкция | Любой логический тип | Тот же логический тип |
Массив логических компонентов | Тот же индексируемый тип | ||
xor | Исключающая дизъюнкция | Любой логический тип | Тот же логический тип |
Массив логических компонентов | Тот же индексируемый тип |
А | В | A and В | A or В | A xor В |
TRUE | TRUE | TRUE | TRUE | FALSE |
TRUE | FALSE | FALSE | TRUE | TRUE |
FALSE | TRUE | FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE | FALSE | FALSE |
Знак операции | Операция | Тип операнда | Тип результата |
= / = | Равенство и неравенство | Любой тип | BOOLEAN |
<= >= > < | Проверка упорядоченности | Любой скалярный тип | BOOLEAN |
Дискретный индексируемый тип | BOOLEAN |
Х + 0.1 | - - X должен иметь вещественный тип | |||
"А" & "БВГ" | - - катенация двух строковых литералов | |||
'А' & "БВГ" | - - катенация символьного и строкового литералов | |||
'А' & 'А' | - - катенация двух символьных литералов |
Знак операции | Операция | Тип операнда | Тип результата |
+ | Сохранение знака | Любой числовой тип | Тот же числовой тип |
- | Изменение знака | Любой числовой тип | Тот же числовой тип |
Знак операции | Операция | Тип операнда | Тип результата |
* | Умножение | Любой целый тип | Тот же целый тип |
Любой плавающий тип | Тот же плавающий тип | ||
/ | Целое деление | Любой целый тип | Тот же целый тип |
Деление плавающих | Любой плавающий тип | Тот же плавающий тип | |
mod | Вычет по модулю | Любой целый тип | Тот же целый тип |
rem | Остаток | Любой целый тип | Тот же целый тип |
Знак операции | Операция | Тип левого операнда | Тип правого операнда | Тип результата |
* | Умножение | Любой фиксированный тип | INTEGER | Тип левого операнда |
INTEGER | Любой фиксированный тип | Тип правого операнда | ||
/ | Деление | Любой фиксированный тип | INTEGER | Тип левого операнда |
Знак операции | Операция | Тип левого операнда | Тип правого операнда | Тип результата |
* | Умножение | Любой фиксированный тип | Любой фиксированный тип | универсальный_фиксированный тип |
/ | Деление | Любой фиксированный тип | Любой фиксированный тип | универсальный_фиксированный тип |
Выражение | Значение | Тип результата |
I * J | 2 | Тот же, что тип I и J, т.е. INTEGER |
K/J | 1 | Тот же, что тип K и J, т.е. INTEGER |
К mod J | 1 | Тот же, что тип K и J, т.е. INTEGER |
X/Y | 0,50 | Тот же, что тип Х и Y, т.е. ВЕЩЕСТВ |
F/2 | 0.05 | Тот же, что тип F, т.е. ДРОБЬ |
3 * F | 0.3 | Тот же, что тип F, т.е. ДРОБЬ |
F * G | 0.01 | универсальный_фиксированный требуется преобразование |
ДРОБЬ (F * G) | 0.01 | ДРОБЬ в результате преобразования |
ВЕЩЕСТВ (J) * Y | 4.0 | ВЕЩЕСТВ, как и тип обоих операндов после преобразования |
А | В | А/В | A rem B | A mod В | А | В | А/В | A rem В | A mod В |
10 | 5 | 2 | 0 | 0 | -10 | 5 | -2 | 0 | 0 |
11 | 5 | 2 | 1 | 1 | -11 | 5 | -2 | -1 | 4 |
12 | 5 | 2 | 2 | 2 | -12 | 5 | -2 | -2 | 3 |
13 | 5 | 2 | 3 | 3 | -13 | 5 | -2 | -3 | 2 |
14 | 5 | 2 | 4 | 4 | -14 | 5 | -2 | -4 | 1 |
10 | -5 | -2 | 0 | 0 | -10 | -5 | 2 | 0 | 0 |
11 | -5 | -2 | 1 | -4 | -11 | -5 | 2 | -1 | -1 |
12 | -5 | -2 | 2 | -3 | -12 | -5 | 2 | -2 | -2 |
13 | -5 | -2 | 3 | -2 | -13 | -5 | 2 | -3 | -3 |
14 | -5 | -2 | 4 | -1 | -14 | -5 | 2 | -4 | -4 |
Знак операции | Операция | Тип операнда | Тип результата |
abs | Абсолютное значение | Любой числовой тип | Тот же числовой тип |
not | Логическое отрицание | Любой логический тип | Тот же логический тип |
Одномерный массив с логическими компонентами | Тот же индексируемый тип |
Знак операции | Операция | Тип левого операнда | Тип правого операнда | Тип результата |
* * | Возведение в степень | Любой целый тип | INTEGER | Тип левого операнда |
Любой плавающий тип | INTEGER | Тип левого операнда |
квалифицированное_выражение : : = | ||||
обозначение_типа' (выражение) обозначение_типа агрегат |
генератор : : = new указание_подтипа | ||||
new квалифицированное_выражение |
new ЯЧЕЙКА' (0, null, null) | - - явная инициализация | |||
new ЯЧЕЙКА' (ЗНАЧЕНИЕ => 0, СЛЕД => null, ПРЕД => null) | ||||
- - явная инициализация | ||||
new ЯЧЕЙКА | - - нет инициализации | |||
new МАТРИЦА' (1..10, 1..20) | - - даны только границы | |||
new МАТРИЦА' (1..10 => (1..20 => 0.01)) | - - явная инициализация | |||
new БУФЕР (100) | - - дан только дискриминант | |||
new БУФЕР' (РАЗМЕР => 80, ПОЗ => 0, ЗНАЧЕНИЕ => (1..80 => 'А')) | ||||
- - явная инициализация |
Знак операции | Операция | Тип левого операнда | Тип правого операнда | Тип результата |
* | Умножение | Универсальный_вещественный | Универсальный_целый | Универсальный_вещественный |
Универсальный_целый | Универсальный_вещественный | Универсальный_вещественный | ||
/ | Деление | Универсальный_вещественный | Универсальный_целый | Универсальный_вещественный |
последовательность_операторов : : = оператор {оператор} оператор : : = {метка} простой_оператор {метка} составной_оператор простой_оператор : : = пустой_оператор | |||||
оператор_присваивания | оператор_вызова_процедуры | ||||
оператор_выхода | оператор_возврата | ||||
оператор_перехода | оператор_вызова_входа | ||||
оператор_задержки | оператор_прекращения | ||||
оператор_возбуждения | оператор_кода | ||||
составной_оператор : : = | |||||
условный_оператор | оператор_выбора | ||||
оператор-цикла | оператор_блока | ||||
оператор_принятия | оператор_отбора | ||||
метка : : = > пустой_оператор : : = null; |
ЗНАЧЕНИЕ : = МАКС_ЗНАЧЕНИЕ -1; ОТТЕНОК : = ГОЛУБОЙ; СЛЕДУЮЩЕЕ_ОБРАМЛЕНИЕ (F) (M, N) : = 2.5 - - см. 4.1.1 | |||||||
А: = СКАЛ_ПРОИЗВЕДЕНИЕ (В, С); | - - см. 6.5 | ||||||
ПИШУЩЕЕ_УСТРОЙСТВО : = (СОСТОЯНИЕ => ОТКРЫТО, УСТРОЙСТВО => | |||||||
ПЕЧАТЬ, КОЛ_СТРОЧЕК => 60); - - см. 3.7.3 | |||||||
СЛЕДУЮЩИЙ_АВТО. all : = (72074, null); - - см. 3.8.1 |
I, J: INTEGER range 1..10; К: INTEGER range 1. . 20; I: = J; - - одинаковые диапазоны К: = J; - - совместимые диапазоны J: = К; - - при К > 10 возбудится исключение CONSTRAINT_ERROR |
условный оператор : : = | |||||
if условие then | |||||
последовательность_операторов | |||||
{elsif условие then | |||||
последовательность_операторов} | |||||
[else | |||||
последовательность_операторов] | |||||
end if; | |||||
условие : : = логическое_выражение |
if МЕСЯЦ = ДЕКАБРЬ and ДЕНЬ = 31 then | ||||
МЕСЯЦ := ЯНВАРЬ; ДЕНЬ : = 1; ГОД: = ГОД + 1; | ||||
end if; if СТРОЧКА_СЛИШКОМ_КОРОТКА then | ||||
raise LAYOUT_ERROR; | ||||
elsif СТРОЧКА_ЗАПОЛНЕНА then | ||||
NEW_LINE; PUT (ЭЛЕМЕНТ); | ||||
else PUT (ЭЛЕМЕНТ); end if; if МОЙ_АВТО.ВЛАДЕЛЕЦ.МАШИНА/ = МОЙ_АВТО then | ||||
СООБЩЕНИЕ ("НЕПРАВИЛЬНЫЕ ДАННЫЕ"); - - см. 3.8 | ||||
end if; |
оператор_выбора : : = | |||||
case выражение is | |||||
альтернатива_оператора_выбора {альтернатива_оператора_выбора} | |||||
end case; | |||||
альтернатива_оператора_выбора : : = | |||||
when выбор {выбор} => | |||||
последовательность_операторов |
case СЕНСОР is | ||||
when ВЫСОТА => ЗАПИСАТЬ_ВЫСОТУ (ПОКАЗАНИЕ_СЕНСОРА); when АЗИМУТ => ЗАПИСАТЬ_АЗИМУТ (ПОКАЗАНИЕ_СЕНСОРА); when РАССТОЯНИЕ => ЗАПИСАТЬ_РАССТОЯНИЕ (ПОКАЗАНИЕ_СЕНСОРА); when others => null; | ||||
end case; case СЕГОДНЯ is | ||||
when ПНД => ПОДСЧИТАТЬ_ИСХОДНЫЙ_БАЛАНС; when ПТН => ПОДСЧИТАТЬ_ИТОГОВЫЙ_БАЛАНС; when ВТР..ЧТВ => ВЫДАТЬ_ОТЧЕТ (СЕГОДНЯ); when СББ..ВСК => null; | ||||
end case; case ДВ_ЧИСЛО (СЧЕТЧИК) is | ||||
when 1 => ЗАМЕНИТЬ_ДВ (1); when 2 => ЗАМЕНИТЬ_ДВ (2); when 3 4 => ОБНУЛИТЬ_ДВ (1); ОБНУЛИТЬ_ДВ (1); when others => raise ОШИБКА; | ||||
end case; |
оператор_цикла : : = | ||||||
[простое_имя_цикла:] | ||||||
[схема_итерации] loop | ||||||
последовательность_операторов | ||||||
end loop [простое_имя_цикла]; | ||||||
схема_итерации : : = while условие | ||||||
for спецификация_параметра_цикла | ||||||
спецификация_параметра_цикла : : = | ||||||
идентификатор in [reverse] дискретный_диапазон |
loop | ||||
GET (ТЕКУЩИЙ_СИМВОЛ); exit when ТЕКУЩИЙ_СИМВОЛ = '*'; | ||||
end loop; |
while ЗАЯВКА (К). ЦЕНА < ПРЕДЕЛ. ЦЕНА loop | ||||
ЗАПИСАТЬ_ЗАЯВКУ (ЗАЯВКА (К). ЦЕНА); К: = К + 1; | ||||
end loop; |
for J in БУФЕР' RANGE loop - - правильно даже для пустого диапазона | |||||
if БУФЕР (J) / = ПРОБЕЛ then | |||||
PUT (БУФЕР (J)); | |||||
end if; | |||||
end loop; |
СУММИРОВАНИЕ: while СЛЕДУЮЩИЙ/ = ГОЛОВА loop - - см. 3.8.1 | ||||
СУМ: = СУМ + СЛЕДУЮЩИЙ. ЗНАЧЕНИЕ; СЛЕДУЮЩИЙ : = СЛЕДУЮЩИЙ. СЛЕД; | ||||
end loop СУММИРОВАНИЕ; |
оператор_блока : : = | ||||||
[простое_имя_блока :] | ||||||
[declare | ||||||
раздел_описаний] | ||||||
begin | ||||||
последовательность_операторов | ||||||
[exception | ||||||
обработчик_исключения {обработчик_исключения}] | ||||||
end [простое_имя_блока]; |
ОБМЕН: | |||||
declare | |||||
РАБОЧАЯ_ЯЧЕЙКА: INTEGER; | |||||
begin | |||||
РАБОЧАЯ_ЯЧЕЙКА: = А; А: = В; В: = РАБОЧАЯ_ЯЧЕЙКА; | |||||
end ОБМЕН; |
for К in 1..МАКС_КОЛ_ЭЛЕМЕНТОВ loop | |||||
ВВЕСТИ_НОВЫЙ_ЭЛЕМЕНТ (НОВЫЙ_ЭЛЕМЕНТ); ПРИСОЕДИНИТЬ_ЭЛЕМЕНТ (НОВЫЙ_ЭЛЕМЕНТ, ФАЙЛ_ПАМЯТИ); exit when НОВЫЙ_ЭЛЕМЕНТ = ЗАКЛЮЧИТЕЛЬНЫЙ_ЭЛЕМЕНТ; | |||||
end loop; ГЛАВНЫЙ_ЦИКЛ: loop; | |||||
- - начальные операторы exit ГЛАВНЫЙ_ЦИКЛ when НАЙДЕНО; | |||||
- - заключительные операторы | |||||
end loop ГЛАВНЫЙ_ЦИКЛ: |
return; | - - в процедуре | |||
return ЗНАЧЕНИЕ_КЛЮЧА (ПОСЛЕДНИЙ_ИНДЕКС); | - - в функции |
> if A (I) < ЭЛЕМЕНТ then | |||||
if ЛЕВЫЙ (I) / = 0 then | |||||
I:= ЛЕВЫЙ (I); goto СРАВНИТЬ; | |||||
end if; - - некоторые операторы | |||||
end if; |
описание_подпрограммы : : = спецификация_подпрограммы; спецификация_подпрограммы : : = | |||||
procedure идентификатор [раздел_формальных_параметров] function обозначение [раздел_формальных_параметров] | |||||
return обозначение_типа | |||||
обозначение : : = идентификатор знак_операции знак_операции : : = строковый_литерал раздел_формальных_параметров : : = | |||||
(спецификация_параметра { ; спецификация_параметра}) | |||||
спецификация_параметра : : = | |||||
список_идентификаторов : вид обозначение_типа [: = выражение] | |||||
вид : : = [in] in out out |
procedure ОБХОД_ДЕРЕВА; procedure УВЕЛИЧЕНИЕ (X: in out INTEGER); procedure ПРАВЫЙ_АБЗАЦ (ПРЕДЕЛЫ: out РАЗМЕР_СТРОЧКИ); - - см. 3.5.4 procedure ПЕРЕКЛЮЧАТЕЛЬ (ИЗ, В: in out СВЯЗЬ); - - см. 3.8.1 function СЛУЧАЙНАЯ_ВЕЛИЧИНА return ВЕРОЯТНОСТЬ; - - см. 3.5.7 function МИН_ЯЧЕЙКА (X: СВЯЗЬ) return ЯЧЕЙКА; - - 3.8.1 function СЛЕДУЮЩЕЕ_ОБРАМЛЕНИЕ (К: POSITIVE) return ОБРАМЛЕНИЕ; | |||||||
- - см. 3.8 | |||||||
function СКАЛ_ПРОИЗВЕДЕНИЕ (ЛЕВЫЙ, ПРАВЫЙ: ВЕКТОР) return ВЕЩЕСТВ; | |||||||
- - см. 3.6 | |||||||
function "*" (ЛЕВЫЙ, ПРАВЫЙ: МАТРИЦА) return МАТРИЦА; - - см. 3.6 |
procedure ПЕЧАТЬ_ЗАГОЛОВКА (СТРАНИЦЫ: in NATURAL; | |||||
ЗАГОЛОВОК: in СТРОЧКА: = (1..СТРОЧКА' LAST =>" ); ЦЕНТР: in BOOLEAN: = TRUE); - - см. 3.6 |
Вид | Пояснение |
in | Формальный параметр - константа, разрешается только чтение значения соответствующего фактического параметра |
in out | Формальный параметр - переменная, разрешается как чтение, так и изменение значения соответствующего фактического параметра |
out | Формальный параметр - переменная, разрешается изменение значения соответствующего фактического параметра. Значение скалярного параметра, которое не изменяется при вызове, после возврата не определено; то же самое имеет место для значения скалярного подкомпонента, отличного от дискриминанта. Допускается чтение границ и дискриминантов формального параметра и его подкомпонентов; никакое другое чтение не допускается |
тело_подпрограммы : : = | |||||
спецификация_подпрограммы is | |||||
[раздел_описаний] | |||||
begin | |||||
последовательность_операторов | |||||
[exception | |||||
обработчик_исключения {обработчик_исключения}] | |||||
end [обозначение] ; |
procedure ПРОТАЛКИВАНИЕ (Е: in ТИП_ЭЛЕМЕНТА; С: in out СТЕК) is begin | |||||
if С.ИНДЕКС = C.PA3MEP then | |||||
raise ПЕРЕПОЛНЕНИЕ_СЕТКА; | |||||
else | |||||
С.ИНДЕКС: = С.ИНДЕКС + 1; С.МЕСТО (С.ИНДЕКС): = Е; | |||||
end if; | |||||
end ПРОТАЛКИВАНИЕ; |
оператор_вызова_процедуры : : = имя_процедуры | ||||
[раздел_фактических_параметров]; | ||||
вызов_функции : : = имя_функции [раздел_фактических_параметров] раздел_фактических_параметров : : = | ||||
(сопоставление_параметров {, сопоставление_параметров}) | ||||
сопоставление_параметров : : = | ||||
[формальный_параметр =>] фактический_параметр | ||||
формальный_параметр : : = простое_имя_параметра фактический_параметр : : = выражение имя_переменной | ||||
обозначение_типа (имя_переменной) |
ОБХОД_ДЕРЕВА; - см. 6.1 УПРАВЛЕНИЕ_ТАБЛИЦЕЙ.ВСТАВКА (Е); - - см. 7.5 ПЕЧАТЬ_ЗАГОЛОВКА (128, ТИТУЛ, TRUE); - - см. 6.1 ПЕРЕКЛЮЧАТЕЛЬ (ИЗ => X, В => СЛЕДУЮЩИЙ; - - см. 6.1 ПЕЧАТЬ_ЗАГОЛОВКА (128, ЗАГОЛОВОК => ТИТУЛ, ЦЕНТР => TRUE); | |||||
- - см. 6.1 | |||||
ПЕЧАТЬ_ЗАГОЛОВКА (ЗАГОЛОВОК => ТИТУЛ, ЦЕНТР => TRUE, | |||||
СТРАНИЦЫ => 128); - - см. 6.1 |
procedure АКТИВИЗИРОВАТЬ (ПРОЦЕСС: in ИМЯ_ПРОЦЕССА; | |||||
ПОСЛЕ: in ИМЯ_ПРОЦЕССА: = НЕТ_ПРОЦЕССА; ЖДАТЬ: in DURATION: = 0.0; ПРИОР: in BOOLEAN: = FALSE); | |||||
procedure ПАРА (ЛЕВЫЙ, ПРАВЫЙ: ИМЯ_ПЕРСОНЫ: = new ПЕРСОНА); |
function СКАЛ_ПРОИЗВЕДЕНИЕ (ЛЕВЫЙ, ПРАВЫЙ: ВЕКТОР) | |||||||
return ВЕЩЕСТВ is СУММА: ВЕЩЕСТВ: =0.0; | |||||||
begin ПРОВЕРКА (ЛЕВЫЙ' FIRST = ПРАВЫЙ' FIRST and ЛЕВЫЙ' LAST = | |||||||
= ПРАВЫЙ'LAST); | |||||||
for К in ЛЕВЫЙ'RANGE loop | |||||||
СУММА: = СУММА + ЛЕВЫЙ (К) * ПРАВЫЙ (К); | |||||||
end loop; return СУММА; | |||||||
end СКАЛ_ПРОИЗВЕДЕНИЕ; |
function "+" (ЛЕВЫЙ, ПРАВЫЙ: МАТРИЦА) return МАТРИЦА; function "+" (ЛЕВЫЙ, ПРАВЫЙ: ВЕКТОР) return ВЕКТОР; | ||||
- - в предположении, что А, В и С типа ВЕКТОР, - - три следующих присваивания эквивалентны | ||||
А: = В+С; А:= "+" (В, С); А: = "+" (ЛЕВЫЙ => В, ПРАВЫЙ=> С); |
описание_пакета : : = спецификация_пакета; спецификация_пакета : : = | |||||
package идентификатор is | |||||
{основной_элемент_описания} | |||||
[private | |||||
{основной_элемент_описания }] | |||||
end [простое_имя_пакета] | |||||
тело_пакета : : = | |||||
package body простое_имя_пакета is | |||||
[раздел_описаний] | |||||
[begin | |||||
последовательность_операторов | |||||
[exception | |||||
обработчик_исключения {[обработчик_исключения}] ] | |||||
end [простое_имя_пакета]; |
package ГРАФИЧЕСКИЕ_ДАННЫЕ is | ||||
ПЕРО_В: BOOLEAN; КОЭФФИЦИЕНТ_ПЕРЕСЧЕТА, Х_СМЕЩЕНИЕ, Y_СМЕЩЕНИЕ, Х_МИН, Y_МИН, Х_МАКС, Y_MAKC: ВЕЩЕСТВ; - - см. 3.5.7 Х_ЗНАЧЕНИЕ: array (1..500) of ВЕЩЕСТВ; Y_ЗНАЧЕНИЕ: array (1..500) of ВЕЩЕСТВ; | ||||
end ГРАФИЧЕСКИЕ_ДАННЫЕ; |
package РАБОЧИЕ_ДНИ is | |||||
type ДЕНЬ is (ПНД, ВТР, СРД, ЧТВ, ПТН, СБТ, ВСК); type РАБОЧИЕ_ЧАСЫ is delta 0.25 range 0.0..24.0; type ТАБЕЛЬ_ВРЕМЕНИ is array (ДЕНЬ) of | |||||
РАБОЧИЕ_ЧАСЫ; | |||||
ЧАСЫ_РАБОТЫ: ТАБЕЛЬ_ВРЕМЕНИ; ОБЫЧНЫЕ_ЧАСЫ: constant ТАБЕЛЬ_ВРЕМЕНИ : = | |||||
(ПНД..ЧТВ => 8.25, ПТН => 7.0, СБТ ВСК => 0.0); | |||||
end РАБОЧИЕ_ДНИ; |
package РАЦИОНАЛЬНЫЕ_ЧИСЛА is | ||||||
type РАЦИОНАЛЬНЫЙ is | ||||||
record | ||||||
ЧИСЛИТЕЛЬ: INTEGER; ЗНАМЕНАТЕЛЬ: POSITIVE; | ||||||
end record; | ||||||
function РАВНО (X, Y: РАЦИОНАЛЬНЫЙ) return BOOLEAN; function "/" (X, Y: INTEGER) return РАЦИОНАЛЬНЫЙ; | ||||||
- - для образования рационального числа | ||||||
function "+" (X, Y: РАЦИОНАЛЬНЫЙ) return РАЦИОНАЛЬНЫЙ; function "-" (X, Y: РАЦИОНАЛЬНЫЙ) return РАЦИОНАЛЬНЫЙ; function "*" (X, Y: РАЦИОНАЛЬНЫЙ) return РАЦИОНАЛЬНЫЙ; function "/" (X, Y: РАЦИОНАЛЬНЫЙ) return РАЦИОНАЛЬНЫЙ; | ||||||
end; package body РАЦИОНАЛЬНЫЕ_ЧИСЛА is | ||||||
procedure ОБЩИЙ_ЗНАМЕНАТЕЛЬ (X, Y: in out РАЦИОНАЛЬНЫЙ) is begin - - приведение Х и Y к общему знаменателю: … end; function РАВНО (X, Y: РАЦИОНАЛЬНЫЙ) return BOOLEAN is | ||||||
А, В: РАЦИОНАЛЬНЫЙ; | ||||||
begin | ||||||
A: = X; B: = Y; ОБЩИЙ_ЗНАМЕНАТЕЛЬ (А, В); return А. ЧИСЛИТЕЛЬ = В.ЧИСЛИТЕЛЬ; | ||||||
end РАВНО; function "/" (X, Y: INTEGER) return РАЦИОНАЛЬНЫЙ is begin | ||||||
if Y > 0 then | ||||||
return (ЧИСЛИТЕЛЬ => X, ЗНАМЕНАТЕЛЬ => Y); | ||||||
else | ||||||
return (ЧИСЛИТЕЛЬ => -X, ЗНАМЕНАТЕЛЬ => -Y); | ||||||
end if; | ||||||
end "/"; function "+" (X, Y: РАЦИОНАЛЬНЫЙ) return РАЦИОНАЛЬНЫЙ is...end "+"; function "-" (X, Y: РАЦИОНАЛЬНЫЙ) return РАЦИОНАЛЬНЫЙ is...end "-"; function "*" (X, Y: РАЦИОНАЛЬНЫЙ) return РАЦИОНАЛЬНЫЙ is...end "*"; function "/" (X, Y: РАЦИОНАЛЬНЫЙ) return РАЦИОНАЛЬНЫЙ is...end "/"; end РАЦИОНАЛЬНЫЕ_ЧИСЛА; |
описание_личного_типа : : = | ||||
type идентификатор [раздел_дискриминантов] is [limited] private; | ||||
описание_субконстанты : : = | ||||
список_идентификаторов : constant обозначение_типа; |
package УПРАВЛЕНИЕ_ПО_КЛЮЧУ is | |||||
type КЛЮЧ is private; НУЛЕВОЙ_КЛЮЧ: constant КЛЮЧ; procedure УСТАНОВИТЬ_КЛЮЧ (К: out КЛЮЧ); function "td> | |||||
private | |||||
type КЛЮЧ is new NATURAL; НУЛЕВОЙ_КЛЮЧ: constant КЛЮЧ: = 0; | |||||
end; package body УПРАВЛЕНИЕ_ПО_КЛЮЧУ is | |||||
ПОСЛЕДНИЙ_КЛЮЧ: КЛЮЧ: = 0; procedure УСТАНОВИТЬ_КЛЮЧ (К: out КЛЮЧ) is begin | |||||
ПОСЛЕДНИЙ_КЛЮЧ: = ПОСЛЕДНИЙ_КЛЮЧ + 1; К: = ПОСЛЕДНИЙ _КЛЮЧ; | |||||
end УСТАНОВИТЬ_КЛЮЧ; function "td> | |||||
return INTEGER (X) < INTEGER (Y); | |||||
end "td> | |||||
end УПРАВЛЕНИЕ_ПО_КЛЮЧУ; |
package ПАКЕТ_ВВОДА_ВЫВОДА is | |||||
type ИМЯ_ФАЙЛА is limited private; procedure ОТКРЫТЬ (F: in out ИМЯ_ФАЙЛА); procedure ЗАКРЫТЬ (F: in out ИМЯ_ФАЙЛА); procedure ЧИТАТЬ (F: in ИМЯ_ФАЙЛА; ЭЛЕМЕНТ: out INTEGER); procedure ПИСАТЬ (F: in ИМЯ_ФАЙЛА; ЭЛЕМЕНТ: in INTEGER); | |||||
private | |||||
type ИМЯ_ФАЙЛА is | |||||
record ВНУТРЕННЕЕ_ИМЯ: INTEGER: =0; end record; | |||||
end ПАКЕТ_ВВОДА_ВЫВОДА; package body ПАКЕТ_ВВОДА_ВЫВОДА is | |||||
ПРЕДЕЛ: constant: = 200; type ДЕСКРИПТОР_ФАЙЛА is record ... end record; СПРАВОЧНИК: array (1..ПРЕДЕЛ) of ДЕСКРИПТОР_ФАЙЛА; … procedure ОТКРЫТЬ (F: in out ИМЯ_ФАЙЛА) is ... end; procedure ЗАКРЫТЬ (F: in out ИМЯ_ФАЙЛА) is ... end; procedure ЧИТАТЬ (F: in ИМЯ_ФАЙЛА; ЭЛЕМЕНТ: out INTEGER) is ... end; procedure ПИСАТЬ (F; in ИМЯ_ФАЙЛА; ЭЛЕМЕНТ: in INTEGER) is ... end; | |||||
begin | |||||
… | |||||
end ПАКЕТ_ВВОДА_ВЫВОДА; |
package УПРАВЛЕНИЕ_ТАБЛИЦЕЙ is | ||||||
type ЭЛЕМЕНТ is | ||||||
record | ||||||
ПОРЯДКОВЫЙ_НОМЕР: INTEGER; КОД_ЭЛЕМЕНТА: INTEGER; КОЛИЧЕСТВО: INTEGER; ТИП_ЭЛЕМЕНТА: CHARACTER; | ||||||
end record; | ||||||
НУЛЕВОЙ_ЭЛЕМЕНТ: constant ЭЛЕМЕНТ: = | ||||||
(ПОРЯДКОВЫЙ_НОМЕР КОД_ЭЛЕМЕНТА КОЛИЧЕСТВО => 0, ТИП_ЭЛЕМЕНТА => "); | ||||||
procedure ВНЕСТИ (НОВЫЙ_ЭЛЕМЕНТ: in ЭЛЕМЕНТ); procedure ВЫБРАТЬ (ПЕРВЫЙ_ЭЛЕМЕНТ: out ЭЛЕМЕНТ); ТАБЛИЦА_ПЕРЕПОЛНЕНА: exception; - - это исключение возбуждается в процедуре ВНЕСТИ, если таблица заполнена | ||||||
end; |
package body УПРАВЛЕНИЕ_ТАБЛИЦЕЙ is | |||||
РАЗМЕР: constant: = 2000; subtype ИНДЕКС is INTEGER range 0..РАЗМЕР; type ВНУТРЕННИЙ_ЭЛЕМЕНТ is record | |||||
СОДЕРЖИМОЕ: ЭЛЕМЕНТ; ПОСЛЕДУЮЩИЙ; ИНДЕКС; ПРЕДЫДУЩИЙ: ИНДЕКС; | |||||
end record; | |||||
ТАБЛИЦА: array (ИНДЕКС) of ВНУТРЕННИЙ_ЭЛЕМЕНТ; ПЕРВЫЙ_ЗАНЯТЫЙ_ЭЛЕМЕНТ: ИНДЕКС: = 0; ПЕРВЫЙ_СВОБОДНЫЙ_ЭЛЕМЕНТ: ИНДЕКС: = 1; function СПИСОК_СВОБОДНЫХ_ЭЛЕМЕНТОВ_ПУСТ return BOOLEAN is...end; function СПИСОК_ЗАНЯТЫХ_ЭЛЕМЕНТОВ_ПУСТ return BOOLEAN is...end; procedure ИЗМЕНИТЬ (ИЗ: in ИНДЕКС; К: in ИНДЕКС) is ... end; procedure ВНЕСТИ (НОВЫЙ_ЭЛЕМЕНТ: in ЭЛЕМЕНТ) is begin | |||||
if СПИСОК_СВОБОДНЫХ_ЭЛЕМЕНТОВ_ПУСТ then | |||||
raise ТАБЛИЦА_ПЕРЕПОЛНЕНА; | |||||
end if; - - остальная часть кода подпрограммы ВНЕСТИ | |||||
end ВНЕСТИ; procedure ВЫБРАТЬ (ПЕРВЫЙ_ЭЛЕМЕНТ: out ЭЛЕМЕНТ) is ... end; begin | |||||
- - инициализация связей таблицы | |||||
end УПРАВЛЕНИЕ_ТАБЛИЦЕЙ; |
package ОБРАБОТКА_ТЕКСТА is | |||||||
МАКСИМУМ: constant: = НЕКОТОРОЕ_ЗНАЧЕНИЕ; - - это значение определено реализацией subtype ИНДЕКС is INTEGER range 0..МАКСИМУМ; type ТЕКСТ (МАКСИМАЛЬНАЯ_ДЛИНА: ИНДЕКС) is limited private; function ДЛИНА (Т: ТЕКСТ) return ИНДЕКС; function ЗНАЧЕНИЕ (Т: ТЕКСТ) return STRING; function ПУСТО (Т: ТЕКСТ) return BOOLEAN; function К_ТЕКСТУ (S: STRING; МАКС: ИНДЕКС) return ТЕКСТ; - - МАКС - максимальная длина function К_ТЕКСТУ (С: CHARACTER; МАКС: ИНДЕКС) return ТЕКСТ; function К_ТЕКСТУ (S: STRING) return ТЕКСТ; - - S'LENGTH - максимальная длина function К_ТЕКСТУ (С: CHARACTER) return ТЕКСТ; function "&" (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return ТЕКСТ; function "&" (СЛЕВА: ТЕКСТ; СПРАВА: STRING) return ТЕКСТ; function "&" (СЛЕВА: STRING; СПРАВА: ТЕКСТ) return ТЕКСТ; function "&" (СЛЕВА: ТЕКСТ; СПРАВА: CHARACTER) return ТЕКСТ; function "&" (СЛЕВА: CHARACTER; СПРАВА: ТЕКСТ) return ТЕКСТ; function "=" (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return BOOLEAN; function "" (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return BOOLEAN; function ">=" (СЛЕВА: ТЕКСТ; СПРАВА: ТЕКСТ) return BOOLEAN; procedure ПОМЕСТИТЬ (ОБЪЕКТ: in out ТЕКСТ; ЗНАЧЕНИЕ: in ТЕКСТ); procedure ПОМЕСТИТЬ (ОБЪЕКТ: in out ТЕКСТ; ЗНАЧЕНИЕ: in STRING); procedure ПОМЕСТИТЬ (ОБЪЕКТ: in out ТЕКСТ; ЗНАЧЕНИЕ: in CHARACTER); procedure СОЕДИНИТЬ (ЧАСТЬ: in ТЕКСТ; К: in out ТЕКСТ); procedure СОЕДИНИТЬ (ЧАСТЬ: in STRING; К: in out ТЕКСТ); procedure СОЕДИНИТЬ (ЧАСТЬ: in CHARACTER; K: in out ТЕКСТ); procedure ЗАМЕНИТЬ (ОБЪЕКТ: in out ТЕКСТ; НА: in ТЕКСТ; | |||||||
ПОЗИЦИЯ: in ИНДЕКС); | |||||||
procedure ЗАМЕНИТЬ (ОБЪЕКТ: in out ТЕКСТ; НА: in STRING; | |||||||
ПОЗИЦИЯ: in ИНДЕКС); | |||||||
procedure ЗАМЕНИТЬ (ОБЪЕКТ: in out ТЕКСТ; НА in CHARACTER*; | |||||||
ПОЗИЦИЯ: in ИНДЕКС); | |||||||
________________ * Шрифт соответствует оригиналу. - Примечание изготовителя базы данных. | |||||||
- - заменяет часть объекта с заданной позиции на данный - - текст, строку или символ function ВСТАВИТЬ (ФРАГМЕНТ: ТЕКСТ; В: ТЕКСТ) return ИНДЕКС; function ВСТАВИТЬ (ФРАГМЕНТ: STRING; В: ТЕКСТ) return ИНДЕКС; function ВСТАВИТЬ (ФРАГМЕНТ: CHARACTER; В: ТЕКСТ) return ИНДЕКС; - - возвращают значение 0, если фрагмент не помещается | |||||||
private | |||||||
type ТЕКСТ (МАКСИМАЛЬНАЯ_ДЛИНА: ИНДЕКС) is | |||||||
record | |||||||
ПОЗИЦИЯ: ИНДЕКС: = 0; ЗНАЧЕНИЕ: STRING (1.. МАКСИМАЛЬНАЯ_ДЛИНА); | |||||||
end record; | |||||||
end ОБРАБОТКА_ТЕКСТА; |
function РАСШИРЕННОЕ_ИМЯ_ФАЙЛА (ИМЯ: STRING) return STRING is | |||||||
use ОБРАБОТКА_ТЕКСТА; УСТРОЙСТВО_ПО_УМОЛЧАНИЮ: constant STRING: = "SY:"; ИМЯ_ФАЙЛА_ПО_УМОЛЧАНИЮ: constant STRING: = "RESULTS"; РАСШИРЕННОЕ_ПО_УМОЛЧАНИЮ: constant STRING: = "DAT"; МАКСИМАЛЬНАЯ_ДЛИНА_ИМЕНИ_ФАЙЛА: constant ИНДЕКС: = | |||||||
НЕКОТОРОЕ_ПОДХОДЯШЕЕ_ЗНАЧЕНИЕ; | |||||||
ИМЯ_ФАЙЛА: ТЕКСТ (МАКСИМАЛЬНАЯ _ДЛИНА_ИМЕНИ_ФАЙЛА); | |||||||
begin | |||||||
ПОМЕСТИТЬ (ИМЯ_ФАЙЛА, ИМЯ); if ПУСТО (ИМЯ_ФАЙЛА) then | |||||||
ПОМЕСТИТЬ (ИМЯ_ФАЙЛА, ИМЯ_ФАЙЛА_ПО_УМОЛЧАНИЮ): | |||||||
end if; if ВСТАВИТЬ (':', ИМЯ_ФАЙЛА) = 0 then | |||||||
ПОМЕСТИТЬ (ИМЯ_ФАЙЛА, УСТРОЙСТВО_ПО_УМОЛЧАНИЮ & | |||||||
ИМЯ_ФАЙЛА); | |||||||
end if; if ВСТАВИТЬ ('.', ИМЯ_ФАЙЛА) = 0 then | |||||||
СОЕДИНИТЬ (РАСШИРЕНИЕ_ПО_УМОЛЧАНИЮ, К => ИМЯ_ФАЙЛА); | |||||||
end if; return ЗНАЧЕНИЕ (ИМЯ_ФАЙЛА); | |||||||
end РАСШИРЕННОЕ_ИМЯ _ФАЙЛА; |
procedure P is | |||||
А, В: BOOLEAN; procedure Q is | |||||
С: BOOLEAN; В: BOOLEAN; - - внутренний омограф В | |||||
begin … | |||||
В: = А; - - означает Q.B: = Р.А; С: = Р.В; - - означает Q.C: = Р.В; | |||||
end; | |||||
begin | |||||
… | |||||
А: = В; - - означает Р.А: = Р.В; | |||||
end; |
К: INTEGER: = К * К; | - - неправильно | ||||||||
Т : Т; | - - неправильно | ||||||||
procedure Р (X:Р); | - - неправильно | ||||||||
procedure Q (X: ВЕЩЕСТВ : = Q); | - - неправильно | ||||||||
- - даже если существует функция с именем Q | |||||||||
procedure R (R: ВЕЩЕСТВ); - - внутреннее описание, правильное, хотя создает | |||||||||
- - путаницу |
use Р; use Р; use Р, Р; |
procedure R is | |||||||||
package ТРАФИК is | |||||||||
type ЦВЕТ is (КРАСНЫЙ, ЯНТАРНЫЙ, ЗЕЛЕНЫЙ); … | |||||||||
end ТРАФИК; package АКВАРЕЛИ is | |||||||||
type ЦВЕТ is (БЕЛЫЙ, КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, СИНИЙ, | |||||||||
КОРИЧНЕВЫЙ, ЧЕРНЫЙ); | |||||||||
.... | |||||||||
end АКВАРЕЛИ; use ТРАФИК; - - ЦВЕТ, КРАСНЫЙ, ЯНТАРНЫЙ и ЗЕЛЕНЫЙ непосредственно | |||||||||
- - видимы | |||||||||
use АКВАРЕЛИ; - - два омографа ЗЕЛЕНЫЙ непосредственно | |||||||||
- - видимы, но ЦВЕТ не является более | |||||||||
- - непосредственно видимым | |||||||||
subtype СВЕТ is ТРАФИК.ЦВЕТ; - - подтип использован - - для разрешения противоречия, связанного с именем типа ЦВЕТ; subtype ТЕНЬ is АКВАРЕЛИ.ЦВЕТ; СИГНАЛ: СВЕТ; КРАСКА : ТЕНЬ; | |||||||||
begin | |||||||||
СИГНАЛ: = ЗЕЛЕНЫЙ; - - из пакета ТРАФИК КРАСКА: = ЗЕЛЕНЫЙ; - - из пакета АКВАРЕЛИ | |||||||||
end P; |
package Д is | |||||
Т, А, В: BOOLEAN; | |||||
end Д; procedure P is | |||||
package E is | |||||
Б, С, В: INTEGER; | |||||
end E; procedure H is | |||||
Т, X: ВЕЩЕСТВ; use Д, E; | |||||
begin - - имя Т означает Н.Т, а не Д.Т - - имя А означает Д.А - - имя Б означает Е.Б - - имя С означает Е.С - - имя Х означает Н.Х - - имя В неправильно: должно быть использовано Д.В или E.В | |||||
… | |||||
end Н; | |||||
begin | |||||
… | |||||
end P; |
описание_переименования : : = идентификатор : обозначение_типа renames имя_объекта; идентификатор : exception renames имя_исключения; package идентификатор renames имя_пакета; спецификация_подпрограммы renames | ||||
имя_подпрограммы_или_входа; |
declare | ||||||||
П: ПЕРСОНА renames КРАЙНЯЯ_ПЕРСОНА; - - см. 3.8.1 | ||||||||
begin | ||||||||
П.ВОЗРАСТ: = П.ВОЗРАСТ + 1; | ||||||||
end; ПОЛНЫЙ: exception renames ТАБЛИЦА_УПРАВЛЕНИЯ. ТАБЛИЦА_ПОЛНОТЫ; - - см. 7.5 package ТУ renames ТАБЛИЦА_УПРАВЛЕНИЯ; function ВЕЩЕСТВ_ПЛЮС (ЛЕВЫЙ, ПРАВЫЙ: ВЕЩЕСТВ) return ВЕЩЕСТВ | ||||||||
renames "+"; | ||||||||
function ЦЕЛ_ПЛЮС (ЛЕВЫЙ, ПРАВЫЙ: INTEGER) return INTEGER renames "+"; function КРАСН_ФРАН return ЦВЕТ renames КРАСНЫЙ; - - см. 3.5.1 function KPAC_HEM return ЦВЕТ renames КРАСНЫЙ; function КРАСН_ИТАЛ return ЦВЕТ renames КРАСН_ФРАН; function СЛЕДУЮЩИЙ (Х: ЦВЕТ) return ЦВЕТ renames ЦВЕТ'SUCC; - - см. 3.5.5 |
function "*" (X, Y: ВЕКТОР) return ВЕЩЕСТВ renames СКАЛ_ПРОИЗВЕДЕНИЕ; - - см. 6.1 |
function МИНИМУМ (А: СВЯЗЬ: = ГОЛОВА) return ЯЧЕЙКА renames | |||||||
МИН_ЯЧЕЙКА; - - см. 6.1 |
описание_задачи : : = спецификация_задачи; спецификация_задачи : : = | |||||
task [type] идентификатор [is | |||||
{описание_входа} {спецификатор_представления} | |||||
end [простое_имя_задачи] ]; | |||||
тело_задачи : : = | |||||
task body простое_имя_задачи is | |||||
[раздел_описаний] | |||||
begin последовательность_операторов | |||||
[exception | |||||
обработчик_исключения {обработчик_исключения}] | |||||
end [простое_имя_задачи]; |
task type РЕСУРС is | ||||
entry ЗАХВАТИТЬ; entry ОСВОБОДИТЬ; | ||||
end РЕСУРС; task type ДРАЙВЕР_КЛАВИАТУРЫ is | ||||
entry ЧИТАТЬ (С: out CHARACTER); entry ПИСАТЬ (С: in CHARACTER); | ||||
end ДРАЙВЕР_КЛАВИАТУРЫ; |
task ПОСТАВЩИК_ПОТРЕБИТЕЛЬ is | ||||
entry ЧИТАТЬ (V: out ЭЛЕМЕНТ); entry ПИСАТЬ (Е: in ЭЛЕМЕНТ); | ||||
end; task КОНТРОЛЛЕР is | ||||
entry ЗАПРОСИТЬ (УРОВЕНЬ) (D: ЭЛЕМЕНТ); - - семейство входов | ||||
end КОНТРОЛЛЕР; task ПОЛЬЗОВАТЕЛЬ; - - не имеет входов |
task ЗАЩИЩЕННЫЙ_МАССИВ is - - ИНДЕКС и ЭЛЕМЕНТ - это глобальные типы | |||||||
entry ЧИТАТЬ (К: in ИНДЕКС; V: out ЭЛЕМЕНТ); entry ПИСАТЬ (К: in ИНДЕКС; Е; in ЭЛЕМЕНТ); | |||||||
end; task body ЗАЩИЩЕННЫЙ_МАССИВ is | |||||||
ТАБЛИЦА: array (ИНДЕКС) of ЭЛЕМЕНТ: = (ИНДЕКС => НУЛЬ_ЭЛЕМЕНТ); | |||||||
begin | |||||||
loop | |||||||
select | |||||||
accept ЧИТАТЬ (К: in ИНДЕКС; V: out ЭЛЕМЕНТ) do | |||||||
V: =ТАБЛИЦА (К); | |||||||
end ЧИТАТЬ; | |||||||
or | |||||||
accept ПИСАТЬ (К: in ИНДЕКС; Е: in ЭЛЕМЕНТ) do | |||||||
ТАБЛИЦА (К): = Е; | |||||||
end ПИСАТЬ; | |||||||
end select; | |||||||
end loop; | |||||||
end ЗАЩИЩЕННЫЙ_МАССИВ; |
procedure P is | ||||
А, В: РЕСУРС; - - предвыполняет задачные объекты А и В С: РЕСУРС; - - предвыполняет задачный объект С | ||||
begin | ||||
- - задачи А, В, С активизируются параллельно - - перед выполнением первого оператора | ||||
… end; |
declare | ||||||
type ГЛОБАЛЬНЫЙ is access РЕСУРС; - - см. 9.1 А, В: РЕСУРС; Г: ГЛОБАЛЬНЫЙ; | ||||||
begin | ||||||
- - активизация А и В declare | ||||||
type ЛОКАЛЬНЫЙ is access РЕСУРС; X: ГЛОБАЛЬНЫЙ: = new РЕСУРС; - - активизация X. аll Л: ЛОКАЛЬНЫЙ: = new РЕСУРС; - - активизация Л. аll С: РЕСУРС; | ||||||
begin | ||||||
- - активизация С Г: = X; - - Г и Х указывают один и тот же заданный объект … | ||||||
end; - - ожидание завершения С и Л. all, но не X. all | ||||||
… | ||||||
end; - - ожидание завершения А, В и Г. all |
описание_входа : : = | ||||||
entry идентификатор [ (дискретный диапазон) ] | ||||||
[раздел_формальных_параметров] | ||||||
оператор_вызова_входа : : = | ||||||
имя_входа [раздел_фактических_параметров]; | ||||||
оператор_принятия : : = | ||||||
accept простое_имя_входа [ (индекс_входа) ] | ||||||
[раздел_формальных_параметров] [do | ||||||
последовательность_операторов | ||||||
end [простое_имя_входа] ]; | ||||||
индекс_входа : : = выражение |
entry ЧИТАТЬ (В: out ЭЛЕМЕНТ); entry ЗАХВАТИТЬ; entry ЗАПРОС (УРОВЕНЬ) (Д: ЭЛЕМЕНТ); - - семейство входов |
УПРАВЛЕНИЕ. ОСВОБОДИТЬ; - - см. 9.2 и 9.1 ПОСТАВЩИК_ПОТРЕБИТЕЛЬ.ПИСАТЬ (Е); - - см. 9.1 ПУЛ (5) .ЧИТАТЬ (СЛЕДУЮЩИЙ_СИМВ); - - см. 9.1 и 9.2 КОНТРОЛЛЕР. ЗАХВАТИТЬ (НИЗКИЙ) (НЕКОТОРЫЙ_ЭЛЕМЕНТ); - - см. 9.1 |
accept ЗАХВАТИТЬ; accept ЧИТАТЬ (В: out ЭЛЕМЕНТ) do | |||||
В: = ЛОКАЛЬНЫЙ_ЭЛЕМЕНТ; | |||||
end ЧИТАТЬ; accept ЗАПРОС (НИЗКИЙ) (Д: ЭЛЕМЕНТ) do | |||||
… | |||||
end ЗАПРОС; |
package CALENDAR is | ||||||||||
type TIME is private; subtype YEAR_NUMBER is INTEGER range 1901..2099; subtype MONTH_NUMBER is INTEGER range 1..12; subtype DAY_NUMBER is INTEGER range 1..31; subtype DAY_DURATION is DURATION range 0.0..86400.0; function CLOCK return TIME; function YEAR (DATE:TIME) return YEAR_NUMBER; function MONTH (DATE:TIME) return MONTH_NUMBER; function DAY (DATE:TIME) return DAY_NUMBER; function SECONDS (DATE:TIME) return DAY_DURATION; procedure SPLIT (DATE: in TIME; | ||||||||||
YEAR: out YEAR_NUMBER; MONTH: out MONTH_NUMBER; DAY: out DAY_NUMBER; SECONDS: out DAY_DURATION); | ||||||||||
function TIME_OF (YEAR: YEAR_NUMBER; | ||||||||||
MONTH: MONTH_NUMBER; DAY:DAY_NUMBER; SECONDS: DAY_DURATION: = 0.0) return TIME; | ||||||||||
function "+" (LEFT: TIME; RIGHT: DURATION) return TIME; function "+" (LEFT: DURATION; RIGHT: TIME) return TIME; function "-" (LEFT: TIME; RIGHT: DURATION) return TIME; function "-" (LEFT: TIME; RIGHT:TIME) return DURATION; function "< " (LEFT, RIGHT: TIME) return BOOLEAN; function "<="(LEFT, RIGHT: TIME) return BOOLEAN; function ">" (LEFT, RIGHT: TIME) return BOOLEAN; function ">=" (LEFT, RIGHT: TIME) return BOOLEAN; TIME_ERROR: exception; - - может быть возбуждено функцией | ||||||||||
- - TIME_OF и операциями "+" и "-" | ||||||||||
private - - зависит от реализации | ||||||||||
end; |
delay 3.0; - - задержка на 3.0 с declare | |||||
use CALENDAR; - - ИНТЕРВАЛ - глобальная константа типа DURATION СЛЕДУЮЩЕЕ_ВРЕМЯ: TIME: = CLOCK + ИНТЕРВАЛ; | |||||
begin | |||||
loop | |||||
delay СЛЕДУЮЩЕЕ_ВРЕМЯ - CLOCK; - - некоторые действия СЛЕДУЮЩЕЕ_ВРЕМЯ: = СЛЕДУЮЩЕЕ_ВРЕМЯ + ИНТЕРВАЛ; | |||||
end loop; | |||||
end; |
оператор_отбора : : = отбор_с_ожиданием | ||||
условный_вызов_входа временной_вызов_входа |
отбор_с_ожиданием : : = | |||||
select | |||||
альтернатива_отбора | |||||
{or | |||||
альтернатива_отбора} | |||||
[else | |||||
последовательность_операторов ] | |||||
end select; | |||||
альтернатива_отбора : : = | |||||
[when условие =>] | |||||
альтернатива_отбора_с_ожиданием | |||||
альтернатива_отбора_с_ожиданием : : = альтернатива_принятия | |||||
альтернатива_задержки альтернатива_завершения | |||||
альтернатива_принятия : : = | |||||
оператор_принятия [последовательность_операторов] | |||||
альтернатива_задержки : : = | |||||
оператор_задержки [последовательность_операторов] | |||||
альтернатива_завершения : : = terminate; |
select | ||||
accept ВЫДАЧА_СИГНАЛА_МАШИНИСТУ; | ||||
or | ||||
delay 30.0 * СЕКУНД; ОСТАНОВИТЬ_СОСТАВ; | ||||
end select; |
task body РЕСУРС is | ||||||||
ЗАНЯТ: BOOLEAN: = FALSE; | ||||||||
begin | ||||||||
loop | ||||||||
select | ||||||||
when not ЗАНЯТ => | ||||||||
accept ЗАХВАТИТЬ do | ||||||||
ЗАНЯТ: =TRUE; | ||||||||
end; | ||||||||
or | ||||||||
accept ОСВОБОДИТЬ do | ||||||||
ЗАНЯТ: = FALSE; | ||||||||
end; | ||||||||
or | ||||||||
terminate; | ||||||||
end select; | ||||||||
end loop; | ||||||||
end РЕСУРС; |
условный_вызов_входа : : = | |||||
select | |||||
оператор_вызова_входа [последовательность_операторов] | |||||
else | |||||
последовательность_операторов | |||||
end select; |
procedure ОБОРОТ (Р: РЕСУРС) is begin | ||||||
loop | ||||||
select | ||||||
Р.ЗАХВАТИТЬ; return; | ||||||
else; | ||||||
null; - - занято, надо подождать | ||||||
end select; | ||||||
end loop; | ||||||
end; |
временной_вызов_входа : : = | |||||
select | |||||
оператор_вызова_входа [последовательность_операторов] | |||||
or | |||||
альтернатива_задержки | |||||
end select; |
select | ||||
КОНТРОЛЛЕР.ЗАХВАТИТЬ (СРЕДНИЙ) (НЕКОТОРЫЙ_ЭЛЕМЕНТ); | ||||
or | ||||
delay 45.0; - - контроллер слишком занят, попробуйте что-либо еще | ||||
end select; |
loop | ||||
- - выработка следующего символа СИМВ БУФЕР. ПИСАТЬ (СИМВ); exit when СИМВ = ASCII.EOT; | ||||
end loop; |
loop | ||||
БУФЕР. ЧИТАТЬ (СИМВ); - - использование символа СИМВ exit when СИМВ = ASCII.EOT; | ||||
end loop; |
task БУФЕР is | ||||||||
entry ЧИТАТЬ (С: out CHARACTER); entry ПИСАТЬ (С: in CHARACTER); | ||||||||
end task body БУФЕР is | ||||||||
РАЗМЕР_ПУЛА: constant INTEGER: = 100; ПУЛ: array (1.. РАЗМЕР_ПУЛА) of CHARACTER; СЧЕТЧИК: INTEGER range 0..РАЗМЕР_ПУЛА: = 0; ВХ_ИНДЕКС, ВЫХ_ИНДЕКС: INTEGER range 0..РАЗМЕР_ПУЛА: = 1; | ||||||||
begin | ||||||||
loop | ||||||||
select | ||||||||
when СЧЕТЧИК < РАЗМЕР_ПУЛА => | ||||||||
accept ПИСАТЬ (С: in CHARACTER) do | ||||||||
ПУЛ (ВХ_ИНДЕКС): = С; | ||||||||
end; ВХ_ИНДЕКС: = ВХ_ИНДЕКС mod РАЗМЕР_ПУЛА + 1; СЧЕТЧИК: = СЧЕТЧИК + 1; | ||||||||
or when СЧЕТЧИК > 0 => | ||||||||
accept ЧИТАТЬ (С: out CHARACTER) do | ||||||||
С: = ПУЛ (ВЫХ_ИНДЕКС); | ||||||||
end; ВЫХ_ИНДЕКС: = ВЫХ_ИНДЕКС mod РАЗМЕР_ПУЛА + 1; СЧЕТЧИК: = СЧЕТЧИК - 1; | ||||||||
or | ||||||||
terminate; | ||||||||
end select; | ||||||||
end loop; | ||||||||
end БУФЕР; |
компиляция : : = { компилируемый_модуль} компилируемый_модуль : : = | ||||
спецификатор_контекста библиотечный_модуль спецификатор_контекста вторичный_модуль | ||||
библиотечный_модуль : : = описание_подпрограммы | ||||
описание_пакета описание_настройки конкретизация_настройки тело_подпрограммы | ||||
вторичный_модуль : : = | ||||
тело_библиотечного_модуля субмодуль | ||||
тело_библиотечного_модуля : : = | ||||
тело_подпрограммы тело_пакета |
спецификатор_контекста : : = | ||||
{спецификатор_совместности {спецификатор_использования} } | ||||
спецификатор_совместности : : = | ||||
with простое_имя_модуля { простое_имя_модуля}; |
with ТЕХТ_IO, ВЕЩЕСТВ_ОПЕРАЦИИ; use ВЕЩЕСТВ_ОПЕРАЦИИ; procedure КВАДРАТНОЕ_УРАВНЕНИЕ is | |||||
А, В, С, Д: ВЕЩЕСТВ; use ВЕЩЕСТВ_ВВ - - обеспечивает прямую видимость GET и PUT для ВЕЩЕСТВ ТЕХТ_IO, - - обеспечивает прямую видимость NEW_LINE и PUT для строк ВЕЩЕСТВ_ФУНКЦИИ; - - обеспечивает прямую видимость функции SQRT | |||||
begin | |||||
GET (A); GET (В); GET (С); Д: = В ** 2 - 4.0 * А * С; if Д < 0.0 then PUT ("МНИМЫЕ КОРНИ"); else | |||||
PUT ("ВЕЩЕСТВЕННЫЕ КОРНИ: X1 ="); PUT( (-B -SQRT (Д) ) / (2.0 * А) ); PUT ("X2 ="); PUT ( (-В +SQRT(Д) ) / (2.0 * А) ); | |||||
end if; | |||||
NEW_LINE; | |||||
end КВАДРАТНОЕ_УРАВНЕНИЕ; |
procedure ПРОЦЕССОР is | |||||||
МАЛОЕ: constant: = 20; ИТОГ: INTEGER: = 0; package ФОНД is | |||||||
ПРЕДЕЛ: constant: = 1000; ТАБЛИЦА: array (1..ПРЕДЕЛ) of INTEGER; procedure ПЕРЕЗАПУСК; | |||||||
end ФОНД; package body ФОНД is | |||||||
procedure ПЕРЕЗАПУСК is begin | |||||||
for К in 1..ПРЕДЕЛ loop | |||||||
ТАБЛИЦА (К): = К; | |||||||
end loop, | |||||||
end; | |||||||
begin | |||||||
ПЕРЕЗАПУСК; | |||||||
end ФОНД; procedure ИЗМЕНЕНИЕ (X: INTEGER) is | |||||||
use ФОНД; - - некоторые описания | |||||||
begin | |||||||
… ТАБЛИЦА (X): = ТАБЛИЦА (X) + МАЛОЕ; … end ИЗМЕНЕНИЕ; | |||||||
begin … ФОНД.ПЕРЕЗАПУСК; - - переинициализация массива ТАБЛИЦА … | |||||||
end ПРОЦЕССОР; |
package ФОНД is | ||||
ПРЕДЕЛ: constant: = 1000; ТАБЛИЦА: array (1..ПРЕДЕЛ) of INTEGER; procedure ПЕРЕЗАПУСК; | ||||
end ФОНД; |
package body ФОНД is | ||||||
procedure ПЕРЕЗАПУСК is begin | ||||||
for К in 1..ПРЕДЕЛ loop | ||||||
ТАБЛИЦА (К): = К; | ||||||
end loop; | ||||||
end; | ||||||
begin | ||||||
ПЕРЕЗАПУСК; | ||||||
end ФОНД; |
with ФОНД; procedure ПРОЦЕССОР is | |||||
МАЛОЕ: constant: = 20; ИТОГ: INTEGER: = 0; procedure ИЗМЕНЕНИЕ (X: INTEGER) is | |||||
use ФОНД; | |||||
begin | |||||
... | |||||
ТАБЛИЦА (X) : = ТАБЛИЦА (X) + МАЛОЕ; … | |||||
end ИЗМЕНЕНИЕ; | |||||
begin | |||||
… ФОНД.ПЕРЕЗАПУСК; - - переинициализация ТАБЛИЦА … | |||||
end ПРОЦЕССОР; |
след_тела : : = | ||||
спецификация_подпрограммы is separate; package body простое_имя_пакета is separate; task body простое_имя_задачи is separate; | ||||
субмодуль : : = | ||||
separate (имя_родительского_модуля) соответствующее_тело |
with TEXT_IO; procedure ВЕРШИНА is type ВЕЩЕСТВ is digits 10; P,C: ВЕЩЕСТВ: =1.0; package СЕРВИС is | ||||
ПИ: constant: = 3.14159_26536; function F(X: ВЕЩЕСТВ) return ВЕЩЕСТВ; procedure G(Y, H: ВЕЩЕСТВ); | ||||
end СЕРВИС; package body СЕРВИС is | ||||
- - предшествуют некоторые локальные описания function F(X: ВЕЩЕСТВ) return ВЕЩЕСТВ is begin - - последовательность операторов функции F … end F; procedure G(Y, H: ВЕЩЕСТВ) is - - использующие пакет ТЕХТ_IO локальные процедуры … begin - - последовательность операторов процедуры G ... end G; | ||||
end СЕРВИС; procedure ПРЕОБРАЗОВАНИЕ (Ф: in out ВЕЩЕСТВ) is use СЕРВИС; begin Ф: = F (Ф); … end ПРЕОБРАЗОВАНИЕ; begin - - ВЕРШИНА | ||||
ПРЕОБРАЗОВАНИЕ (Р); … СЕРВИС.G (Р, С); | ||||
end ВЕРШИНА; |
procedure ВЕРШИНА is | |||||
type ВЕЩЕСТВ is digits 10; P, C: ВЕЩЕСТВ: = 1.0; package СЕРВИС is | |||||
ПИ: constant: = 3.14159_26536; function F (X: ВЕЩЕСТВ) return ВЕЩЕСТВ; procedure G(Y, H: ВЕЩЕСТВ); | |||||
end СЕРВИС; package body СЕРВИС is separate; - - след тела СЕРВИС procedure ПРЕОБРАЗОВАНИЕ (Ф: in out ВЕЩЕСТВ) is separate | |||||
begin - - ВЕРШИНА | |||||
ПРЕОБРАЗОВАНИЕ (Р); … СЕРВИС.G (Р, С); | |||||
end ВЕРШИНА; |
separate (ВЕРШИНА) procedure ПРЕОБРАЗОВАНИЕ (Ф: in out ВЕЩЕСТВ) is | ||||
use СЕРВИС; | ||||
begin | ||||
Ф: = F (Ф); … | ||||
end ПРЕОБРАЗОВАНИЕ; |
separate (ВЕРШИНА) package body СЕРВИС is | |||||
- - предшествуют некоторые локальные описания function F (X: ВЕЩЕСТВ) return ВЕЩЕСТВ is begin | |||||
- - последовательность операторов функции F … | |||||
end; procedure G(Y, H: ВЕЩЕСТВ) is separate; - - след тела G | |||||
end СЕРВИС; |
with TEXT_IO; separate (ВЕРШИНА, СЕРВИС) - - полное имя пакета СЕРВИС procedure G(Y, H: ВЕЩЕСТВ) is | ||||
- - использующие ТЕХТ_IO локальные процедуры … | ||||
begin | ||||
- - последовательность операторов процедуры G … | ||||
end G; |
pragma ELABORATE (простое_имя_библиотечного_модуля | |||||||
{, простое_имя_библиотечного_модуля}); |
обработчик_исключения : : = | |||||
when выбор_исключения { выбор_исключения} => | |||||
последовательность_операторов | |||||
выбор_исключения : : = имя_исключения others |
begin | ||||
последовательность_операторов | ||||
exception | ||||
обработчик_исключения {обработчик_исключения} | ||||
end |
begin | |||||
- - последовательность операторов | |||||
exception | |||||
when ВЫРОЖДЕННАЯ NUMERIC_ERROR => | |||||
PUT ("ВЫРОЖДЕННАЯ_МАТРИЦА"); | |||||
when others => | |||||
PUT ("НЕИСПРАВИМАЯ_ОШИБКА"); raise ОШИБКА; | |||||
end; |
function ФАКТОРИАЛ (N: POSITIVE) return FLOAT is begin | |||||
if N = 1 then | |||||
return 1.0; | |||||
else | |||||
return FLOAT (N) * ФАКТОРИАЛ (N-1); | |||||
end if; | |||||
exception | |||||
when NUMERIC_ERROR => return FLOAT'SAFE_LARGE; | |||||
end ФАКТОРИАЛ; |
procedure P is | |||||
ОШИБКА: exception; procedure R; procedure Q is begin | |||||
R; ... - - ошибочная ситуация 2 | |||||
exception | |||||
… when ОШИБКА => - - обработчик Е2 | |||||
end Q; procedure R is begin | |||||
... - - ошибочная ситуация 3 | |||||
end R; | |||||
begin | |||||
... - - ошибочная ситуация 1 Q; ... | |||||
exception | |||||
… when ОШИБКА => - - обработчик E1 | |||||
end P; |
procedure P is | |||||
… | |||||
begin | |||||
declare | |||||
N: INTEGER: = F; - - функция F может возбуждать исключение ОШИБКА | |||||
begin | |||||
… | |||||
exception | |||||
when ОШИБКА => - - обработчик E1 | |||||
end; … | |||||
exception | |||||
when ОШИБКА => - - обработчик Е2 | |||||
end P; | |||||
- - Если исключение ОШИБКА возбуждено в описании N, - - то оно обрабатывается обработчиком Е2. |
declare | |||||||||
N: INTEGER; | |||||||||
begin | |||||||||
N: = 0; | - - (1) | ||||||||
for J in 1..10 loop | |||||||||
N: = N + J ** A (К); | - - А и К являются | ||||||||
- - глобальными переменными | |||||||||
end loop; PUT(N); | |||||||||
exception | |||||||||
when others => PUT ("ОБНАРУЖЕННАЯ_ОШИБКА"); PUT(N); | |||||||||
end; |
описание_настройки : : = спецификация_настройки; спецификация_настройки : : = | ||||||
раздел_формальных_параметров_настройки | ||||||
спецификация_подпрограммы | ||||||
раздел_формальных_параметров_настройки | ||||||
спецификация_пакета | ||||||
раздел_формальных_параметров_настройки : : = | ||||||
generic {описание_параметра_настройки} | ||||||
описание_параметра_настройки : : = | ||||||
список_идентификаторов : | ||||||
[in [out] ] обозначение_типа [: = выражение]; | ||||||
type идентификатор is определение_настраиваемого_типа; описание_личного_типа with спецификация_подпрограммы [is имя]; with спецификация_подпрограммы [is >]; | ||||||
определение_настраиваемого_типа : : = | ||||||
(>) range >digits >delta > определение_индексируемого_типа определение_ссылочного_типа |
generic - - без параметров generic | ||||||||||
РАЗМЕР: NATURAL; - - формальный объект | ||||||||||
generic | ||||||||||
ДЛИНА: INTEGER: = 200; - - формальный объект с выражением по умолчанию ПЛОЩАДЬ: INTEGER: = ДЛИНА * ДЛИНА; | ||||||||||
- - формальный объект с выражением по умолчанию | ||||||||||
generic | ||||||||||
type ЭЛЕМЕНТ is private; - - формальный тип type ИНДЕКС is (>); - - формальный тип type РЯД is array (ИНДЕКС range >) of ЭЛЕМЕНТ; - - формальный тип with function "td> | ||||||||||
формальная подпрограмма |
generic | ||||
type ЭЛЕМ is private; | ||||
procedure ЗАМЕНА (А, В: in out ЭЛЕМ); generic | ||||
type ЭЛЕМЕНТ is private; with function "*" (А, В: ЭЛЕМЕНТ) return ЭЛЕМЕНТ is >; | ||||
function ВОЗВ_В_КВАДРАТ (X: ЭЛЕМЕНТ) return ЭЛЕМЕНТ; |
generic | ||||
type ЭЛЕМЕНТ is private; type ВЕКТОР is array (POSITIVE range >) of ЭЛЕМЕНТ; with function СУММА (X, Y: ЭЛЕМЕНТ) return ЭЛЕМЕНТ; | ||||
package НАД_ВЕКТОРАМИ is | ||||
function СУММА (А, В: ВЕКТОР) return ВЕКТОР; function СИГМА (А: ВЕКТОР) return ЭЛЕМЕНТ; ОШИБОЧНАЯ_ДЛИНА: exception; | ||||
end; |
generic | ||||
type РЯД is range >; ПЕРВЫЙ: РЯД: = РЯД'FIRST; ВТОРОЙ: РЯД: = ПЕРВЫЙ + 1; - - операция "+" для типа РЯД |
with function УВЕЛИЧИТЬ (X: INTEGER) return INTEGER; with function СУММА (X, Y: ЭЛЕМЕНТ) return ЭЛЕМЕНТ; with function "+" (X, Y: ЭЛЕМЕНТ) return ЭЛЕМЕНТ is >; with function ОБРАЗ (X: ПЕРЕЧИСЛ) return STRING is | |||||
ПЕРЕЧИСЛ'IMAGE; | |||||
with procedure ОБНОВЛЕНИЕ is ОБНОВЛЕНИЕ_ПО_УМОЛЧАНИЮ; |
procedure ЗАМЕНА (А, В: in out ЭЛЕМ) is - - см. пример в 12.1 | ||||
Т: ЭЛЕМ; - - формальный тип настройки | ||||
begin | ||||
Т: = А; А: = В; B: = Т; | ||||
end ЗАМЕНА; |
function BО3B_B_КВАДРАТ (X: ЭЛЕМЕНТ) return ЭЛЕМЕНТ is | |||||
begin | - - см. пример в 12.1 | ||||
return X * X; | - - формальная операция "*" | ||||
end; |
package body НАД_ВЕКТОРАМИ is - - см. пример в 12.1 | |||||||||
function СУММА (А, В: ВЕКТОР) return ВЕКТОР is | |||||||||
РЕЗУЛЬТАТ: ВЕКТОР (A'RANGE); - - формальный тип ВЕКТОР СМЕЩЕНИЕ: constant INTEGER: = B'FIRST - A'FIRST; | |||||||||
begin | |||||||||
if A'LENGTH / = B'LENGTH then | |||||||||
raise ОШИБОЧНАЯ_ДЛИНА; | |||||||||
end if; for К in A'RANGE loop | |||||||||
РЕЗУЛЬТАТ (К): = СУММА (А (К), В (К+ СМЕЩЕНИЕ) ); | |||||||||
- - формальная функция СУММА | |||||||||
end loop; return РЕЗУЛЬТАТ; | |||||||||
end; function СИГМА (А: ВЕКТОР) return ЭЛЕМЕНТ is | |||||||||
ИТОГ: ЭЛЕМЕНТ: = A (A'FIRST); - - формальный тип ЭЛЕМЕНТ | |||||||||
begin | |||||||||
for К in A'FIRST + 1..A'LAST loop | |||||||||
ИТОГ: = СУММА (ИТОГ, А (К) ); - - формальная функция СУММА | |||||||||
end loop; return ИТОГ; | |||||||||
end; | |||||||||
end; |
конкретизация_настройки : : = | |||||
package идентификатор is new имя_настраиваемого_пакета | |||||
[раздел_фактических_параметров_настройки]; | |||||
procedure идентификатор is new | |||||
имя_настраиваемой_процедуры [раздел_фактических_параметров_настройки]; | |||||
function обозначение is new имя_настраиваемой_функции | |||||
[раздел_фактических_параметров_настройки]; | |||||
раздел_фактических_параметров_настройки : : = | |||||
(сопоставление_параметров_настройки {, сопоставление_параметров_настройки}) | |||||
сопоставление_параметров_настройки : : = | |||||
[формальный_параметр_настройки => ] фактический_параметр_настройки | |||||
формальный_параметр_настройки : : = | |||||
простое_имя_параметра знак_операции | |||||
фактический_параметр_настройки : : = выражение | |||||
имя_переменной имя_подпрограммы имя_входа обозначение_типа |
procedure ОБМЕН is new ЗАМЕНА (ЭЛЕМ => INTEGER); procedure ОБМЕН is new ЗАМЕНА (CHARACTER); | ||||||||||
- - совмещение идентификатора ОБМЕН | ||||||||||
function КВАДРАТ is new ВОЗВ_В_КВАДРАТ (INTEGER); | ||||||||||
- - по умолчанию используется "*" над INTEGER | ||||||||||
function КВАДРАТ is new ВОЗВ_В_КВАДРАТ (ЭЛЕМЕНТ => МАТРИЦА, | ||||||||||
"*" => ПРОИЗВЕДЕНИЕ_МАТРИЦ); | ||||||||||
function КВАДРАТ is new ВОЗВ_В_КВАДРАТ (МАТРИЦА, | ||||||||||
ПРОИЗВЕДЕНИЕ_МАТРИЦ); | ||||||||||
- - что эквивалентно предыдущему | ||||||||||
package ЦЕЛ_ВЕКТОРЫ is new НАД_ВЕКТОРАМИ (INTEGER, ТАБЛИЦА, "+"); |
generic | ||||
type A is (>); type В is private; | ||||
package G is | ||||
function СЛЕДУЮЩИЙ (Х:А) return A; function СЛЕДУЮЩИЙ (X:B) return B; | ||||
end; package P is new G (A => BOOLEAN, В => BOOLEAN); | ||||
- - все вызовы Р. СЛЕДУЮЩИЙ неоднозначны. |
- - задание настраиваемого пакета generic | ||||
type ЭЛЕМЕНТ is private; type ИНДЕКС is (>); type ВЕКТОР is array (ИНДЕКС range >) of ЭЛЕМЕНТ; type ТАБЛИЦА is array (ИНДЕКС) of ЭЛЕМЕНТ; | ||||
package P is end; - - даны типы type СМЕСЬ is array (ЦВЕТ range >) of BOOLEAN; type ВЕРСИЯ is array (ЦВЕТ) of BOOLEAN; - - теперь тип СМЕСЬ может быть сопоставлен типу ВЕКТОР, а ВЕРСИЯ - типу - - ТАБЛИЦА package R is new P (ЭЛЕМЕНТ => BOOLEAN, ИНДЕКС => ЦВЕТ, | ||||
ВЕКТОР => СМЕСЬ, ТАБЛИЦА => ВЕРСИЯ); | ||||
- - Заметим, что СМЕСЬ не может быть сопоставлена с ТАБЛИЦА, а ВЕРСИЯ - с - - ВЕКТОР. |
- - формальным типам настраиваемого пакета generic | |||||
type УЗЕЛ is private; type СВЯЗЬ is access УЗЕЛ; | |||||
package P is | |||||
… | |||||
end; - - могут быть сопоставлены фактические типы type МАШИНА; type ИМЯ_МАШИНЫ is access МАШИНА; type МАШИНА is record | |||||
ПРЕД, СЛЕД: ИМЯ_МАШИНЫ; НОМЕР: РЕГИСТРАЦИОННЫЙ_НОМЕР; ВЛАДЕЛЕЦ: ПЕРСОНА; | |||||
end record; | |||||
- - в следующей конкретизации настройки package R is new P (УЗЕЛ => МАШИНА, СВЯЗЬ => ИМЯ_МАШИНЫ); |
- - дана спецификация настраиваемой функции generic | ||||||||||
type ЭЛЕМЕНТ is private; with function "*" (А, В: ЭЛЕМЕНТ) return ЭЛЕМЕНТ is >; | ||||||||||
function ВОЗВ_В_КВАДРАТ (X: ЭЛЕМЕНТ) return ЭЛЕМЕНТ; - - и функция function ПРОИЗВЕДЕНИЕ_МАТРИЦ (А, В: МАТРИЦА) return МАТРИЦА; - - возможна следующая конкретизация function КВАДРАТ is new ВОЗВ_В_КВАДРАТ (МАТРИЦА, | ||||||||||
ПРОИЗВЕДЕНИЕ_МАТРИЦ); | ||||||||||
- - следующие конкретизации эквивалентны function КВАДРАТ is new ВОЗВ_В_КВАДРАТ (ЭЛЕМЕНТ => INTEGER, | ||||||||||
"*" => "*"); | ||||||||||
function КВАДРАТ is new ВОЗВ_В_КВАДРАТ (INTEGER, "*"); function КВАДРАТ is new ВОЗВ_В_КВАДРАТ (INTEGER); |
generic | ||||||
РАЗМЕР: POSITIVE; type ЭЛЕМЕНТ is private; | ||||||
package СТЕК is | ||||||
procedure B_CTEK (E: in ЭЛЕМЕНТ); procedure ИЗ_СТЕКА (E: out ЭЛЕМЕНТ); ПЕРЕПОЛНЕНИЕ, ПУСТОТА: exception; | ||||||
end СТЕК; package body СТЕК is | ||||||
type ТАБЛИЦА is array (POSITIVE range >) of ЭЛЕМЕНТ; МЕСТО: ТАБЛИЦА (1..РАЗМЕР); ИНДЕКС: NATURAL: = 0; procedure B_CTEK (E: in ЭЛЕМЕНТ) is begin | ||||||
if ИНДЕКС > = РАЗМЕР then | ||||||
raise ПЕРЕПОЛНЕНИЕ; | ||||||
end if; ИНДЕКС: = ИНДЕКС + 1; МЕСТО (ИНДЕКС): = E; | ||||||
end B_CTEK; procedure ИЗ_СТЕКА (E: out ЭЛЕМЕНТ) is begin | ||||||
if ИНДЕКС = 0 then | ||||||
raise ПУСТОТА; | ||||||
end if; | ||||||
E: = МЕСТО (ИНДЕКС); ИНДЕКС: = ИНДЕКС - 1; | ||||||
end ИЗ_СТЕКА; | ||||||
end СТЕК; |
generic | |||||
type ЭЛЕМЕНТ is private; | |||||
package РАБОТА_СО_СТЕКОМ is | |||||
type СТЕК (РАЗМЕР: POSITIVE) is limited private; procedure B_СТЕК (C: in out СТЕК; E: in ЭЛЕМЕНТ); procedure ИЗ_СТЕКА (С: in out СТЕК; E: out ЭЛЕМЕНТ); ПЕРЕПОЛНЕНИЕ, ПУСТОТА: exception; | |||||
private | |||||
type ТАБЛИЦА is array (POSITIVE range >) of ЭЛЕМЕНТ; type СТЕК (РАЗМЕР: POSITIVE) is | |||||
record МЕСТО: ТАБЛИЦА (1..РАЗМЕР); ИНДЕКС: NATURAL:= 0; | |||||
end record; | |||||
end; |
declare | ||||
package СТЕК_ВЕЩЕСТВ is new РАБОТА_СО_СТЕКОМ (ВЕЩЕСТВ); use СТЕК_ВЕЩЕСТВ; С: СТЕК (100); | ||||
begin | ||||
… В_СТЕК (С, 2.54); | ||||
end; |
спецификатор_представления : : = | ||||
спецификатор_представления_типа спецификатор_адреса | ||||
спецификатор_представления_типа : : = спецификатор_длины | ||||
спецификатор_представления_перечисления спецификатор_представления_записи |
- - предполагаемые описания: type СРЕДА is range 0..65000; type КОРОТКИЙ is delta 0.01 range - 100.0..100.0; type ГРАДУС is delta 0.1 range - 360.0..360.0; БАЙТ: constant: =8; СТРАНИЦА: constant: = 2000; - - спецификаторы длины: for ЦВЕТ'SIZE use 1 * БАЙТ; - - см. 3.5.1 for СРЕДА'SIZE use 2 * БАЙТ; for КОРОТКИЙ'SIZE use 15; for ИМЯ_МАШИНЫ' STORAGE_SIZE use - - примерно 2000 машин | ||||
2000 * ((МАШИНА'SIZE/SYSTEM. STORAGE_UNIT) + 1); | ||||
for КЛАВИАТУРА'STORAGE_SIZE use 1 * СТРАНИЦА; for ГРАДУС'SMALL use 360.0/2 ** (SYSTEM. STORAGE_UNIT -1); |
спецификатор_представления_перечисления : : = | ||||
for простое_имя_типа use агрегат; |
type МАШ_КОДЫ is (СЛОЖ, ВЫЧ, УМН, ЗАГР, ВЫГР, ВЫГР_ЗН); for МАШ_КОДЫ use | ||||
(СЛОЖ=> 1, ВЫЧ => 2, УМН => 3, ЗАГР => 8, ВЫГР => 24, ВЫГР_ЗН => 33); |
спецификатор_представления_записи : : = | |||||
for простое_имя_типа use record [спецификатор_выравнивания] | |||||
{спецификатор_компонента} | |||||
end record; | |||||
спецификатор_выравнивания : : = | |||||
at mod статическое_простое_выражение; | |||||
спецификатор_компонента : : = | |||||
имя_компонента at статическое_простое_выражение | |||||
range статический_диапазон; |
СЛОВО: constant: = 4; - - квант памяти - это байт; в слове 4 байта type СОСТОЯНИЕ is (A, M, W, Р); type ВИД is (ФИКС, ДЕСЯТ, ПОКАЗ, ЗНАК); type МАСКА_БАЙТА is array (0..7) of BOOLEAN; type МАСКА_СОСТОЯНИЯ is array (СОСТОЯНИЕ) of BOOLEAN; type МАСКА_ВИДА is array (ВИД) of BOOLEAN; type СЛОВО_СОСТОЯНИЯ_ПРОГРАММЫ is | ||||||
record | ||||||
МАСКА_СИСТЕМЫ | : МАСКА_БАЙТА; | |||||
КЛЮЧ_ЗАЩИТЫ | : INTEGER range 0..3; | |||||
СОСТОЯНИЕ_МАШИНЫ | : МАСКА_СОСТОЯНИЯ; | |||||
ПРИЧИНА_ПРЕРЫВАНИЯ | : КОД_ПРЕРЫВАНИЯ; | |||||
ПРИЗНАК_1 | : INTEGER range 0..3 | |||||
ПРИЗНАК_2 | : INTEGER range 0..3 | |||||
МАСКА_ПРОГРАММЫ | : МАСКА_ВИДА; | |||||
ТЕК_АДРЕС | : ADDRESS; | |||||
end record; | ||||||
for СЛОВО_СОСТОЯНИЯ_ПРОГРАММЫ use | ||||||
record at mod 8; | ||||||
МАСКА_СИСТЕМЫ at 0 * СЛОВО range 0..7; - - 8 и 9 разряды не используются КЛЮЧ_ЗАЩИТЫ at 0 * СЛОВО range 10..11; СОСТОЯНИЕ_МАШИНЫ at 0 * СЛОВО range 12..15; ПРИЧИНА_ПРЕРЫВАНИЯ at 0 * СЛОВО range 16..31; - - второе слово ПРИЗНАК_1 at 1 * СЛОВО range 0..1; ПРИЗНАК_2 at 1 * СЛОВО range 2..3; МАСКА_ПРОГРАММЫ at 1 * СЛОВО range 4..7; ТЕК_АДРЕС at 1 * СЛОВО range 8..31; | ||||||
end record; | ||||||
for СЛОВО_СОСТОЯНИЯ_ПРОГРАММЫ'SIZE use | ||||||
8 * SYSTEM.STORAGE_UNIT; |
for УПРАВЛЕНИЕ use at 16 # 0020 #; - - предполагается, что SYSTEM. ADDRESS - это некоторый целый тип |
task ОБРАБОТКА_ПРЕРЫВАНИЯ is | ||||
entry ГОТОВЫЙ; for ГОТОВЫЙ use at 16 # 40 #; - - предполагается, что SYSTEM.ADDRESS - это некоторый целый тип | ||||
end ОБРАБОТКА_ПРЕРЫВАНИЯ; |
- - УПАКОВАННЫЙ_ДЕСКРИПТОР и ДЕСКРИПТОР - это два различных - - типа с одинаковыми характеристиками, но различным представлением. type ДЕСКРИПТОР is | ||||
record - - компоненты дескриптора end record; | ||||
type УПАКОВАННЫЙ_ДЕСКРИПТОР is new ДЕСКРИПТОР; for УПАКОВАННЫЙ_ДЕСКРИПТОР use | ||||
record - - спецификаторы компонентов для всех или некоторых компонентов end record; |
package SYSTEM is | |||||
type ADDRESS is определен_реализацией; type NAME is определен_реализацией_перечислимого_типа; SYSTEM_NAME: constant NAME: = определен_реализацией; STORAGE_UNIT: constant: = определен_реализацией; MEMORY_SIZE: constant: = определен_реализацией; - - зависящие от системы именованные числа: | |||||
MIN_INT MAX_INT MAX_DIGITS MAX_MANTISSA FINE_DELTA TICK | : constant: = определен_реализаццей; : constant: = определен_реализацией; : constant: = определен_реализацией; : constant: = определен_реализацией; : constant: = определен_реализацией; : constant: = определен_реализацией; | ||||
- - другие зависящие от системы описания: subtype PRIORITY is INTEGER range определен_реализацией; … | |||||
end SYSTEM; |
М: МАСКА; procedure УСТАНОВИТЬ_МАСКУ; pragma INLINE (УСТАНОВИТЬ_МАСКУ); procedure УСТАНОВИТЬ_МАСКУ is | ||||
use MACHINE_CODE; | ||||
begin | ||||
ФОРМАТ_СИ' (КОД => SSM, Б => М'БАЗОВЫЙ_РЕГ, CM => М'СМЕЩ); - - М'БАЗОВЫЙ_РЕГ и М'СМЕЩ - это заданные реализацией предопределенные - - атрибуты | ||||
end; |
package БИБЛ_ФОРТ is | ||||
function SQRT (X: FLOAT) return FLOAT; function EXP (X: FLOAT) return FLOAT; | ||||
private | ||||
pragma INTERFACE (ФОРТРАН, SQRT); pragma INTERFACE (ФОРТРАН, EXP); | ||||
end БИБЛ_ФОРТ; |
generic | ||||
type OBJECT is limited private; type NAME is access OBJECT; | ||||
procedure UNCHECKED_DEALLOCATION (X: in out NAME); generic | ||||
type SOURCE is limited private; type TARGET is limited private; | ||||
function UNCHECKED_CONVERSION (S: SOURCE) return TARGET; |
procedure СВОБОДНО is new UNCHECKED_DEALLOCATION | |||||
(имя_типа_объекта, имя_ссылочного_типа); |
with IO_EXCEPTIONS; generic | ||||
type ELEMENT_TYPE is private; | ||||
package SEQUENTIAL_IO is | ||||
type FILE_TYPE is limited private; type FILE_MODE is (IN_FILE, OUT_FILE); … procedure OPEN (FILE: in out FILE_TYPE;...); ... procedure READ (FILE: in FILE_TYPE; ITEM: out ELEMENT_TYPE); procedure WRITE (FILE: in FILE_TYPE; ITEM: in ELEMENT_TYPE); … | ||||
end SEQUENTIAL_IO; |
type FILE_MODE is (IN_FILE, INOUT_FILE, OUT_FILE); - - для DIRECT_IO type FILE_MODE is (IN_FILE, OUT_FILE); - - для SEQUENTIAL_IO и TEXT_IO |
procedure CREATE (FILE: in out FILE_TYPE; | ||||
MODE: in FILE_MODE: = вид _по_умолчанию; NAME: in STRING: = " "; FORM: in STRING: = " "); |
procedure OPEN (FILE: in out FILE_TYPE; | |||||||
MODE: in FILE_MODE; NAME: in STRING; FORM: in STRING: = " "); |
with IO_EXCEPTIONS; generic | ||||||||||
type ELEMENT_TYPE is private; | ||||||||||
package SEQUENTIAL _IO is | ||||||||||
type FILE_TYPE is limited private; type FILE_MODE is (IN_FILE, OUT_FILE); | ||||||||||
- - управление файлами | ||||||||||
procedure CREATE (FILE: in out FILE_TYPE; | ||||||||||
MODE: in FILE_MODE: = OUT_FILE; NAME: in STRING: = " "; FORM: in STRING: = " "); | ||||||||||
procedure OPEN (FILE: in out FILE_TYPE; | ||||||||||
MODE: in FILE_MODE; NAME; in STRING; FORM: in STRING:= " "); | ||||||||||
procedure CLOSE (FILE: in out FILE_TYPE); procedure DELETE (FILE: in out FILE_TYPE); procedure RESET (FILE: in out FILE_TYPE; | ||||||||||
MODE: in FILE_MODE); | ||||||||||
procedure RESET (FILE: in out FILE_TYPE); function MODE (FILE: in FILE_TYPE) return FILE_MODE; function NAME (FILE: in FILE_TYPE) return STRING; function FORM (FILE: in FILE_TYPE) return STRING; function IS_OPEN (FILE: in FILE_TYPE) return BOOLEAN; - - операции ввода и вывода procedure READ (FILE: in FILE_TYPE; | ||||||||||
ITEM: out ELEMENT_TYPE); | ||||||||||
procedure WRITE (FILE: in FILE_TYPE; | ||||||||||
ITEM: in ELEMENT_TYPE); | ||||||||||
function END_OF_FILE (FILE: in FILE_TYPE) return BOOLEAN; - - исключения STATUS_ERROR: exception renames IO_EXCEPTIONS. STATUS_ERROR; MODE_ERROR: exception renames IO_ EXCEPTIONS. MODE_ERROR; NAME_ERROR: exception renames IO_EXCEPTIONS. NAME_ERROR; USE_ERROR: exception renames IO_EXCEPTIONS. USE_ERROR; DEVICE_ERROR: exception renames IO_EXCEPTIONS. DEVICE_ERROR; | ||||||||||
END_ERROR: exception renames IO_EXCEPTIONS. END_ERROR; DATA_ERROR: exception renames IO_EXCEPTIONS. DATA_ERROR; | ||||||||||
private | ||||||||||
- - зависит от реализации | ||||||||||
end SEQUENTIAL_IO; |
procedure READ (FILE: in FILE_TYPE; | |||||||
ITEM: out ELEMENT_TYPE; FROM: in POSITIVE_COUNT); | |||||||
procedure READ (FILE: in FILE_TYPE; | |||||||
ITEM: out ELEMENT_TYPE); |
procedure WRITE (FILE: in FILE_TYPE; | ||||||||
ITEM: in ELEMENT_TYPE; TO: in POSITIVE_COUNT); | ||||||||
procedure WRITE (FILE: in FILE_TYPE; ITEM: in ELEMENT_TYPE); |
with IO_EXCEPTIONS; generic | ||||||||||
type ELEMENT_TYPE is private; | ||||||||||
package DIRECT_IO is | ||||||||||
type FILE_TYPE is limited private; type FILE_MODE is (IN_FILE, INOUT_FILE, OUT_FILE); type COUNT is range 0..определяется_реализацией | ||||||||||
subtype POSITIVE_COUNT is COUNT range 1..COUNT' LAST; - - управление файлами procedure CREATE (FILE: in out FILE_TYPE; | ||||||||||
MODE: in FILE_MODE: = INOUT_FILE; NAME: in STRING: = " "; FORM: in STRING: = " "); | ||||||||||
procedure OPEN (FILE: in out FILE_TYPE; | ||||||||||
MODE: in FILE_MODE; NAME: in STRING; FORM: in STRING: = " "); | ||||||||||
procedure CLOSE (FILE: in out FILE_TYPE); procedure DELETE (FILE: in out FILE_TYPE); procedure RESET (FILE: in out FILE_TYPE; MODE: in FILE_MODE); procedure RESET (FILE: in out FILE_TYPE); function MODE (FILE: in FILE_TYPE) return FILE_MODE; function NAME (FILE: in FILE_TYPE) return STRING; function FORM (FILE: in FILE_TYPE) return STRING; function IS_OPEN (FILE: in FILE_TYPE) return BOOLEAN; - - операции ввода и вывода procedure READ (FILE: in FILE_TYPE; | ||||||||||
ITEM: out ELEMENT_TYPE; FROM: POSITIVE_COUNT); | ||||||||||
procedure READ (FILE: in FILE_TYPE; ITEM: out ELEMENT_TYPE); procedure WRITE (FILE: in FILE_TYPE; | ||||||||||
ITEM: in ELEMENT_TYPE; | ||||||||||
TO: POSITIVE_COUNT); | ||||||||||
procedure WRITE (FILE: in FILE_TYPE; ITEM: in ELEMENT_TYPE); procedure SET_INDEX (FILE; in FILE_TYPE; TO: in POSITIVE_COUNT); function INDEX (FILE: in FILE_TYPE) return POSITIVE_COUNT; function SIZE (FILE: in FILE_TYPE) return COUNT; function END_OF_FILE (FILE: in FILE_TYPE) return BOOLEAN; - - исключения STATUS_ERROR: exception renames IO_EXCEPTIONS. STATUS_ERROR; MODE_ERROR: exception renames IO_EXCEPTIONS.MODE_ERROR; NAME_ERROR: exception renames IO_EXCEPTIONS.NAME_ERROR; USE_ERROR: exception renames IO_EXCEPTIONS.USE_ERROR; DEVICE_ERROR: exception renames IO_EXCEPTIONS.DEVICE_ERROR; END_ERROR: exception renames IO_EXCEPTIONS.END_ERROR; DATA_ERROR: exception renames IO_EXCEPTIONS.DATA_ERROR; | ||||||||||
private - - зависит от реализации end DIRECT_IO; |
________________
* Текст соответствует оригиналу. - Примечание изготовителя базы данных.
procedure NEW_LINE (FILE: in FILE_TYPE; | ||||||||
SPACING: in POSITIVE_COUNT: = 1); | ||||||||
procedure NEW_LINE (SPACING: in POSITIVE_COUNT: = 1); |
procedure SKIP_LINE (FILE: in FILE_TYPE; | |||||||||
SPACING: in POSITIVE_COUNT: = 1); | |||||||||
procedure SKIP_LINE (SPACING: in POSITIVE_COUNT: = 1); |
procedure SET_COL (FILE: in FILE_TYPE; | ||||||||
TO: in POSITIVE_COUNT); | ||||||||
procedure SET_COL (TO: in POSITIVE_COUNT); |
procedure SET_LINE (FILE: in FILE_TYPE; | ||||||||
TO: in POSITIVE_COUNT); | ||||||||
procedure SET_LINE (TO: in POSITIVE _COUNT); |
К: INTEGER; … GET(K); - - символы на входе, вводимая последовательность, значение К | |||||
- - bb - 12535b | - 12535 | - 12535 | |||
- - bb 12_535E1b | 12_535E1 | 125350 | |||
- - bb 12_535E; | 12_535E | (нет) Возбуждено DATA_ERROR |
procedure GET_LINE (FILE: in FILE_TYPE; ITEM: out STRING; LAST: out | ||||||||
NATURAL); | ||||||||
procedure GET_LINE (ITEM: out STRING; LAST: out NATURAL); |
procedure PUT (FILE: in FILE_TYPE; ITEM: in NUM; | |||||||
WIDTH: in FIELD: = DEFAULT_WIDTH; BASE: in NUMBER_BASE: = DEFAULT_BASE); | |||||||
procedure PUT (ITEM: in NUM; | |||||||
WIDTH: in FIELD: = DEFAULT_WIDTH; BASE: in NUMBER_BASE: = DEFAULT_BASE); |
procedure PUT (TO: out STRING; ITEM: in NUM; | |||||||
BASE: in NUMBER_BASE: = DEFAULT_BASE); |
package ЦЕЛ_ВВ is new INTEGER_IO (КОРОТКОЕ_ЦЕЛ); use ЦЕЛ_ВВ; - - в результате настройки получается формат по умолчанию: - - DEFAULT_WIDTH = 4,DEFAULT_BASE = 10 | ||||
PUT (126) | - - "b126" | |||
PUT (-126,7) | - - "bbb-126" | |||
PUT (126, WIDTH => 13, BASE => 2); | - - "bbb2 # 1111110 #" |
DEFAULT_FORE: FIELD: = 2; DEFAULT_AFT: FIELD: = NUM'DIGITS -1; DEFAULT_EXP: FIELD: = 3; |
DEFAULT_FORE: FIELD: = NUM'FORE; DEFAULT_AFT:FIELD: = NUM'AFT; DEFAULT_EXP:FIELD: = 0; |
procedure GET (FILE: in FILE_TYPE; ITEM: out NUM; | |||||||
WIDTH: in FIELD: = 0); | |||||||
procedure GET (ITEM: out NUM; WIDTH: in FIELD: = 0); |
procedure PUT (FILE: in FILE_TYPE; ITEM: in NUM; | |||||||
FORE: in FIELD: = DEFAULT_FORE; AFT: in FIELD: = DEFAULT_AFT; EXP: in FIELD: = DEFAULT_EXP); | |||||||
procedure PUT (ITEM: in NUM; | |||||||
FORE: in FIELD: = DEFAULT_FORE; AFT: in FIELD: = DEFAULT_AFT; EXP: in FIELD: = DEFAULT_EXP); |
procedure PUT (TO: out STRING; ITEM: in NUM; | ||||||||
AFT: in FIELD: = DEFAULT_AFT; | ||||||||
EXP: in FIELD: = DEFAULT_EXP); |
package ВЕЩЕСТВ_ВВ is new FLOAT_IO (ВЕЩЕСТВ); use ВЕЩЕСТВ_ВВ; - - в результате конкретизации получается формат по умолчанию; DEFAULT_EXP=3 X: ВЕЩЕСТВ: = -123.4567 - - digits 8 (см. 3.5.7) PUT(X) - - формат по умолчанию "-1.2345670Е+02" PUT(X,FORE => 5, AFT => 3, EXP => 2); - -"bbb-1.235Е+2" PUT(X, 5, 3, 0); - - "b-123.457" |
procedure PUT (FILE: in FILE_TYPE; | |||||||
ITEM: in ENUM; WIDTH: in FIELD: = DEFAULT_WIDTH; SET: in TYPE_SET: = DEFAULT_SETTING); | |||||||
procedure PUT (ITEM: in ENUM; | |||||||
WIDTH: in FIELD: = DEFAULT_WIDTH; SET: in TYPE_SET: =DEFAULT_SETTING); |
procedure GET (FROM: in STRING; | |||||||
ITEM: out ENUM; LAST: out POSITIVE); |
procedure PUT (TO: out STRING; | |||||||
ITEM: in ENUM; SET: in TYPE_SET: = DEFAULT_SETTING); |
TEXT_IO.PUT('A'); - - выводит символ А package СИМВ_ВВ is new TEXT_IO. ENUMERATION _IO (CHARACTER); СИМВ_ВВ. PUT('A'); - - выводит символ 'А', | |||||||
- - заключенный в одинарные - - кавычки |
with IO_EXCEPTIONS; package TEXT_IO is | ||||||||||
type FILE_TYPE is limited private; type FILE_MODE is (IN_FILE, OUT_FILE); type COUNT is range 0..определяется_реализацией; subtype POSITIVE_COUNT is COUNT range 1.. COUNT'LAST; | ||||||||||
UNBOUNDED: constant COUNT: = 0; - - длина строчки и страницы | ||||||||||
subtype FIELD is INTEGER range 0..определяется_реализацией; subtype NUMBER_BASE is INTEGER range 2..16; type TYPE_SET is (LOWER_CASE, UPPER_CASE); - - управление файлами procedure CREATE (FILE: in out FILE_TYPE; | ||||||||||
MODE: in FILE_MODE: = OUT_FILE; NAME: in STRING: = " "; FORM: in STRING: = " "); | ||||||||||
procedure OPEN (FILE: in out FILE_TYPE; | ||||||||||
MODE: in FILE_MODE; NAME: in STRING; FORM: in STRING: = " "); | ||||||||||
procedure CLOSE (FILE: in out FILE_TYPE); procedure DELETE (FILE: in out FILE_TYPE); procedure RESET (FILE: in out FILE_TYPE, MODE: in FILE_MODE); procedure RESET (FILE: in out FILE_TYPE); function MODE (FILE: in FILE_TYPE (return FILE_MODE; function NAME (FILE: in FILE_TYPE) return STRING; function FORM (FILE: in FILE_TYPE) return STRING; function IS_OPEN (FILE: in FILE_TYPE) return BOOLEAN; - - управление файлами ввода и вывода по умолчанию procedure SET_INPUT (FILE: in FILE_TYPE); procedure SET_OUTPUT (FILE: in FILE_TYPE); function STANDARD_INPUT return FILE_TYPE; function STANDARD_OUTPUT return FILE_TYPE; function CURRENT_INPUT return FILE_TYPE; function CURRENT_OUTPUT return FILE_TYPE; - - спецификация длин строчки и страницы procedure SET_LINE_LENGTH (FILE: in FILE_TYPE; TO: in COUNT); procedure SET_LINE_LENGTH (TO: in COUNT); procedure SET_PAGE_LENGTH (FILE: in FILE_TYPE; TO: in COUNT); procedure SET_PAGE_LENGTH (TO: in COUNT); function LINE_LENGTH (FILE: in FILE_TYPE) return COUNT; function LINE_LENGTH return COUNT; function PAGE_LENGTH (FILE: in FILE_TYPE) return COUNT; function PAGE_LENGTH return COUNT; - - управление колонкой, строчкой и страницей procedure NEW_LINE (FILE: in FILE_TYPE; | ||||||||||
SPACING: in POSITIVE_COUNT: = 1); | ||||||||||
procedure NEW_LINE (SPACING: in POSITIVE_COUNT: = 1); procedure SKIP_LINE (FILE: in FILE_TYPE; | ||||||||||
SPACING: in POSITIVE_COUNT: =1); | ||||||||||
procedure SKIP_LINE (SPACING: in POSITIVE_COUNT: = 1); function END_OF_LINE (FILE: in FILE_TYPE) return BOOLEAN; function END_OF_LINE return BOOLEAN; procedure NEW_PAGE (FILE: in FILE_TYPE); procedure NEW_PAGE; procedure SKIP_PAGE (FILE: in FILE_TYPE); procedure SKIP_PAGE; function END_OF_PAGE (FILE: in FILE_TYPE) return BOOLEAN; function END_OF_PAGE return BOOLEAN; function END_OF_FILE (FILE: in FILE_TYPE) return BOOLEAN; function END_OF_FILE return BOOLEAN; procedure SET_COL (FILE: in FILE_TYPE; TO: in POSITIVE_COUNT); procedure SET_COL (TO: in POSITIVE_COUNT); procedure SET_LINE (FILE: in FILE_TYPE;TO: in POSITIVE_COUNT); procedure SET_LINE (TO: in POSITIVE_COUNT); function COL (FILE: in FILE_TYPE) return POSITIVE_COUNT; function COL return POSITIVE_COUNT; function LINE (FILE: in FILE_TYPE) return POSITIVE_COUNT; function LINE return POSITIVE_COUNT; function PAGE (FILE: in FILE_TYPE) return POSITIVE_COUNT; function PAGE return POSITIVE_COUNT; - - символьный ввод-вывод procedure GET (FILE: in FILE_TYPE; ITEM: out CHARACTER); procedure GET (ITEM: out CHARACTER); procedure PUT (FILE: in FILE_TYPE; ITEM: in CHARACTER); procedure PUT (ITEM: in CHARACTER); - - строковый ввод-вывод procedure GET (FILE: in FILE_TYPE; ITEM: out STRING); procedure GET (ITEM: out STRING); procedure PUT (FILE: in FILE_TYPE; ITEM: in STRING); procedure PUT (ITEM: in STRING); procedure GET_LINE (FILE: in FILE_TYPE; | ||||||||||
ITEM: out STRING; LAST: out NATURAL); | ||||||||||
procedure GET_LINE (ITEM: out STRING; LAST: out NATURAL); procedure PUT_LINE (FILE: in FILE_TYPE; ITEM: in STRING); procedure PUT_LINE (ITEM: in STRING); - - настраиваемый пакет для ввода-вывода целых типов generic | ||||||||||
type NUM is range >; | ||||||||||
package INTEGER _IO is | ||||||||||
DEFAULT_WIDTH: FIELD: =NUM'WIDTH; DEFAULT_BASE: NUMBER_BASE: = 10; | ||||||||||
procedure GET (FILE: in FILE_TYPE; ITEM: out NUM; WIDTH: in FIELD: = 0); procedure GET (ITEM: out NUM; WIDTH: in FIELD: = 0); procedure PUT (FILE: in FILE_TYPE; | ||||||||||
ITEM: in NUM; WIDTH: in FIELD: = DEFAULT_WIDTH; BASE: in NUMBER_BASE: = DEFAULT_BASE); | ||||||||||
procedure PUT (ITEM: in NUM; | ||||||||||
WIDTH: in FIELD: = DEFAULT_WIDTH; BASE: in NUMBER_BASE: = DEFAULT_BASE); | ||||||||||
procedure GET (FROM: in STRING; ITEM: out NUM; LAST: out POSITIVE); procedure PUT (TO: out STRING; | ||||||||||
ITEM: in NUM; BASE: in NUMBER_BASE: = DEFAULT_BASE); | ||||||||||
end INTEGER_IO; - - настраиваемый пакет для ввода-вывода вещественных типов generic | ||||||||||
type NUM is digits >; | ||||||||||
package FLOAT_IO is | ||||||||||
DEFAULT_FORE: FIELD: = 2; DEFAULT_AFT: FIELD: = NUM'DIGITS -1; DEFAULT_EXP: FIELD: = 3; procedure GET (FILE: in FILE_TYPE; ITEM: out NUM; WIDTH: in FIELD: = 0); procedure GET (ITEM: out NUM; WIDTH: in FIELD: = 0); procedure PUT (FILE: in FILE_TYPE; | ||||||||||
ITEM: in NUM: FORE: in FIELD: = DEFAULT_FORE; AFT: in FIELD: = DEFAULT_AFT; EXP: in FIELD: = DEFAULT_EXP); | ||||||||||
procedure PUT (ITEM: in NUM; | ||||||||||
FORE: in FIELD: = DEFAULT_FORE; AFT: in FIELD: = DEFAULT_AFT; EXP: FIELD: = DEFAULT_EXP); | ||||||||||
procedure GET (FROM: in STRING; ITEM: out NUM; LAST: out POSITIVE); procedure PUT (TO: out STRING; | ||||||||||
ITEM: in NUM; AFT: in FIELD: = DEFAULT_AFT; EXP: in FIELD: = DEFAULT_EXP); | ||||||||||
end FLOAT_IO; generic | ||||||||||
type NUM is delta >; | ||||||||||
package FIXED_IO is | ||||||||||
DEFAULT_FORE: FIELD: = NUM'FORE; DEFAULT_AFT: FIELD: = NUM'AFT; DEFAULT_EXP: FIELD: = 0; procedure GET (FILE: in FILE_TYPE; ITEM: out NUM; WIDTH: in FIELD: = 0); procedure GET (ITEM: out NUM; WIDTH: in FIELD: = 0); procedure PUT (FILE: in FILE_TYPE; | ||||||||||
ITEM: in NUM; FORE: in FIELD; = DEFAULT_FORE; AFT: in FIELD: = DEFAULT_AFT; EXP: in FIELD: = DEFAULT_EXP); | ||||||||||
procedure PUT (ITEM: in NUM; | ||||||||||
FORE: in FIELD: = DEFAULT_FORE; AFT: in FIELD: = DEFAULT_AFT; EXP: in FIELD: = DEFAULT_EXP); | ||||||||||
procedure GET (FROM: in STRING; ITEM: out NUM; LAST: out POSITIVE); procedure PUT (TO: out STRING; ITEM: in NUM; | ||||||||||
AFT: in FIELD: = DEFAULT_AFT; EXP: in FIELD: = DEFAULT_EXP); | ||||||||||
end FIXED_IO; - - настраиваемый пакет для ввода-вывода перечислимых типов generic | ||||||||||
type ENUM is (>); | ||||||||||
package ENUMERATION _IO is | ||||||||||
DEFAULT_WIDTH: FIELD: = 0; DEFAULT_SETTING: TYPE_SET: = UPPER_CASE; procedure GET (FILE: in FILE_TYPE; ITEM: out ENUM); procedure GET (ITEM: out ENUM); procedure PUT (FILE: in FILE_TYPE; ITEM: in ENUM; | ||||||||||
WIDTH: in FIELD: = DEFAULT_WIDTH; SET: in TYPE_SET: = DEFAULT_SETTING); | ||||||||||
procedure PUT (ITEM: in ENUM; | ||||||||||
WIDTH: in FIELD: = DEFAULT_WIDTH; SET: in TYPE_SET: = DEFAULT_SETTING); | ||||||||||
procedure GET (FROM: in STRING; ITEM: out ENUM; | ||||||||||
LAST: out POSITIVE); | ||||||||||
procedure PUT (TO: out STRING; ITEM: in ENUM; | ||||||||||
SET: in TYPE_SET: = DEFAULT_SETTING); | ||||||||||
end ENUMERATION _IO; | ||||||||||
- - исключения STATUS _ERROR: exception renames IO_EXCEPTIONS.STATUS_ERROR, MODE_ERROR: exception renames IO_EXCEPTIONS.MODE_ERROR; NAME_ERROR: exception renames IO_EXCEPTIONS.NAME_ERROR; USE_ERROR: exception renames IO_EXCEPTIONS.USE_ERROR; DEVICE_ERROR: exception renames IO_EXCEPTIONS.DEVICE_ERROR; END_ERROR: exception renames IO_EXCEPTIONS.END_ERROR; DATA_ERROR: exception renames IO_EXCEPTIONS.DATA_ERROR; LAYOUT_ERROR: exception renames IO_EXCEPTIONS.LAYOUT_ERROR; | ||||||||||
private | ||||||||||
- - определяется реализацией | ||||||||||
end TEXT_IO; |
package IO_EXCEPTIONS is | ||||
STATUS_ERROR: exception; MODE_ERROR: exception; NAME_ERROR: exception; USE_ERROR: exception; DEVICE_ERROR: exception; END_ERROR: exception; DATA_ERROR: exception; LAYOUT_ERROR: exception; | ||||
end IO_EXCEPTIONS; |
package LOW_LEVEL_IO is | |||||||||
- - описания возможных типов параметров DEVICE и DATA - - описания совмещенных процедур над такими типами: procedure SEND_CONTROL (DEVICE: тип_устройства; | |||||||||
DATA: in out тип_данных); | |||||||||
procedure RECEIVE_CONTROL (DEVICE: тип_устройства; | |||||||||
DATA: in out тип_данных); | |||||||||
end; |
with TEXT_IO; use ТЕХТ_IO; procedure ДИАЛОГ is | |||||||||
type ЦВЕТ is (БЕЛЫЙ, КРАСНЫЙ, ОРАНЖЕВЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, | |||||||||
СИНИЙ, КОРИЧНЕВЫЙ); | |||||||||
package ВВ_ЦВЕТА is new ENUMERATION _IO (ENUM => ЦВЕТ); package BB_ЧИСЛА is new INTEGER_IO (INTEGER); use ВВ_ЦВЕТА, ВВ_ЧИСЛА; ОПИСЬ: array (ЦВЕТ) of INTEGER: = (20, 17, 43,10, 28, 173, 87); ВАРИАНТ: ЦВЕТ; procedure ВЫБОР_ЦВЕТА (ВЫБОР: out ЦВЕТ) is begin | |||||||||
loop | |||||||||
begin | |||||||||
PUT ("ВЫБРАННЫЙ ЦВЕТ: "); - - обращение к пользователю GET (ВЫБОР); - - вводит набранный цвет или возбуждает исключение return; | |||||||||
exception | |||||||||
when DATA_ERROR => | |||||||||
PUT ("ОШИБОЧНЫЙ ЦВЕТ, ПОВТОРИТЕ НАБОР"); - - пользователь должен набрать новую строчку NEW_LINE (2); - - завершение выполнения оператора блока | |||||||||
end; | |||||||||
end loop, - - повторение оператора блока, пока не будет получен правильный цвет | |||||||||
end; begin - - операторы процедуры ДИАЛОГ; | |||||||||
ВВ_ЧИСЛА.DEFAULT_WIDTH: = 5; loop | |||||||||
ВЫБОР_ЦВЕТА (ВАРИАНТ); - - пользователь набирает цвет и начинает новую строчку | |||||||||
SET_COL (5); PUT (ВАРИАНТ); PUT ("ВСЕГО ПРЕДМЕТОВ: " ); SET_COL (40); PUT (ОПИСЬ (ВАРИАНТ) ); - - ширина по умолчанию равна 5 NEW_LINE; end loop; | |||||||||
end ДИАЛОГ; |
ВЫБРАННЫЙ ЦВЕТ: ЧЕРНЫЙ ОШИБОЧНЫЙ ЦВЕТ, ПОВТОРИТЕ НАБОР ВЫБРАННЫЙ ЦВЕТ: СИНИЙ | ||||||||
СИНИЙ ВСЕГО ПРЕДМЕТОВ: 173 | ||||||||
ВЫБРАННЫЙ ЦВЕТ: ЖЕЛТЫЙ | ||||||||
ЖЕЛТЫЙ ВСЕГО ПРЕДМЕТОВ: 10 |