Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
FLOGOL IDE (отчёт).pdf
Скачиваний:
13
Добавлен:
28.06.2014
Размер:
923.8 Кб
Скачать

инфиксных операций и, возможно пустое, множество префиксных операций. Помимо этих средств построения выражений языка S-FLOGOL для всех типоав выражений могут использоваться конструкция свертки и условная конструкция IF. Каждое выражение языка может быть заключено в скобки.

Описание определенных в программе объектов могут быть дополнены.

В случае, если в домене встречается повторное описание отношения с одним и тем же именем, т.е. с тем же идентификатором, с тем же набором индексов и тем же спецификатором, то оно рассматривается как продолжение описания данного отношения. При этом правые части всех таких определений полагаются неявно связанными операцией объединения отношений.

3.2. Синтаксис языка и семантика S-FLOGOL.

Синтаксис языка S-FLOGOL описан в параметризованной форме в виде обобщенных диаграмм Вирта. Нетерминальные символы грамматики записываются в прямоугольных блоках. Текст блоков, представляющих идентификаторы переменных и натуральные числа выделяются наклонным жирным шрифтом. Терминальные символы размещаются в овальных или круглых блоках и также выделяются жирным шрифтом. Все блоки соединены между собой направленными дугами, обозначающими порядок возможного вхождения данных блоков в описываемое диаграммой грамматическое правило. Нетерминальный символ, определяющий левую часть правила, записывается над левым верхним углом диаграммы. Каждая диаграмма имеет ровно одну входную и выходную дугу, обозначающие начало и конец описания правой части правила. Параметризация используется только для определения выражений различных типов, поэтому в качестве параметра используется только тип описываемого или вызываемого выражения,

записываемый в круглых скобках после имени определяемого блоком

символа.

Под ветвью диаграммы будем понимать цепочку символов, причем

входная дуга первого символа и выходная дуга последнего символа цепочки

являются входной и выходной дугой диаграммы, соответственно; подпись ветвей осуществляется непосредственно над символами цепочки.

Непересекающиеся ветви будем называть альтернативными.

17

Для формирования списков используются синтаксические конструкции

вида:

А А

,

Б

а) б)

Опциональные элементы программы представляются с помощью обводящих дуг вида:

А

В том случае, если правило содержит по одному символу для каждой

альтернативной ветви, мы будем использовать общепринятую сокращенную форму записи перечисления вариантов в фигурных скобках через пробел.

Семантику основных конструкций языка будем приводить неформально, в виде некторого описания, поясняющего смысл конструкции. Поскольку реализация языка S-FLOGOL выполнена посредством компиляции его в сетевое представление [14] и последующего выполнения системой вычисления программ в форме КССГ, описание семантики выполняется с точностью до преобразования текстовой программы языка в сетевое представление (точнее, в КССГ).

Синтаксическим понятием, определяющим программный модуль языка S-FLOGOL, является «Модуль», определяемый следующим грамматическим правилом:

Модуль

MODULE ИмяМод ( ИмяМод ) = Выр(Дом)

,

WHERE Выр(Дом) END

В данном правиле первый символ «ИмяМод» задает имя определяемого модуля, а второй (в связке с символом образования списка ‘,’) – список имен

подключых модулей, причем этот список является опциональным и может быть опущен. Опциональным также является включение в модуль второго

доменного выражения, определяющего закрытую часть модуля.

18

Выражение является основным синтаксическим понятием языка S- FLOGOL и содержит параметр «Тип», определяющий тип выражения. При депараметризации грамматики выполняется подстановка конкретных имен типов для выражения каждого типа. Например, для арифметического выражения имя соответсвующего нетерминального символа будет равным «Выр(Ар)», соответсвенно, в cинтаксических диаграммах блоки «Выр(Тип)»

будут заменены на блоки «Выр(Ар)». Итак, определяющая выражение языка синтаксическая диаграмма имеет вид:

Выр(Тип)

Первичное выражение

ПервВыр(Тип)

Префиксная связка

Преф(Тип) Выр(Тип)

Инфиксная связка

Инф(Тип)

( Выр(Тип) Инф(Тип) Выр(Тип) )

Условная конструкция IF

IF Выр(Лог) THEN Выр(Тип) ELSE Выр(Тип)

Свертка

( Инф(Тип) ИдСв = Выр(СписЗнач) ) Выр(Тип)

Заметим, что в ветви, определяющей инфиксную связку, используется список с нетерминальным символом «Инф(Тип)», что позволяет организовывать последовательности применения инфиксных операций в виде списков. В грамматике языка для каждого типа выражения есть правило, определяющее множество символов префиксных и инфиксных

операций для выражения данного типа.

Результатом вычисления выражения является значение из области значений, определенной для выражения каждого типа, причем в области значений существет выделенное значение, определенное как значение по умолчанию. В область значений каждого выражения также включается неопределенный элемент . Результат любой операции (кроме операций объединения), операндом котрой является элемент , также определен как

19

. Значение выражение принимает также в случаях, если при его вычислении произошла ошибка.

Свертка позволяет в компактной форме описывать множество объектов, определяемых данным выражением. Конструкция свертки содержит: бинарную инфиксную операцию, по которой выполняется свертка, операторную переменную свертки, областью значений которой является множество натуральных чисел, список значений переменной свертки, а также выражение-операнд, к которому применяется свертка. Тип выраженияоперанда и список возможных бинарных операций соответствует типу выражения, в рамках которого определяется свертка.

Результат вычисления свертки в общем случае определяется как op(e1 ,op(e2 ,...,op(en1 ,en ))), n >1, где op – инфиксная операция свертки, n

длина списка значений переменной свертки, а ei – выражение-операнд, в

котором переменная свертки заменена на i -й элемент списка значений переменной свертки. В случае, если список содержит лишь один элемент, результатом вычисления свертки будет выражение-операнд с подставленным значением переменной свертки. Сам список значений переменной свертки (список натуральных чисел) определяется рассмотренным далее выражением список значений. Допускается использование вложенных сверток, то есть, когда в выражении – операнде свертки вновь используется свертка. В этом случае в выражении – операнде второй свертки могут использовать значения обеих переменных, в общем случае имеющих различные имена (если имена операторных переменных вложенных сверток совпадают, то при обращении к переменной будет возвращено значение из списка значений свертки, наиболее близкой (сверху) во вложенной структуре).

Условная конструкция IF (IF THEN ELSE) позволяет на основе некоторого логического условия выбрать одно из двух возможных выражений

того же типа, что и выражение, в котором расположена сама конструкция IF.

Конструкция имеет традиционную семантику. В случае, если логическое

условие выполняется, то результатом вычисления условной конструкции является результат вычисления первого выражения (следующего за словом

THEN), в противном случае результатом является результат вычисления

20

второго выражения (следующего за ключевым словом ELSE). ELSE-часть условной конструкции может быть опущена, при этом, если логическое условие не выполняется, в качестве значения условной конструкции выступает значение по умолчанию, определенное для выражения данного типа. Логическое условие задается при помощи рассмотренного далее

логического выражения.

Доменное выражение «Выр(Дом)» определяет множество частичных описаний НО и имеет в качестве результата вычисления множество пар <Имя, Сеть>, где Имя представляет имя отношения, а Сеть – сетевое определение этого отношения.

Первичное выражение для доменного выражения описывает определение и объявление НО, соответственно.

ПервВыр(Дом)

 

 

 

Определение

Спец

[

Выр(СпИнд)

]

ИдОтн

[

 

Выр(СпПар)

]

=

Выр(Рел)

 

 

 

 

Терминал

Спец [ Выр(СпИнд) ] ИдОтн

Обводные дуги определяют опциональность списка индексов и списка параметров определяемого НО, а также опциональность списка индексов для конструктора НО. Для доменного выражения используется единственный символ инфиксной операции, задаваемой правилом Инф(Дом) = {;} и интерпретируемой как теоретико-множественное объединение указанных выше пар сетевого определения НО. Значением по умолчанию для доменного выражения является пустое отношение ( ).

Реляционное выражение «Выр(Рел)», предназначено для

формирования определения НО в сетевой форме. Результатом его вычисления является множество сетей. Первичное выражение позволяет определить НО непосредственно как график этого НО или как вызов

определенного ранее НО. Первичное реляционное выражение имеет вид:

21

ПервВыр(Рел)

Вызов отношения

 

 

ИмяОтн

 

 

График

{ Выр(Терм) : Выр(Терм) ? Выр(Формула) }

Результатом вычисления выражения, определенного как вызов отношения («ИмяОтн») является одноэлементная сеть, содержащая единственный элемент с именем вызываемого отношения. Арность элемента и арность сети определяется арностью вызываемого отношения; сеть содержит дуги, попарно соединяющие (через соответсвующие точки) входы и выходы сети с входами и выходами ее элемента. Для каждого такого вызова компилятором дополнительно формируется сетевое определение

вызываемого отношения.

Синтаксиеское понятие «ИмяОтн» определяет вызов отношения по имени, рекурсивный вызов отношения и вызов указанного номером отношения-параметра. Соответствующая синтаксическая диаграмма имеет вид:

ИмяОтн

 

 

[

Выр(СпИнд)

Полное имя

ИмяМод

.

Спец

]

 

 

 

ИдОтн

[

Выр(СпПар) ]

Собственное имя

@

 

 

 

 

 

 

 

 

 

 

Номер параметра

« Выр(Ар) »

Входной терм, выходной терм и формула, формирующие график,

являются опциональными. Входной и выходной терм определеют

ограничения на компоненты входного и выходного кортежей отношения, а формула позволяет описать дополнительные ограничения на значения

переменных термов. Результатом вычисления графика является множество сетей, причем каждая сеть которого содержит точки, дуги, и элементы,

полученные в результате вычисления входного и выходного термов и формулы.

Для реляционных выражений определен один символ префиксной операции инверсии отношения и множество символов инфиксных операций

22

композиции отношений; соответсвующие синтаксические правила которых имеют вид:

Преф(Рел) = {~}, Инф(Рел) = {• → # ∩}.

Результатом применения операции инверсии является отношение, обратное отношению-операнду данной операции. Семантика операций композиции отношений представлена в теоретическом введении. Значением по умолчанию для реляционного выражения является значение .

Вариантами первичного выражения для выражения типа терм («Выр(Терм)») являются вызов (возможно, инвертированного) отношения, именованная и анонимная переменные терма. Каждое вхождение анонимной переменной определяет переменную с уникальным в пределах графика

именем. Синтаксическая диаграмма для первичного выражения имеет вид:

ПервВыр(Терм) Переменная терма

[ Выр(СпИнд) ] ИдТерма

Анонимная переменная

_

Вызов

~ ИмяОтн ( Выр(Терм) )

Результатом вычисления терма-переменной является сеть арности (1,1), содержащая единственную точку, представляющую эту пременную, соединенную дугами с входом и выходом сети.

Результатом вычисления терма – вызова отношения является сеть точнее, множество сетей, полученных последовательной композицией сетей, сформированных в результате вычисления входного терма вызова и

одноэлементной сети, представляющей вызываемое отношение

(ИмяОтн(Терм) преобразуется в конструкцию вида Сеть(Терм)Сеть(ИмяОтн)). В случае, если входная арность одноэлементной сети не равна выходной

арности сети, представляющей входной терм, результатом вычисления

будет значение .

Для термов определены инфиксные символы операций соединения

термов и альтернативы: Инф(Терм) = {, |}.

23

Семантика операции соединения термов (‘,’) соответствует реляционной параллельной композиции, а операция альтернативы (‘|’) – реляционной операции объединения. Значением по умолчанию для терма является безэлементная сеть арности (0,0).

Формула «Выр(Формула)», предназначена для описания дополнительных ограничений на значения переменных графика. Синтаксическая диаграмма для первичного выражения формулы имеет вид:

ПервВыр(Формула)

Сравнение термов

Выр(Терм) ТОпСрав Выр(Терм)

ТОпСрав

Вызов

ИмяОтн ( Выр(Терм) )

Первая ветвь, определяющая связку сравнения термов, содержит список с нетерминальным разделителем. Правило, определяющее данный нетерминальный символ-разделитель, имеет вид: ТОпСрав = {= <>}. Таким образом, данное правило описывает цепочки символов, организующие многоместную связку операций сравнения термов, например, t1 = t2 <> t3 = t4 ,

интерпретируемой как t1 =t2 & t2 <>t3 & t3 =t4 . Семантика первой ветви определяется соблюдением равенств (или неравенств) значений переменных термов, то есть отождествлением (или соединением ребром dif- графа) соответствующих точек в сетевом представлении.

Вторая ветвь определяет вызов отношения с подачей на его входы

некоторого терма вызова. Семантика этой ветви определяется

выполнимостью вызываемого отношения арности (n,0) для значений переменных терма вызова.

Для формул определены символы инфиксных операций соединения и

альтернативы: Инф(Формула) = {& |}.

Семантика этих операций аналогична семантике рассмотренных выше

операций над термами. Значением по умолчанию для формулы является безэлементная сеть арности (0,0).

24

Спецификатор «Спец» определяет входную и выходную арности, а также наличие свойств функциональности и тотальности для прямого и обратного ему отношения:

Спец

 

Полный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

+

Выр(Ар)

+

:

 

+

Выр(Ар)

+

)

 

Нулярный

 

 

 

Ключ0

 

 

 

 

 

 

 

 

 

 

 

 

 

Однонаправленный

Ключ1

 

(

Выр(Ар)

)

 

 

 

 

 

 

 

 

Двунаправленный

Ключ2

(

Выр(Ар)

:

Выр(Ар)

 

)

 

 

 

 

Использование ключевых спецификаторов позволяет задавать некоторую

часть спецификации отношения при помощи ключевых слов, значение которых приведено в соответсвующей таблице в теоретическм введении. Ключевые слова разбиты на три группы, в зависимости от необходимости введения дополнительной информации (арности отношения), не уточняемой ключем:

Ключ0

Ключ1

 

Ключ2

 

 

 

 

ASSERTION

TUPLE

 

RELATION

 

 

 

 

OBJECT

TUPLE_SET

 

TUPLE_REFLECTION

 

 

 

 

SET

PREDICATE

 

TUPLE_FUNCTION

 

 

 

 

PROPERTY

TUPLE_OPERATOR

 

RECONSTRUCTOR

 

 

 

 

TRANSITION

TUPLE_FUNCTOR

 

SUPERRECONSTRUCTOR

 

 

 

OPERATOR

TUPLE_SUBSTITUTION

 

 

 

 

FUNCTOR

TUPLE_TRANSPOSITION

 

 

 

 

 

SUBSTITUTION

REFLECTION

 

 

 

 

 

 

TRANSPOSITION

FUNCTION

 

 

 

 

 

 

 

CONSTRUCTOR

 

 

 

 

 

 

SUPERCONSTRUCTOR

 

 

 

 

 

 

 

Список индексов «Выр(СпИнд)»,

составляющий часть имени

отношения и переменной терма, определяется первичным выражением, в

25

качестве которого выступает арифметическое выражение; единственной инфиксной операцией является операция сцепления списков.

ПервВыр(СпИнд) = Выр(Ар), Инф(СпИнд) = {,}.

Значением данного выражения является список натуральных чисел, а значением по умолчанию – пустой список.

Выражение Список параметров «Выр(СпПар)» идентично для списков и фактических, и формальных параметров. В качестве первичного выражения выступают имя отношения, возможно, также параметризованного, пропуск параметра и собственные параметры вызова

(@). Использование собственных параметров вызова обозначает передачу полного списка параметров определяемого отношения и обусловлено

недопустимостью транзитной передачи отдельных параметров вызова в качестве фактических параметров вызываемых в определении отношений. Отметим, что при рекурсивном вызове отношения (при помощи символа ‘@’ в качестве имени вызываемого отношения) в рекурсивно вызываемое отношение также передается и полный список фактических параметров.

Правило определения первичного выражения имеет вид:

ПервВыр(СпПар)

 

 

 

 

 

 

 

Параметр

ИмяМод

.

Спец

 

 

 

 

 

 

[

Выр(СпИнд)

]

ИдОтн

[

Выр(СпПар)

]

Пропуск параметра

_

Собственные параметры

@

Единственным символом инфиксной операции является символ ‘;’,

интерпретируемый как операция сцепления списков.

Результатом вычисления первой ветви является список, каждый элемент которого содержит имя отношения и, возможно пустой, список

параметров вызова. Пропуск параметра интерпретируется как пустое НО. Значением по умолчанию является пустой список.

26

Арифметическое выражение «Выр(Ар)» имеет в качестве результата вычисления натуральное число и используется для определения списков индексов, спецификаторов, значений переменной свертки, номеров вызываемых параметров, количеств входов и выходов отношений и др. Синтаксическая схема для первичного выражения имеет следующий вид:

ПервВыр(Ар)

Натуральное число

 

 

НатЧис

 

Переменная свертки

 

 

ИдСв

Кол. входов

 

 

>

ИмяОтн

Кол. выходов

ИмяОтн >

Инфиксные операции выражения заданы следующим правилом:

Инф(Ар) = {+ - * /}.

Значением по умолчанию для арифметического выражения является число 0.

Логическое выражение «Выр(Лог)» используется для выбора альтернативы в условной конструкции IF. Результатом вычисления выражения является истинностное значение (True или False). Первичное логическое выражение представляет собой непустую цепочку сравнений натуральных чисел, определяемых арифметическими выражениями. Соответствующая синтаксическая диаграмма имеет вид:

ПервВыр(Лог)

Выр(Ар) АОпСрав Выр(Ар)

АОпСрав

Нетерминал АОпСрав представляет бинарную инфиксную операцию и определяется следующим правилом: АОпСрав = {> < = >= <= <>}. В результате применения списковой структуры возможно, аналогично

первичному выражению формулы, образование многоместной связки. Для логического выражения определены символ префиксной операци отрицания

Преф(Лог) = {NOT},

и символы инфиксные операции

27