Часть 4. Язык функционально-логического программирования FLOGOL
.pdf4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
специфицированы – аналогично тому, как специфицируются сами опи-
сываемые отношения, а также могут быть заданы их значения по умол-
чанию, причем все параметры, номера которых перечислены внутри од-
них уголковых кавычек в форме списка натуральных значений, полу-
чают одно и то же значение по умолчанию (это не совсем точно, так как повторное задание значения одного и того же параметра понимается как продолжение его задания через операцию объединения). Номер пара-
метра может быть опущен – если он имеет номер ноль в самом начале описания или является непосредственно следующим за последним ука-
занным параметром в предшествующем списке номеров. Если при опи-
сании объекта значение некоторого параметра по умолчанию не задано,
то в качестве значения по умолчанию принимается пустое отношение.
При вызове параметризованного домена или отношения после его иден-
тификатора в квадратных скобках могут быть заданы значения только его некоторых параметров, для остальных будет выбраны их значения по умолчанию. При этом действуют соглашения о номерах параметров и повторных заданиях их фактических значений, аналогичные тем, что были приняты выше для формальных параметров. В любых реляцион-
ных выражениях в составе правых частей определений объектов могут использоваться и имена параметров всех внешних доменов, в которые входит рассматриваемое определение. Для таких параметров внутри уголковых кавычек перед номером параметра через разделитель-точку указывается его индекс вхождения, характеризующий разность уровней вложенности в доменной структуре места вызова и места описания объ-
екта, параметр которого вызывается. Можно считать, что индекс вхож-
дения параметра может быть опущен, только если он имеет значение ноль.
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 11
4.ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
9.Домены и отношения, в общем случае, имеют квалифицированные имена, отражающие иерархическую структуру модуля. Полностью ква-
лифицированное имя предполагает задание индексов и, возможно, фак-
тических параметров не только для самого интересующего нас объекта,
но и для всей цепочки охватывающих его описание доменов, возможно,
вплоть до самого внешнего, т.е. некоторого модуля в целом, видимого из точки вызова. Для записи квалифицированных имен используется обычная точечная нотация. Если цепочка имен обрывается, не дойдя до имени модуля, то это означает, что, либо при описании самого внешне-
го из этих имен был использован список импортируемых контекстов
(см. синтаксическое понятие Импорт), либо речь идет о тех же индек-
сах и фактических значениях параметров, при которых осуществлялся вызов рассматриваемого квалифицированного имени. В предельном ва-
рианте для второго случая использование вместо имени отношения символа @ означает, что имеет место прямое рекурсивное обращение,
т.е. вызывается само определяемое отношение (при определении доме-
нов этот символ не используется). Первый же случай предполагает, что при определении объекта, домена или отношения, был задан список импортируемых контекстов, записываемый через разделитель WITH
после определяемого имени вместе, возможно, с его индексами и пара-
метрами, и позволяющий не указывать в определении префиксные ча-
сти некоторых квалифицированных имен, достраивая их выбором одно-
го из импортируемых контекстов. Если при выборе возникает неодно-
значность, то конфликт разрешается в пользу более глубокого контек-
ста, если один из контекстов является префиксом другого, и в пользу указанного в списке раньше – для остальных случаев конфликтных си-
туаций
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 12
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
10.В языке FLOGOL используется несколько видов идентификаторов,
что облегчает лексический анализ исходных текстов. Ключевые слова,
которые наряду со спецзнаками играют роль как встроенных в синтак-
сис языка ограничителей и разделителей, так и звеньев связок, которые может ввести программист непосредственно в программе для определя-
емых им отношений, строятся из заглавных букв, причем не менее чем из двух. Имена доменов и отношений, а также операторные переменные сверток строятся из заглавных и строчных букв и цифр с учетом следу-
ющих ограничений: первый символ – заглавная буква, две заглавные буквы не встречаются подряд. Имена точек сетей при описании отно-
шений как графиков, простые и индексированные, – идентификаторы,
которые строятся из строчных букв, цифр и символа сцепления.
11.Все выражения в языке FLOGOL построены по единому шаблону
Выр с использованием четырех параметров. Нулевой параметр задает индивидуальные формы первичного выражения. К общим формам пер-
вичных выражений для всех типов выражений относятся сгруппирован-
ные с помощью круглых скобок произвольные выражения соответ-
ствующего типа и CASE-конструкция, в которой выбор варианта зна-
чения выражения управляется значением арифметического выражения
– ключа. Первичное выражение может иметь несколько префиксов, ко-
торые задаются параметром с номером 1, и суффиксов, которые зада-
ются параметром с номером 3. Кроме того, к префиксам относится свертка по любому инфиксу, задаваемому параметром с номером 2 (ес-
ли для соответствующего типа выражений используется единственный инфикс, то в конструкции свертки он может не указываться), с опера-
торной переменной, пробегающей последовательность натуральных значений, определяемую конструкцией СписЗнач. Произвольное выра-
жение – это либо цепочка соединенных инфиксами первичных выраже-
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 13
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
ний, либо условная конструкция, управляемая значением логического выражения. Если ELSE-часть условной конструкции опущена, то вы-
бирается стандартное значение для соответствующего типа выражений
(ноль – для арифметических выражений, пустое отношение – для реля-
ционных выражений, и т.д.). По этому общему шаблону построены:
арифметические выражения (АрВыр), списки натуральных значений
(СписЗнач), задающие значения операторных переменных в свертках,
множества натуральных значений (МножЗнач) ключей в CASE–
конструкциях, логические выражения (ЛогВыр), применяемые при по-
строении условных конструкций, реляционные выражения (РелВыр), с
помощью которых задаются отношения и параметры объектов, термы
(Терм) и логические формулы (Формула), используемые при определе-
нии отношений в форме графиков, списки индексов (СпИнд), предна-
значенные для конструирования индексированных имен объектов и их подстановочных параметров, списки формальных параметров
(СпФормПар) объектов описания, используемые при задании квалифи-
цированных имен списки фактических значений параметров
(СпФактПар), и, наконец, выражения для определения доменов (Дом-
Выр), которые далее будут рассмотрены более подробно.
Арифметические выражения играют особую роль в языке. Они ис-
пользуются
-для задания значений индексов объектов и номеров параметров в описаниях и при вызове (в квалифицированных именах доменов и отношений);
-при спецификации описываемых отношений и параметров объектов для уточнении их арностей;
-для управления базовыми структурами всех типов выражений: а) в
CASE-конструкции для определения значения ключа и задания
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 14
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
множеств значений ключа для отдельных альтернатив при выборе варианта, б) в операторах свертки для определения списка значений операторной переменной, в) в логических выражениях, управляю-
щих выбором альтернатив в условных (IF-) конструкциях;
-для построения индексированных имен точек сетей при определе-
нии отношений в форме графиков.
При построении арифметических выражений в качестве первичных
выражений могут выступать:
-числовые константы,
-вызовы библиотечных функций с натуральными аргументами и натуральными значениями,
-имена отношений с префиксом « » и суффиксом « », обознача-
ющие, соответственно, количества выходов и входов этих отноше-
ний,
-имена операторных переменных с натуральными значениями, вве-
денных в охватывающих рассматриваемое арифметическое выраже-
ние операторах свертки.
Вкачестве первичных логических выражений используются цепочки арифметических выражений, связанных операциями сравнения («равно», «не равно», «больше», «больше или равно», «меньше или равно», «мень-
ше»). Набор операций – отрицание, конъюнкция, дизъюнкция, сумма по модулю 2.
Реляционные выражения строятся с помощью символов унарной опе-
рации обращения отношения (~) и бинарных операций: последовательной
( ) и параллельной ( # ) композиции, объединения ( ) и пересечения ( ).
Первичные реляционные выражения – имена видимых отношений, символ
@, обозначающий само определяемое отношение, имена подстановочных параметров охватывающих доменов и определяемого отношения, графики
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 15
4.ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
–особая форма определения направленных отношений, в которой исполь-
зуются еще два типа выражений – термы и формулы.
Первичные термы – пустой терм, имена точек сети, возможно, индек-
сированные, и вызовы представляющих сорта элементов сети отношений,
выходные значения которых являются компонентами значения терма. Ис-
пользуются только символы двух бинарных ассоциативных операций –
конкатенации ( , ) и альтернативы ( | ).
Первичные формулы – цепочки термов, связанные знаками операций
«равно» и «не равно», или вызовы отношений с нулевым количеством вы-
ходов. Для композиции формул используются знаки операций конъюнкции и дизъюнкции. Предполагается, что встречающиеся в термах и формулах простые и индексированные имена точек сети связаны в рамках определе-
ния графика кванторами существования.
Для реляционных выражений значениями используемых в шаблоне Выр параметров с номерами 1, 2 и 3, помимо встроенных в язык символов операций композиции отношений, могут быть звенья описанных програм-
мистом связок произвольной арности. Связка может быть введена как единственная или как альтернативная форма вызова определяемого отно-
шения. Пусть |
0 _ 1 _..._ n _ n 1 – n -арная связка, в которой некоторые |
из звеньев i |
могут быть пустыми (символ « _ » обозначает операндное |
место). В самом определении операндам соответствуют формальные пара-
метры с номерами 0,1,... ,(n 1) . Введем следующие соглашения:
1)как уже упоминалось, для упрощения грамматического разбора син-
таксически звенья связок определены так, что они не совпадают с именами доменов, отношений и точек сетей в графиках, а также с опе-
раторными переменными; возможность неоднозначности грамматиче-
ского разбора из-за взаимных конфликтов и конфликтов со встроен-
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 16
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
ными в язык ключевыми словами контролируется по мере введения новых связок автоматически;
2)в случае n 0 0 – не пусто, а 1 – пусто; единственное звено такой связки называется константой;
3)звено 0 синтаксически рассматривается как префикс (параметр шаблона Выр с номером 1), звено n 1 – как суффикс (параметр шаблона Выр с номером 3), а остальные звенья – как инфиксы (пара-
метр шаблона Выр с номером 2);
4)пустой инфикс при грамматическом разборе рассматривается как би-
нарная связка наивысшего возможного приоритета; в остальных слу-
чаях при синтаксическом анализе выражений между непустыми зве-
ньями |
i |
и i 1 |
последние рассматриваются как скобки; |
5) если |
0 |
и n 1 |
одновременно не пусты, то для таких связок приори- |
тет не задается; |
|
6)для связок, в которых 0 или n 1 – пустые звенья, при описании связки (кроме описания констант, n 0 ) должен быть задан ее прио-
ритет в виде целой константы без знака. При сравнении приоритетов это константа рассматривается как дробная часть правильной дроби,
что всегда позволяет вводить новые приоритеты, не меняя шкалу уже введенных ранее приоритетов. В случае если первый или, соответ-
ственно, последний операнд связки имеет тот же приоритет, что и са-
ма связка, учитывается признак предпочтения – левого «>» или право-
го «<», задаваемый при определении связки, а если этот признак не задан, то предпочтение может быть выбрано компилятором произ-
вольно. Например, если для связки «_-_» задано предпочтение слева,
а для «_+_» – не задано, то возможны четыре варианта разбора выра-
жения |
a b c d e : |
(((a (b c)) d) e) , |
((((a b) c) d) e), |
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 17
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
((a ((b c) d )) e) , (a (((b c) d) e)) . Встроенные в язык би-
нарные связки, используемые для построения различных типов выра-
жений, перечислены в таблице 4.1 в порядке уменьшения приоритетов Определение домена справа от знака равенства предполагает в общем
случае задание двух доменных выражений, именуемых в описании син-
таксиса FLOGOL а как ДомВыр, ограниченных справа ключевым сло-
вом END и разделенных ключевым словом WHERE (аналогичная конструкция используется и при определении модулей программы.
Первичными элементами доменных выражений являются элементы опи-
сания – отношения, вводимые непосредственно в домене (модуле), и
вложенные (внутренние) домены. В качестве единственного инфикса
(префиксы и суффиксы не используются) в доменных выражениях при-
меняется знак точки с запятой, который интерпретируется как объеди-
нение множеств описываемых объектов.
12.При внутренних определениях отношений (во вложенных доменах)
имеется возможность наследования ранее действовавшего определения отношения с тем же именем (т.е. с тем же идентификатором и тем же набором индексов). Если в качестве разделителя между именем отноше-
ния (левой частью определения) и реляционным выражением (правой частью определения) используется комбинация символов « », где –
встроенный в язык или введенный программистом инфикс (звено) би-
нарной связки, |
то определение R E понимается как уравнение |
||||
R R |
|
E , где |
R |
|
– определение имени R , действовавшее в точке опи- |
|
|
сания домена, в котором непосредственно находится рассматриваемое определение R E . Если во внешних доменах имя R не определя-
лось, то предполагается, что R .
13.В языке допускаются две формы определений отношений и доменов – явных и виртуальных. Для первых в качестве разделителя между левой и
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 18
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
правой частями определения используется одиночный знак равенства
« » (или сочетание « »), а для вторых – удвоенный « » (или соче-
тание « »). Имена отношений и доменов в правой части явного определения имени интерпретируются в точке описания, а виртуального
– в точке конкретного вызова имени – левой части определения (с уче-
том действовавших в точке описания значений операторных перемен-
ных сверток). Напомним, что «видимым», т.е. действующим определе-
нием имени при его вызове является то, которое находится в том же до-
мене или в ближайшем внешнем по отношению к точке вызова домене, в
котором это имя описано.
14.Для оптимизации процессов вычислений может дополнительно исполь-
зоваться известная программисту информация об определяемых отно-
шениях. Эта информация должна быть сформулирована в форме реля-
ционных выражений, которые интерпретируются как пустые отношения при любых допустимых интерпретациях терминальных имен отноше-
ний. Синтаксически такие выражения вводятся как правые части обыч-
ного вида определений имен, возможно, индексированных, с ключевым словом EMPTY вместо идентификатора имени отношения.
В заключение отметим, что синтаксис языка описан в форме обоб-
щенных диаграмм Вирта, более подробно описанные в следующем пара-
графе. Описание синтаксиса языка с помощью диаграмм Вирта есть не что иное, как система некоторого вида уравнений относительно синтаксиче-
ских переменных (грамматических понятий, или, иначе, нетерминальных символов языка). Минимальное решение этой системы уравнений пред-
ставляет множества слов, соответствующие этим понятиям в определяе-
мом языке. При построении такой системы уравнений могут быть исполь-
зованы любые из средств схемной надстройки, примененных для построе-
ния самого языка FLOGOL , что позволяет обеспечить более строгое син-
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 19
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
таксическое описание языка. При этом возникает возможность на уровне синтаксического определения языка учесть обычно имеющие место семан-
тические ограничения, что, как правило, невозможно при применении бо-
лее простых средств описания синтаксиса, равносильных контекстно-
свободным грамматикам.
4.3.Синтаксис языка FLOGOL .
Как уже было ранее сказано, синтаксис языка FLOGOL описан с по-
мощью обобщенных диаграмм Вирта. Из всего разнообразия средств схемной надстройки, которые используются в самом языке FLOGOL для определения отношений, в обобщенных диаграммах Вирта мы допускаем только задание параметризованных диаграмм. Вызовы таких диаграмм с некоторыми фактическими значениями подстановочных параметров могут быть элементами других, в том числе и параметризованных, диаграмм.
Диаграмма, определяющая параметризованное синтаксическое понятие с именем XX , может использовать блоки нескольких видов:
овальные блоки для представления терминалов (лексем),
обычные прямоугольные блоки для представления вызовов непара-
метризованных синтаксических понятий,
прямоугольные блоки с отчеркнутыми слева и справа полями для представления вызовов параметризованных синтаксических поня-
тий вида YY[a1,...], где YY – имя вызываемого понятия, а a1,... –
отдельные грамматические понятия или слова в терминальном алфавите (либо множества понятий и слов) – фактические значе-
ния параметров. Если такой вызов и есть вся правая часть опреде-
ления грамматического понятия, то вместо диаграммы допускает-
ся непосредственное задание соответствующего уравнения;
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 20