Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Часть 4. Язык функционально-логического программирования FLOGOL

.pdf
Скачиваний:
21
Добавлен:
28.06.2014
Размер:
971.45 Кб
Скачать

4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ 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