Часть 4. Язык функционально-логического программирования FLOGOL
.pdf4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
прямоугольные блоки для представления вызовов формальных па-
раметров определяемого синтаксического понятия с указанием имени соответствующего параметра в виде « i », где i – номер параметра,
специальный блок с символом @ , обозначающий рекурсивный вы-
зов самого определяемого параметризованного синтаксического понятия (с его формальными параметрами в качестве фактиче-
ских значений).
На рис. 4.2 представлены обобщенные диаграммы Вирта, определяю-
щие синтаксис исходных текстов модулей FLOGOL -программы. При описании синтаксиса, как правило, используются сокращенные имена син-
таксических понятий, расшифровка которых приведена ниже.
Ид – идентификаторы доменов, отношений, параметров сверток и библиотечных арифметических функций; начинаются с заглавной буквы и не содержат подряд двух и более заглавных букв. Вариант Ид, начинаю-
щийся с символа сцепления, используется только в реляционных выраже-
ниях и только для объявляемых имен.
Ид1 – идентификаторы свободных переменных, используемых при определении отношений как графиков; строятся из строчных букв и цифр,
в качестве разделителя может использоваться знак сцепления; локализова-
ны внутри определения графика.
Звено – компоненты вводимых программистом связок; строятся из не менее чем двух заглавных букв (как ключевые слова) или из спецзнаков,
исключая основные разделители и скобки.
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 21
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
Связка – чередующаяся последовательность звеньев и операндных мест, обозначаемых знаком сцепления; для всех связок, кроме закрытых,
перед определением самой связки указывается ее приоритет.
Модуль
MODULE Ид 7. Ид 6.
4.
5. Домен
Домен
ДомВыр WHERE ДомВыр 8. EN
ДомВыр=Выр[ЭлемОпис,,{;}]
Импорт
WITH ИмяДом
,
ИмяДом = КвИмя
Рис. 4.2 . Синтаксис языка FLOGOL.
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 22
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
Цифра={0,1,2,3,4,5,6,7,8,9,0}
НатЧис
Цифра Ид
_ ЗаглБуква
СтрБуква
Цифра
Ид1
СтрБуква
Цифра
_
Звено
ЗаглБуква ЗаглБуква
СпецЗнак
Связка
Звено _
Приор
_ Звено
Рис. 4.2. Синтаксис языка FLOGOL (продолжение 1).
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 23
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
Приор
+
[ НатЧис ]
-
Выр |
|
|
|
|
|
IF |
ЛогВыр |
THEN |
@ |
ELSE |
@ |
|
|
«2» |
|
|
|
«1» |
|
|
|
|
«3» |
( |
«2» |
Ид |
= |
СписЗнач |
) |
«0»
( |
@ |
) |
CASE АрВыр OF
МножЗнач |
: |
@ |
ELSE |
@ |
END |
|
; |
|
|
|
|
Рис. 4.2. Синтаксис языка FLOGOL (продолжение 2).
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 24
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
АрВыр=Выр[ПервАр,, { ,DIV,MOD,+,- }]
ПервАр
Ид ( АрВыр )
,
ИмяОтн
ИмяОтн
НатЧис
ЛогВыр=Выр[ПервЛог,{NOT},{AND,XOR,OR}]
ПервЛог
АрВыр ОпСрав АрВыр
ОпСрав ={<,>,=, , , }
МножЗнач = Выр[ПервМнСп,,{ ,\, , }]
СписЗнач = Выр[ПервМнСп,,{,}]
ПервМнСп
АрВыр .. АрВыр
Рис. 4.2. Синтаксис языка FLOGOL (продолжение 3).
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 25
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
ИмяОтн
@
КвИмя
« НатЧис . АрВыр »
КвИмя |
|
|
|
Имя |
|
|
. |
|
Имя |
|
|
СпИнд |
Ид |
СпПарам |
СпИнд |
|
|
[ |
Выр[АрВыр,,{,}] |
] |
СпПар
[ |
Выр[ЭлемСпПар,,{;}] |
] |
ЭлемСпПарам
ГрупПар = РелВыр Спец ГрупПар
ГрупПар = « СпЗнач » РелВыр=Выр[ПервРел, { ~ , } ,РелОп2 ,{ }]
Рис. 4.2. Синтаксис языка FLOGOL (продолжение 4).
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 26
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
ПервРел
График
ИмяОтн
РелОп2={ , , , , # , , }
График
{ |
Терм |
: |
Терм |
? Формула }
Терм=Выр[ПервТерм,,{, , | }]
ПервТерм |
|
Вызов |
|
СпИнд |
Ид1 |
Формула=Выр[ПервФорм,,{ & , }] |
|
ПервФорм |
|
Вызов
|
= |
Терм |
Терм |
Вызов
ИмяОтн |
( |
Терм |
) |
Рис. 4.2. Синтаксис языка FLOGOL (продолжение 5).
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 27
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
ОпрРел
Импорт РелОп2 = РелВыр
==
ОпрДом
Импорт = DOMAIN Домен
==
ЭлемОпис
СпИнд EMPTY
Имя = Связка ОпрРел
ОпрДом
СпПар = Связка ОпрРел
Спец СпИнд Ид
EXT
,
Рис. 4.2 . Синтаксис языка FLOGOL (продолжение 6).
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 28
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
Спец
TUPLE
TUPLE_SET
PREDICATE
TUPLE_TRANSITION
TUPLE_OPERATOR
TUPLE_FUNCTOR
TUPLE_SUBSTITUTION
TUPLE_TRANSPOSITION
REFLECTION
FUNCTION
CONSTRUCTOR
SUPERCONSTRUCTOR
RELATION
TUPLE_REFLECTION
TUPLE_FUNCTION
RECONSTRUCTOR
ASSERTION
OBJECT
SET
PROPERTY
TRANSITION
OPERATOR
FUNCTOR
SUBSTITUTION
TRANSPOSITION
(
SUPER_RECONSTRUCTOR ( АрВыр : АрВыр )
( + АрВыр + : + АрВыр + )
Рис. 4.2. Синтаксис языка FLOGOL (продолжение 7).
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 29
4. ЯЗЫК ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ FLOGOL
Приор – приоритет связки (может быть опущен – для закрытых свя-
зок); представляет собой заключенное в квадратные скобки целое число k 0.., при сравнении приоритетов рассматриваемое как правильная дробь
0.k , что позволяет включать новые значения в любое место имеющейся шкалы приоритетов. Для открытых связок не ассоциативных операций должен указываться знак «-», если для цепочки связок одинакового прио-
ритета скобки по умолчанию расставляются по ассоциации налево, и знак
«+», если для цепочки связок одинакового приоритета скобки по умолча-
нию расставляются по ассоциации направо. Если знак не указан, порядок выполнения операций выбирается системой.
Выр – общая схема построения различных выражений в языке
FLOGOL . Параметр «0» задает первичную форму соответствующего вы-
ражения, параметр «1» представляет множество звеньев-префиксов, «2» –
инфиксов, а «3» – суффиксов. Заключение выражения в круглые скобки позволяет его синтаксически использовать как первичное выражение лю-
бой сложности; то же можно сказать и о CASE-конструкции, синтаксис которой заимствован из языка PASCAL: в качестве ключа используется значение арифметического выражения (АрВыр), а множество значений ключа (МножЗнач) тоже описано в виде специального выражения. В каче-
стве префиксов и суффиксов к указанным выше первичным формам выра-
жений могут быть присоединены символы унарных операций для опреде-
ляемого типа выражений (параметры «1» и «3») и конструкция оператора свертки по любой из бинарных операций, заданных параметром «2», а для реляционных выражений – и для бинарных операций композиции, опреде-
ленных в программе. Если для конкретного типа выражений используется символ единственной бинарной операции, то в конструкции оператора свертки он может быть опущен. Оператор свертки предполагает задание имени операторной переменной и списка ее возможных значений
FLOGOL: ЯЗЫК И СИСТЕМА ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ 30