При описании конструкций языка используются следующие условные обозначения:
· Каждое правило записи состоит из одной или нескольких альтернатив (фраз), разделенных вертикальной чертой ( | ).
· Фраза состоит из нуля или более элементов.
· Элемент – это или зарезервированное слово языка (выделяется жирным шрифтом), или специальный символ (комбинация), или некоторое метаимя, заключенное в угловые скобки <>, или другое синтаксическое выражение, заключенное с двух сторон в фигурные, квадратные, круглые скобки.
· Фигурные скобки указывают на повторение (нуль или более вхождений), квадратные скобки – на допустимость (нуль или одно вхождение), а круглые скобки – на группирование (точно одно вхождение) выражений, в них заключенных.
2) Алфавит
Алфавит языка содержит следующие символы:
· цифры 0…9;
· прописные и строчные латинские буквы A…Z, a…z;
· прописные и строчные русские буквы А…Я, а…я;
специальные символы:
· _ - подстрочный символ;
· $ - знак денежной единицы;
· : - двоеточие;
· [, ] - прямые скобки;
· (, ) - круглые скобки;
· {, } - фигурные скобки;
· , - запятая;
· + - знак сложения;
· - - знак вычитания;
· * - знак умножения;
· / - знак деления;
· < - знак меньше;
· > - знак больше;
· = - знак равно;
· . - точка;
· ' - апостроф;
· \ - обратная косая черта;
· ~ - тильда;
· # - знак номера.
3) Лексемы и разделители
Лексемы языка состоят из символов, входящих в алфавит языка, и отделяются друг от друга одним или несколькими разделителями.
Разделителем является:
· пробел;
· знак горизонтальной табуляции;
· конец строки;
· конец объекта;
· комментарий.
Разделители могут следовать один за другим в любом количестве и сочетании (кроме признака конца объекта).
Комментарием является любой текст, заключенный в фигурные скобки. Этот текст может содержать разделители (кроме признака конца объекта), а также символы, не входящие в алфавит языка. Вложенные комментарии и фигурные скобки внутри комментария не допускаются.
4) Типы данных. Соответствие типов
Тип данных определяет множество значений, которые может принимать та или иная переменная, и те операции, которые можно к ним применять. Концепцию типов данных широко используют в современных языках программирования, с ее помощью можно абстрагироваться от физического представления данных, повысить наглядность и надежность программы. С каждой встречающейся в программе константой, функцией, последовательностью, параметром ресурса, параметром функции, параметром образца должен быть сопоставлен один и только один тип.
В данной версии РДО-языка определены следующие типы данных:
· целый тип - integer;
· длинное целое - longint;
· вещественный тип - real;
· перечислимый тип;
· ссылка на один из выше определенных типов - such_as.
Для целых и вещественных типов возможно задание диапазона допустимых значений. Диапазон указывают за зарезервированным словом integer, longint или real в квадратных скобках. Границы диапазона представляют собой численные константы вещественного или целого типа, их разделяют двумя точками.
Перечислимые типы задают указанием всех возможных значений. Имена всех возможных значений перечислимого типа указывают в круглых скобках через запятую.
Если несколько различных объектов программы имеют одинаковый тип, то нет необходимости повторять описание типа. Вместо этого можно воспользоваться ссылкой на ранее описанный тип. Ссылка имеет следующий формат:
such_as <имя_ранее_описанного_объекта>
Ссылки возможны на типы ранее описанных констант и параметров ресурсов, представленных в объекте типов ресурсов. Допустимы цепочные ссылки, т.е. ссылки на объект, тип которого также описан ссылкой.
В языке используют следующие соглашения о соответствии типов: целый тип всегда соответствует целому, а вещественный – вещественному, независимо от диапазона допустимых значений (если он задан). Перечислимые типы считаются соответствующими, только если один из них описан ссылкой на тип другого, либо если они оба описаны ссылкой на тип третьего.
5) Арифметические и логические выражения
Арифметические выражения в данной версии языка могут быть целого, вещественного и перечислимого типов. Выражения целого и вещественного типов состоят из операндов, знаков арифметических операций и круглых скобок.
Операндами арифметического выражения служат:
· численные константы;
· символьные константы;
· глобальные переменные и функции;
· функции;
· последовательности;
· параметры ресурсов;
· параметры релевантных ресурсов;
· параметры образцов;
· параметры функций.
Возможность использования операндов зависит от контекста. Так, параметры функции можно использовать в арифметических выражениях лишь в теле алгоритмических функций, а параметры образца и параметры релевантных ресурсов - в теле образцов.
В выражениях целого и вещественного типа допустимы следующие арифметические операции: сложение (+), вычитание (-), умножение (*), деление (/). Порядок вычисления значения выражения определяется старшинством арифметических операций и скобками. Сначала выполняется вычисление значений в скобках, затем умножение и деление, и, наконец, сложение и вычитание.
Тип арифметического выражения определяется типами операндов, которые задаются пользователем при описании констант, функций, последовательностей, типов ресурсов, образцов. Выражение имеет целый тип, если все операнды имеют целый тип. Если в выражение входят только целые и вещественные операнды (хотя бы один), то выражение имеет вещественный тип. Выражения перечислимого типа состоят из единственного операнда перечислимого типа либо имени значения перечислимого типа. Арифметические операции над перечислимыми операндами не определены.
При вычислении значения арифметического выражения тип результата выполнения арифметической операции будет целым, если оба операнда целые. Если хотя бы один операнд имеет вещественный тип, то результат имеет вещественный тип. Результатом деления целых чисел является целое число - целая часть результата деления. Дробная часть отбрасывается. Например, результатом выражения 2 * (5 / 2) будет целое число 4, а выражения 2 * (5.0 / 2) - вещественное число 5.0.
При использовании в качестве операндов численных констант их необходимо отделять от стоящих перед ними знаков "+" или "-" по крайней мере, одним разделителем. В противном случае эти знаки воспринимаются не как знаки арифметических операций, а как знак численной константы.
Логические выражения состоят из стандартных логических функций, арифметических выражений, объединенных в пары операциями отношения, логических операций и квадратных скобок.
Операции отношения включают в себя:
· = - равно;
· <> - не равно;
· < - меньше;
· > - больше;
· <= - меньше или равно;
· >= - больше или равно.
Логические операции содержат: and - операция И; or - операция ИЛИ. При вычислении значения логического выражения сначала вычисляются значения арифметических выражений, затем результаты операций отношения и значения стандартных логических функций и в последнюю очередь выполняются логические операции. Оба арифметических выражения в операции отношения должны иметь один и тот же тип, либо одно должно быть вещественным, а второе - целым. Если одно из арифметических выражений в операции отношения имеет вещественный тип, то при выполнении операции отношения значение второго выражения также преобразуется к вещественному типу. Если оба арифметических выражения целого типа, то операция отношения выполняется над целыми операндами. Над выражениями перечислимого типа допустимы только операции "равно" и "не равно".
Порядок выполнения логических операций при вычислении выражения определяется старшинством и скобками. Сначала вычисляются значения в скобках, затем выполняются операции И, затем ИЛИ. При вычислении используется короткая схема, т.е. вычисляются значения не всех логических операндов, а только значения, необходимые для получения результата логической операции. Так, если первый операнд в операции ИЛИ имеет значение ИСТИНА, то независимо от значения второго операнда результат операции будет ИСТИНА, поэтому нет необходимости вычислять значение второго операнда. Аналогично, если в операции И первый операнд имеет значение ЛОЖЬ, то независимо от значения второго операнда значением операции будет ЛОЖЬ.
6) Синтаксис последовательностей
Последовательности выдают значение, которые определяется генератором псевдослучайных чисел с соответствующим распределением либо выбирается из числа значений, заданных при описании последовательности.
Описание последовательности в общем случае имеет вид:
Имя последовательности представляет собой простое имя. Имена должны быть различными для всех последовательностей и не должны совпадать с ранее определенными именами.
Тип значения последовательности - это один из возможных в языке типов данных. При описании типов значений последовательности возможны ссылки на типы параметров ресурсов и типы символьных констант.
В данной версии языка определены последовательности следующих типов:
· uniform - последовательность псевдослучайных чисел, распределенных по равномерному закону;
· exponential - последовательность псевдослучайных чисел, распределенных по экспоненциальному закону;
· normal - последовательность псевдослучайных чисел, распределенных по нормальному закону;
· enumerative - последовательность значений, перечисленных непосредственно в теле последовательности.
Значение базы генератора представляет собой целое число в диапазоне [-2147483647..2147483647]. Это значение может отсутствовать, в этом случае будет использовано значение, определенное в языке. Значения баз генераторов могут быть изменены в объекте прогона.
Последовательности типа uniform, normal и exponential не имеют тела.
Тело последовательности типа by_hist имеет следующий формат:
<границы_диапазона> <относительная_частота>
{ <границы_диапазона> <относительная_частота> }
Для целых и вещественных последовательностей границы диапазона указывают целыми либо вещественными численными константами, причем нижняя граница диапазона (за исключением первого диапазона) должна быть равна верхней границе предыдущего диапазона. Для перечислимых последовательностей задают не диапазон, а имя значения перечислимого типа.
Относительную частоту задают вещественной численной константой, она обозначает относительную частоту попадания значений последовательности в заданный интервал (относительную частоту появления заданного значения для перечислимых последовательностей). Сумма относительных частот для всех интервалов гистограммы не обязательно должна быть равна 1. Использование для задания границ диапазона и относительных частот символьных констант и выражений не допускается.
Значение последовательности типа by_hist вычисляется следующим образом. В начале в соответствии с относительными частотами определяется интервал гистограммы, затем конкретное значение получается как равномерно распределенное на этом интервале число. Для последовательностей с перечислимыми значениями по относительной частоте сразу определяется значение.
Тело последовательности типа enumerative имеет следующий формат:
Значение последовательности задают целой, либо вещественной численной константой или именем значения в соответствии с типом значений последовательности.
Значения последовательности типа enumerative заданы непосредственно в теле. Эти значения выдаются при вызовах последовательности в порядке их следования в описании. При первом обращении выдается первое значение, при втором - второе и так далее. После последнего значения выдается первое.
После определения описанным способом значения последовательности любого типа в случае, если задан допустимый диапазон значений последовательности, производится проверка попадания полученного значения в этот диапазон. Если значение меньше нижней границы, то оно становится равным нижней границе, если больше верхней, то равным верхней границе.
Все последовательности порождают независимые потоки псевдослучайных чисел. Изменением значений начальных баз генераторов могут быть получены различные реализации последовательности.
7) Типы ресурсов
Типы ресурсов определяют структуру глобальной базы данных программы (модели). Описание каждого типа ресурса имеет следующий формат:
$Resource_type <имя_типа> : <вид_ресурсов>
$Parameters
<описание_параметра> { <описание_параметра> }
$End
Вид ресурсов данного типа может быть одним из следующих:
· permanent - постоянные ресурсы; ресурсы этого вида всегда присутствуют в модели, они не могут быть уничтожены или созданы во время прогона;
· temporary - временные ресурсы; ресурсы этого вида могут во время прогона создаваться и уничтожаться при выполнении операций, правил и совершении нерегулярных событий.