Синтаксический анализ языка НОРМА. Разбор описания (работа 1)
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНЖЕНЕРНО-ФИЗИЧЕСКИЙ ИНСТИТУТ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Кафедра 22
Пояснительная записка к
КУРСОВОЙ РАБОТЕ
на тему:
"Синтаксический анализ языка НОРМА. Разбор описаний "
студента группы К9-02а
Жучкова Александра Викторовича
Научный руководитель:
Комиссия:
Оценка:
Москва 1996г.
1. ВВЕДЕНИЕ
Задание, полученное мной на УИР и КП в данном семестре являлось продолжением групповой работы, начавшейся в предыдуших семестрах, и состояло в следующем:
изучить раздел описаний языковых конструкций Нормы;
разработать структуры данных и алгоритмы для разбора описаний языка программирования Норма, с учетом специфики языка, а так же удобства написания функций, необходимых для последующей работы транслятора;
написать функции разбора раздела описаний;
написать некоторые рабочие функции оперирующие с областями
2. Общее описание языка Норма
Язык программирования Норма является декларативным (непроцедурным) языком и предназначен для спецификации численных методов решения задач математической физики. Изначально он был ориентирован на решение задач математической физики разностными методами, однако может быть использован для решения более широкого класса вычислительных задач.
Главная идея, положенная в основу языка Норма, заключается в том, что полученные специалистом в процессе решения прикладной задачи расчетные формулы почти непосредственно используются для ввода в вычислительную систему и проведения счета. Таким образом, язык Норма дает прикладному математику возможность сформулировать свою задачу в привычных для него терминах. Запись на языке Норма - это, по существу, строгая запись численных методов решения математической задачи, запись еще не алгоритмов, а просто расчетных формул и остальной необходимой информации.
Отметим, что в записи на Норме не требуется никакой информации о порядке счета, способах организации вычислительных (циклических) процессов. Порядок предложений языка может быть произвольным - информационные взаимосвязи будут выявлены и учтены при организации процесса счета транслятором. Эта возможность, конечно, увеличивает трудоемкость и сложность при компиляции текста программы, но разработчики языка сознательно пошли на это, чтобы сделать данный язык удобным для использования широким кругом специалистов-математиков, имеющих небольшой опыт работы на компьютере.
Выбор уровня языка Норма определяет характерную его черту - в этом языке нет необходимости вводить такие понятия, как оператор присваивания и возможность переприсваивания значений (типа х:=х+1) и операторы перехода. Наличие таких понятий в традиционных языках программирования объясняется необходимостью формулировки конкретного алгоритма с учетом вопросов экономии и распределения памяти, порядка выполнения операторов и т. п. Побочный эффект в языке Норма отсутствует по определению. Понятно, что многие из этих вопросов появляются снова на этапе синтеза рабочей программы. Однако, здесь они решаются автоматически по строгим правилам, гарантирующим правильность синтезируемой программы.
Непроцедурность языка Норма позволяет преодолеть еще одну трудность, связанную с распараллеливанием алгоритма при счете на ЭВМ, допускающих совмещение операций. Известные методы распараллеливания последовательных алгоритмов основаны на выявлении, при некоторых ограничениях, частей алгоритма, которые можно выполнять независимо, в соответствии с заданным критерием параллелизма - асинхронные вычисления, синхронные и т. п. Однако, выявление взаимосвязей в уже сформированном последовательном алгоритме является неестественной и трудной задачей, так как анализируемая формулировка, как правило, насыщена избыточными взаимосвязями (типа введения рабочих переменных , конкретных способах организации циклов и т. п.). Вообще говоря, ни откуда не следует, что последовательный алгоритм надо транслировать в параллельный, а не определять параллельный сразу по непроцедурной записи.
Эти свойства, и некоторые другие ограничения, позволяют строго обосновать разрешимость синтеза выходной программы, так как в достаточно общей постановке решение этой задачи приводит к значительным математическим трудностям - она может оказаться NP-полной, либо вообще неразрешимой. С другой стороны, исследования, связанные с разработкой и применением языка Норма показывают, что имеющиеся ограничения приемлимы с практической точки зрения.
3 Структура транслятора с языка Норма.
Транслятор с языка Норма сразу проектировался как многопроходный. На первом проходе на вход лексического анализатора поступает текст исходной программы (см. приложение 1), который преобразуется в последовательности лексем, объединенные в кванты*. Параллельно происходит начальное заполнение таблиц имен и констант, после этого эти таблицы из хеш-структур преобразуются в массивы. Это делается для максимального освобождения оперативной памяти перед следующими проходами, а так же для ускорения доступа, так как далее идет очень интенсивное обращение к этим таблицам. На втором проходе происходит сортировка этих квантов по определенным правилам. Отсортированный список квантов поступает на следующем проходе на вход синтаксического анализатора, который разбирает описания языковых конструкций, операторы ввода, операторы вывода, операторы присваивания и т.д. В результате работы синаксического анализатора заполняются множество рабочих таблиц: областей, условий и т.п. На следующем проходе по данным таблицам происходит определение информационных зависимостей между операторами, определяется порядок вычисления. Далее для не сильно связанных компонентов методом нахождения гиперплоскостей происходит распараллеливание отдельных фрагметов программы. После чего генерируется выходная фортран-программа.
Для обеспечения доступа к верхней памяти, а также для возможного свопинга практически все операции с оперативной памятью осуществляются с использованием библиотеки функций менеджера памяти, написанной сотрудниками института прикладной математики.
4 Описание и решение задачи.
4.1 Постановка задачи.
В программе, написанной на языке Норма могут встречаться следующие специфические объекты:
параметры областей, задающие в неявном виде границы диапазонов при описании областей;
индексы областей, которые задают как бы имена различным кординатным направлениям в областях.
индексы распределения, служащие для отображения двух индексных направлений индексного пространства области задачи на матрицу процессорных элементов (ПЭ) распределенной системы;
индексные конструкции, служащие для сокращения записи сложных индексных выражений;
внешние функции и разделы;
области;
скалярные величины и величины на области
(синтаксис смотри приложение 2).
Как видно из вышеперечисленного, наиболее важным и информативным объектом является описание области. Дейсвительно, и индексы и параметры области являются лишь вспомогательными понятиями, делающими описания областей более удобочитаемыми или более гибкими. Для величин, определенных на области, их области являются тем множеством, на котором они существуют. Понятие области введено в языке Норма для представления понятия индексного пространства. Область - это совокупность целочисленных наборов {i>1>,...,i>n>}, n>0, i>j>>0, j=1,...,n, каждый из которых задает координаты точки n-мерного индексного пространства. С каждым направлением (осью координат) n-мерного пространства задачи связывается уникальное имя - имя-индекса (имя оси координат индексного пространства). Следует отметить, что область определяет значения координат точек индексного пространства, а не значения расчетных величин в этих точках. Так же следует отметить то, что все множества должны быть конечны, т.к. конечно пространство памяти ЭВМ, на которое будут в последствии отображатся величины на области.
Разработчики языка Норма на основании опыта, накопленного ими при решении задач вычислительной математики, решили, что для решения большинства задач подобного класса достаточно ввести следующие разновидности областей:
прямоугольные;
диагональные;
условные.
В свете вышесказанного перед нами (группой разработчиков) встала задача напсания транслятора с языка Норма с использованием инструментальных средств языка программирования Си и библиотеки функций работы с оперативной памятью. Передо мной были поставлены задачи:
разработка структур для хранения данных, полученных в результате разбора описаний областей;
разработка алгоритмов и написание функций разбора описаний;
разработка алгоритмов для написания функций пересечения областей
4.2 Решение задачи. Выбор структуры данных
Проанализировав различия и сходство той информации, которую необходимо хранить для каждой разновидности области, мною, при согласовании с разработчиками языка и моими коллегами, были выбраны следующие структуры.(смотри приложение 4 ).
Во первых, главная таблица областей (далее просто таблица областей), в которой для всех областей хранится количество направлений (мерность множества), по каждому направлению имя индекса и значения левой и правой границ, тип области, ключ для поиска детальной информации в других таблицах. Решено было ввести четыре типа области: прямоугольная - она характерна тем, что проекцией на любую двумерную систему координат будет прямоугольник; диагональная - это область, границы которой по некоторым направлениям могут быть прямые под углом 45° к оси; положительно-условные - это часть родительской области, на которой логическое выражение, задающее эту область будет выдавать значение правда; отрицательно-условные - это то же, что и положительно-условные, только логическое выражение будет выдавать значение ложь. Получилось так, что таблица областей вышла неоднородной, так как могут существовать области с различным количеством направлений. Хранить эту таблицу в массиве с размером полей, расчитанным на максимально возможное количество направлений, я посчитал нерациональным. Была рассмотрена возможность реализации хранения на списках, но эта возможность мною тоже была отвергнута, потому что получился бы список с большим количеством мелких элементов, что затруднило бы работу менеджера памяти (которому на каждый такой элемент пришлось бы заводить рабочие структуры, что тоже использовало бы память), а так же увеличило бы время работы. Поэтому было решено хранить эти таблицы в одном большом буфере и иметь специальные функции, позволяющие производить запись и чтение из этого буфера. Этот способ экономен в использовании памяти (мало пустующего пространства), удобен менеджеру памяти (работает с одним блоком), достаточно быстрый доступ. Тем более что похожий механизм был ранее реализован моим коллегой при работе с таблицей имен на этапе лексического анализа, и он согласился реализовать эти функции.
Âî-âòîðûõ, òàáëèöà äèàãîíàëüíûõ îáëàñòåé, ãäå õðàíèòñÿ äåòàëüíàÿ èíôîðìàöèÿ, ïîçâîëÿþùàÿ ïîëíîñòüþ îõàðàêòåðèçîâàòü äèàãîíàëüíóþ îáëàñòü, à èìåííî: êîëè÷åñòâî äèàãîíàëüíûõ ïëîñêîñòåé, ïî êàæäîé äèàãîíàëüíîé ïëîñêîñòè èìåíà èíäåêñîâ è êîíñòàíòû ïåðåñå÷åíèÿ äèàãîíàëåé ñ îñüþ, îïðåäåëåííîé ïåðâûì èíäåêñîì. Íàïðèìåð, åñëè èíäåêñû ðîäèòåëüñêîé îáëàñòè íàõîäÿòñÿ â ïðåäåëàõ 1£ i £10 1£ j £5, а условие имеет вид i < j то построение записи в таблицу будет таким :
j j
c>2>
5
1 c>1>
1 10 i i
Так как получается схожая с таблицей областей картина, а именно, записи в таблице диагональных областей могут иметь различную длину, решено было использовать тот же механизм хранения информации.
В-третьих, таблица условных областей, в которой хранится номер положительно-условной области, отрицательно-условной области, родительской области, ключ для поиска условия в таблице условий. Так как поля данной таблицы однородны, то она легко хранится в структуре массива. В основном данная таблица была заведена с целью сохранения связи положительно- и отрицательно-условных областях, имеющих общую родительскую область. Это впоследствии облегчает проведение таких операций, как пересечение над условными областями.
В-четвертых, на основе механизма, использовавшегося для хранения таблицы областей, была создана таблица условий, в которой хранятся логические выражения, заданные при описании условных областей.
4.3 Разработка алгоритмов и реализация функций разбора описаний областей
В языке различается описание области - это именованная условная, прямоугольная или диагональная область, и использование области - синтаксически это имя-области или описание области без имени. Области используются в описаниях величин, определенных на области, при задании области вычисления в операторах ASSUME, в описания входных или выходных величин, при задании областей фактических параметров в вызовах разделов или функций, в функциях редукции.
Чтобы учесть эти два случая при описании области без имени я решил заводить новые имена в таблице имен и отождествлять их с этими областями. Для этого строится расширение уже существующей таблицы имен. При разборе мною был использовался метод прямого анализа. Разбор осуществляется последовательным сканирование цепочки лексем слева направо. По ходу сканирования происходит проверки как синтаксических конструкций, так и ряда семантических правил, при этом происходит постепенное накопление в рабочих структурах информации об объекте, которая в случае успешного окончания разбора заносится в таблицы общего назначения. Разбор описания области осуществляет функция razb_obl (см. приложение 3). Функция, путем нахождения “уникальных” лексем или их сочетаний, вызывает для разбора каждой разновидности области свою функцию (например, razb_multobl разбирает описание многомерной области). Затем каждая отдельная функция разбирает описание своей области и при успешном окончании заполняет нужные таблицы (областей, диагональных областей и т.д.), а так же таблицу имен. В случае неудачного разбора выдается сообщение об ошибке.
4.4 Разработка алгоритмов для фукций работы с областями
Помимо задания вычисляемого пространства для величины на области, понятие и описание области используются в Норме во многих местах. Например, в операторах FOR ASSUME или в операторах ввода и вывода. Очень часто необходимо произвести над областями проверку, является ли их пересечение пустым множеством или нет. Например, при определении информационных зависимостей между опреаторами и определением порядка вычислеий. В данном примере необходимо установить дает ли пересечение требуемой области S>треб > и
FOR B ASSUME X=F(Z,Y[i+1,j]...)
S>треб>
FOR C ASSUME Y=F(P,K[i-1,j]...)
области С пустое множество. Если дает, то данные операторы не связаны между собой, иначе второй оператор необходимо вычислить раньше первого.Пересечение областей я планирую проводить следующим образом. Для случая прямоугольных областей необходимо по каждому направлению сравнить верхние и нижние границы индексов. Для диагональных областей помимо сравнения диапазонов индексов необходимо аналогичным образом сравнивать диагональные диапазоны. Если мы имеем дело с условными областями то необходимо рассматривать два случая. Первый - это когда две эти области имеют общего (пускай не ближайшего) родителя. Тогда необходимо найти первого такого родителя и от него провести проверку, какие еще предки, положительно или отрицательно-условные, находятся на пути от этого родителя к данным областям, и если есть различия, то пересечение пусто, иначе нет. Это можно проиллюстировать с помощью представления условных областей в виде бинарного дерева, где в одну сторону идут положительно-условные области,
à â äðóãóþ îòðèöàòåëüíî-óñëîâíûå. Íà ðèñóíêå ïåðåñå÷åíèå äâóõ òåìíî çàêðàøåííûõ îáëàñòåé íå ïóñòî , à ïåðåñå÷åíèå òåìíî è ñâåòëî çàêðàøåííûõ - ïóñòî. Äðóãîé ñëó÷àé âîçíèêàåò, åñëè îáëàñòè íå èìåþò íè îäíîãî îáùåãî ïðåäêà (õîòÿ òàêîé ñëó÷àé î÷åíü ñòðàíåí â ñìûñëå ëîãèêè ïðîãðàììû). Òîãäà ìû ìîæåì ïðîâåðèòü íà ïåðåñå÷åíèå ñàìûõ ïåðâûõ ïðåäêîâ ýòèõ îáëàñòåé (îíè ÿâëÿþòñÿ ïðÿìîóãîëüíûìè). Åñëè îíè íå ïåðåñåêàþòñÿ, òî è óñëîâíûå íå ïåðåñåêàþòñÿ, èíà÷å ìû ñ÷èòàåì, ÷òî îíè ìîãóò ïåðåñå÷üñÿ. |
Помимо пересечения областей часто требуется найти объединение. Эту задачу аналитическими методами решить очень сложно, поэтому планируется реализовать ее методом перебора
5. ЗАКЛЮЧЕНИЕ
В результате проделанной работы мною были достигнуты следующие цели:
разработаны сновные структуры для хранения данных, полученных в результате разбора описаний областей;
разработаны алгоритмы и написаны функции разбора описаний областей;
разработаны алгоритмы для написания функций пересечения областей
Некоторые функции находится на стадии доработки и отладки. Завершение работы над ними планируется в следующем семестре. Задание на УИР и КП выполнил практически полностью.
Список литературы:
А.Н. Андрианов, К.Н. Ефимкин, И.Б. Задыхайло, Н.В. Поддерюгина "Язык Норма"
А.Н. Андрианов, К.Н. Ефимкин, И.Б. Задыхайло "Непроцедурный язык Норма и методы его реализации"
А.Б. Бугеря "Реализация математических функций языка Норма для распределенных высислительных систем"
Ф.Льюис “Теоретические основы проектирования компиляторов”
* Квант - семантически законченный фрагмент текста программы(например, описание области)
Ïðèëîæåíèå1 Ñòðóêòóðà òðàíñëÿòîðà ñ ÿçûêà ïðîãðàììèðîâàíèÿ Íîðìà
Âõîä: Äèàãíîñòèêà, îøèáêè
Èñõîäíûé òåêñò Ëåêñè÷åñêèé è ÷àñòè÷íî Ñèíòàêñè÷åñêèé àíàëèç
ïðîãðàììû + ñèíòàêñè÷åñêèé àíàëèç è ÷àñòè÷íî ñåìàíòè÷åñêèé
îïöèè êîìàíäíîé Âûäåëåíèå Ãðóïïðèðîâêà àíàëèç îïèñàíèé è îïåðàòîðîâ
ñòðîêè ëåêñåì ëåêñåì çàïîëíåíèå âñåõ òàáëèö
íà÷àëüíîå çàïîëíåíèå òàáëèö
Èíòåðôåéñíûå ôóíêöèè
ÒÀÁËÈÖÛ ÒÀÁËÈÖÛ
(èìåí, êîíñòàíò, (Èìåí, êîíñòàíò,
êëþ÷åâûõ ñëîâ îáëàñòåé,
èíäåêñîâ è ò. ï.)
ÌÅÍÅÄÆÅÐ ÏÀÌßÒÈ
Âûõîä:
Òåêñò Ãåíåðàöèÿ Îðãàíèçàöèÿ Ïîñòðîåíèå ãðàôà
ïðîãðàììû Ôîðòðàí ïàðàëëåëüíûõ èíôîðìàöèîííûõ
íà Ôîðòðàíå ïðîãðàììû âû÷èñëåíèé çàâèñèìîñòåé îïåàòîðîâ
ïðîãðàììû
Ïðèëîæåíèå 2 Ñèíòàêñèñ îïèñàíèé ÿçûêà Íîðìà
Íîòàöèÿ ñèíòàêñèñà
 íîòàöèè ñèíòàêñèñà, èñïîëüçóåìîé â äàííîì îïèñàíèè, ïðèìåíÿåòñÿ ðàñøèðåííàÿ ôîðìà Áýêóñà-Íàóðà.
Îáîçíà÷åíèÿ {A}*,{A}+,{A>1>...,A>n>},[A] îçíà÷àþò
-
{A}*
::=
Æ|A|AA...
{A}+
::=
A|AA...
{A>1>...,A>n>}
::=
A>1>|...|A>n>
[A]
::=
Æ|A
ãäå A-íåêîòîðûé îáúåêò ÿçûêà, Æ- ïóñòî, |- âûáîð îäíîé èç àëüòåðíàòèâ, ...- è òàê äàëåå.
Ïðè îïðåäåëåíèè ïðàâèë ÿçûêà ñèíòàêñè÷åñêèå ïîíÿòèÿ íàáèðàþòñÿ êóðñèâîì, à ñëîâà è ëèòåðû, âîñïðèíèìàåìûå áóêâàëüíî, ïðÿìûì øðèôòîì. Àëüòåðíàòèâíûå êîíñòðóêöèè ïåðå÷èñëÿþòñÿ, êàê ïðàâèëî, â ñòîëáèê, êàæäàÿ àëüòåðíàòèâà íà îòäåëüíîé ñòðîêå.
Èíîãäà èñïîëüçóþòñÿ ÷àñòè÷íî ïîä÷åðêíóòûå îáîçíà÷åíèÿ ñèíòàêñè÷åñêèõ êîíñòðóêöèé, íàïðèìåð, èìÿ-ìíîæåñòâà. Ñèíòàêñè÷åñêè ýòî îáîçíà÷åíèå èäåíòè÷íî îáîçíà÷åíèþ èìÿ, à ïîä÷åðêíóòàÿ ÷àñòü êîíñòðóêöèè íåñåò äîïîëíèòåëüíóþ ñåìàíòè÷åñêóþ èíôîðìàöèþ.
Îáîçíà÷åíèå ñïèñîê-ýëåìåíò çàìåíÿåò íåïóñòîé ñïèñîê ýëåìåíòîâ, ïåðå÷èñëåííûõ ÷åðåç çàïÿòóþ:
ñïèñîê-ýëåìåíò
ýëåìåíò{,ýëåìåíò}*
 êàæäîì êîíêðåòíîì ñëó÷àå îïðåäåëåíèå ýëåìåíòà ïðèâîäèòñÿ.
Îïèñàíèÿ
îïèñàíèå:
îïèñàíèå-îáëàñòè
îïèñàíèå-èíäåêñîâ-îáëàñòåé
îïèñàíèå-ñêàëÿðíûõ-âåëè÷èí
îïèñàíèå-âåëè÷èí-íà-îáëàñòè
îïèñàíèå-èíäåêñíîé-êîíñòðóêöèè
îïèñàíèå-èíäåêñîâ-ðàñïðåäåëåíèÿ
îïèñàíèå-ïàðàìåòðîâ-îáëàñòè
îïèñàíèå-âõîäíûõ
îïèñàíèå-âûõîäíûõ
îïèñàíèå-âíåøíèõ
Îïèñàíèå îáëàñòåé
îïèñàíèå-îáëàñòè:
îïèñàíèå-áåçóñëîâíîé-îáëàñòè
îïèñàíèå-óñëîâíîé-îáëàñòè
îïèñàíèå-áåçóñëîâíîé-îáëàñòè
îïèñàíèå-ïðÿìîóãîëüíîé-îáëàñòè
îïèñàíèå-äèàãîíàëüíîé-îáëàñòè
îáëàñòü
íîâàÿ îáëàñòü áåç èìåíè
èìÿ-îáëàñòè
áåçóñëîâíàÿ-îáëàñòü
íîâàÿ îáëàñòü áåç èìåíè
èìÿ-áåçóñëîâíîé-îáëàñòè
èìÿ-îáëàñòè
èìÿ-áåçóñëîâíîé-îáëàñòè
èìÿ-óñëîâíîé-îáëàñòè
èìÿ-áåçóñëîâíîé-îáëàñòè
èìÿ-ïðÿìîóãîëüíîé-îáëàñòè
èìÿ-äèàãîíàëüíîé-îáëàñòè
Îïèñàíèå ïàðàìåòðîâ îáëàñòè
îïèñàíèå-ïàðàìåòðîâ-îáëàñòè
DOMAIN PARAMETERS ñïèñîê-çíà÷åíèå
çíà÷åíèå
èìÿ-ïàðàìåòðà-îáëàñòè=öåëîå áåç çíàêà
Îïèñàíèå èíäåêñîâ îáëàñòåé
îïèñàíèå-èíäåêñîâ-îáëàñòåé
INDEX ñïèñîê-èìÿ-èíäåêñà
Îïèñàíèå èíäåêñîâ ðàñïðåäåëåíèÿ
îïèñàíèå-èíäåêñîâ-ðàñïðåäåëåíèÿ
DISTRIBUTION INDEX èìÿ-èíäåêñà = ïðîñòîé-äèàïàçîí
[èìÿ-èíäåêñà=ïðîñòîé-äèàïàçîí]
ïðîñòîé-äèàïàçîí
öåë-êîíñòàíòà[..öåë-êîíñòàíòà]
Îïèñàíèå èíäåêñíîé êîíñòðóêöèè
îïèñàíèå-èíäåêñíîé-êîíñòðóêöèè
MACRO INDEX èìÿ-èíäåêñíîé-êîíñòðóêöèè
[ñïèñîê-ÿâíîå-èíä-âûðàæåíèå]
ÿâíîå-èíä-âûðàæåíèå
èìÿ-èíäåêñà[{+,-}êîíñò-âûðàæåíèå]
èìÿ-èíäåêñà = êîíñò-âûðàæåíèå
èìÿ-èíäåêñà = èìÿ-èíäåêñà [{+,-}êîíñò-âûðàæåíèå]
Îïèñàíèå âíåøíèõ èìåí
îïèñàíèå-âíåøíèõ-èìåí
EXTERNAL FUNCTION ñïèñîê-èìÿ-ôóíêöèè [òèï]
EXTERNAL PART ñïèñîê-èìÿ-ðàçäåëà
Îïèñàíèå îáëàñòåé
îïèñàíèå-îáëàñòè
îïèñàíèå-áåçóñëîâíîé-îáëàñòè
îïèñàíèå-óñëîâíîé-îáëàñòè
îïèñàíèå-áåçóñëîâíîé-îáëàñòè
îïèñàíèå-ïðÿìîóãîëüíîé-îáëàñòè
îïèñàíèå-äèàãîíàëüíîé-îáëàñòè
îáëàñòü
íîâàÿ îáëàñòü áåç èìåíè
èìÿ-îáëàñòè
áåçóñëîâíàÿ-îáëàñòü
íîâàÿ îáëàñòü áåç èìåíè
èìÿ-áåçóñëîâíîé-îáëàñòè
èìÿ-îáëàñòè
èìÿ-áåçóñëîâíîé-îáëàñòè
èìÿ-óñëîâíîé-îáëàñòè
èìÿ-áåçóñëîâíîé-îáëàñòè
èìÿ-ïðÿìîóãîëüíîé-îáëàñòè
èìÿ-äèàãîíàëüíîé-îáëàñòè
Îïèñàíèå áåçóñëîâíîé îáëàñòè
îïèñàíèå-ïðÿìîóãîëüíîé-îáëàñòè
ìíîãîìåðíàÿ-îáëàñòü
íîâàÿ-îáëàñòü
ìíîãîìåðíàÿ-îáëàñòü
îäíîìåðíàÿ-îáëàñòü
[ èìÿ-ìíîãîìåðíîé-îáëàñòè ]: ( îáëàñòü-ïðîèçâåäåíèå )
îáëàñòü-ïðîèçâåäåíèå
ñîñòàâëÿþùàÿ-îáëàñòü { ; ñîñòàâëÿþùàÿ-îáëàñòü }+
ñîñòàâëÿþùàÿ-îáëàñòü
ìíîãîìåðíàÿ-îáëàñòü
èìÿ-ïðÿìîóãîëüíîé-îáëàñòè
îäíîìåðíàÿ-îáëàñòü
[ èìÿ-îäíîìåðíîé-îáëàñòè ] : ( èìÿ-èíäåêñà = çíà÷åíèå )
çíà÷åíèå
äèàïàçîí
êîíñò-âûðàæåíèå
äèàïàçîí
êîíñò-âûðàæåíèå .. êîíñò-âûðàæåíèå
íîâàÿ-îáëàñòü
[èìÿ-íîâ-îáëàñòè :] íîâàÿ-îáëàñòü-áåç-èìåíè
íîâàÿ-îáëàñòü-áåç-èìåíè
èìÿ-áåçóñë-îáëàñòè / ñïèñîê-ìîäèôèêàöèÿ
ìîäèôèêàöèÿ
èìÿ-èíäåêñà=çíà÷åíèå
èìÿ-îäíîìåðíîé-îáëàñòè {{+,-} ôóíêöèÿ-ãðàíèö}+
ôóíêöèÿ-ãðàíèö
LEFT (êîíñò-âûðàæåíèå)
RIGHT (êîíñò-âûðàæåíèå)
èìÿ-ïðÿìîóãîëüíîé-îáëàñòè
èìÿ-îäíîìåðíîé-îáëàñòè
èìÿ-ìíîãîìåðíîé-îáëàñòè
èìÿ-íîâ-îáëàñòè
îïèñàíèå-äèàãîíàëüíîé-îáëàñòè
èìÿ-äèàãîíàëüíîé-îáëàñòè :
èìÿ-áåçóñëîâíîé-îáëàñòè / ñïèñîê-óñëîâèå-íà-èíäåêñ
Îïèñàíèå óñëîâíîé îáëàñòè
îïèñàíèå-óñëîâíîé-îáëàñòè
èìÿ-óñëîâíîé-îáëàñòè , èìÿ-óñëîâíîé-îáëàñòè:
èìÿ-îáëàñòè / óñëîâèå-íà-îáëàñòü
Îïèñàíèå âåëè÷èí
îïèñàíèå-ñêàëÿðíûõ-âåëè÷èí
VARIABLE ñïèñîê-èìÿ-ñêàëÿðà [òèï]
îïèñàíèå-âåëè÷èí-íà-îáëàñòÿõ
VARIABLE ñïèñîê-îïðåäåëåíèå-âåëè÷èí-íà-îáëàñò [òèï]
îïðåäåëåíèå-âåëè÷èí-íà-îáëàñòè
ñïèñîê-èìÿ-âåëè÷èíû-íà-îáëàñòè
DEFINED ON áåçóñëîâíàÿ-îáëàñòü
òèï
{REAL , INTEGER , DOUBLE}
Приложение 4 Схема информационных таблиц областей.
ТАБЛИЦА ОБЛАСТЕЙ
-
2
i
1
5
j
10
40
...
1
1
k
0
100
...
...
...
...
3
5
j
5
15
t
1
50
...
2
....
...
...
...
...
...
...
...
...
Таблица условий
j c>1> c>2 > i |
Eps>1/2*(i-j)... |
Òàáëèöà äèàãîíàëüíûõ îáëàñòåé
-
2
i j c>1> c>1>
...
...
...
...
Таблица условных областей
-
25
23
30
1
...
...
...
...