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

Принципы языка SCp (Semantic Code programming) (Мет пособие)

.pdf
Скачиваний:
114
Добавлен:
15.06.2014
Размер:
1.79 Mб
Скачать

4.2. Описание ядра языка SCP

71

П р и ме р 4 . 2 . 3 . 7

eraseSetStr3

opi

1 _:

2_:

3_:

set2_:

const_: const_:

f ixed_:

 

 

f_: pos_:

 

 

 

x1

x2

 

vi

sv2

После успешного выполнения данного оператора (o p i) будет удален sc-узел v3 , который является первым элементом трехэлементной конструкции, соответствующей заданному шаблону и чей второй элемент входит в множество sv2 . Также будут удалены дуги, входящие и выходящие из удаленного узла.

 

 

 

До

x1

x2

vi

sv2

 

 

 

v1

 

 

 

v2

 

 

 

v3

 

 

После

 

x1

x2

vi

sv2

 

 

 

 

 

v1

 

 

 

v2

Пример 4 . 2 . 3 . 8

 

 

 

 

 

eraseSetStr3

 

 

 

opi

 

 

 

 

 

1 _:

2_:

 

3_:

set1 _: set3_:

const_: const_:

 

f ixed_:

 

 

 

f_: pos_:

 

f _:

 

 

 

x1

x2

 

vi

sv1

sv3

 

 

 

До

 

 

 

x1

x2

vi

 

 

sv2

 

 

 

 

v1

 

 

 

 

 

v2

 

 

 

 

 

v3

 

 

После выполнения данного оператора (o p i) изменений в памяти не произойдет, так как во множествах sv1 и sv3 не содержится трехэлементной sc-конструкции, удовлетворяющей заданному шаблону (vi не является третьим элементом ни одной из конструкций).

 

 

После

 

x1

x2

vi

sv2

 

 

 

 

 

v1

 

 

 

v2

72

4. Базовый язык программирования для графодинамических ассоциативных машин

4.2.4. Операторы ассоциативного поиска конструкций языка SC

Семейство scp-операторов ассоциативного поиска sc-конструкций (такие операторы будем также называть search-операторами) разбивается на следующие типы scp-операторов:

операторы ассоциативного поиска произвольных элементов sc-конструкции, состоящей из трёх элементов (searchElStr3-операторы);

операторы ассоциативного поиска произвольных элементов sc-конструкций, удовлетворяющих заданным условиям и состоящих из трех элементов, и формирования из них множества

(searchSetStr3-операторы);

операторы ассоциативного поиска произвольных элементов sc-конструкций, удовлетворяющих заданным условиям и состоящих из трёх элементов, и формирования из них множества, элементами которого остаются только sc-элементы, удовлетворяющие заданным условиям

(selectYStr3-операторы);

операторы ассоциативного описка произвольных элементов sc-конструкций, удовлетворяющих заданным условиям и состоящих из трёх элементов, и формирования из них множества, элементами которого остаются только sc-элементы, не удовлетворяющие заданным условиям

(selectNStr3-операторы).

Множество searchElStr3-операторов в языке SCP будем обозначать ключевым узлом, которому поставим в соответствие идентификатор searchElStr3 . Множество searchSetStr3-операторов в языке SCP будем обозначать ключевым узлом, которому поставим в соответствие идентификатор searchSetStr3 . Множество selectYStr3-операторов в языке SCP будем обозначать ключевым узлом, которому поставим в соответствие идентификатор selectYStr3 . Множество selectNStr3-операторов в языке SCP будем обозначать ключевым узлом, которому поставим в соответствие идентификатор selectNStr3 . Семейство типов search-операторов в языке SCP обозначается ключевым узлом с идентификатором search. Соотношение между указанными ключевыми узлами задается следующей sc-конструкцией:

search

searchE lStr3 searchSetStr3 selectYStr3 selectNStr3

Перейдем к более подробному рассмотрению указанных выше типов scp-операторов.

Операторы ассоциативного поиска произвольных элементов sc-конструкции, состоящей из трёх элементов ( searchElStr3-операторы, операторы типа searchElStr3 )

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

Запись scp-операторов типа searchElStr3 на языке SCs имеет следующий вид:

запись searchElStr3 –оператора :: searchElStr3

идентификатор searchElStr3-оператора

( fixed _ : | assign_ :

/* данные атрибуты уточняют, известно (вычислено) ли значение операнда или необходимо найти sc-элемент и установить значение операнда данного

оператора */

4.2. Описание ядра языка SCP

73

[

(

const_ : | v a r_ :

| m eta _ :

)

]

)

1 _ : операнд x1 ,

 

 

 

 

( f ix e d _ : | assign_ :

 

 

 

 

[

(

pos_ :

| neg _ : | fuz_ : )

]

 

 

[

(

const_ : | var_ :

| meta _ :

)

]

)

2 _ : операнд x2 ,

 

 

 

 

(

fixed _ : | assign_ :

 

 

 

 

(

[

node _ :

| elem _ :

| arc _ :

]

 

 

[

(

pos_ :

| neg _ : | fuz_ : )

]

)

 

[

(

const_ : | var_ :

| meta _ :

)

]

)

3 _ :

операнд x3 ,

 

 

 

 

then_ : идентификатор scp-оператора ;

else_ : идентификатор scp-оператора ;

/* данные атрибуты уточняют тип искомого sc-элемента по признаку "константа – переменная –

метапеременная" */

/* операндом является scp-переменная,

если указан атрибут assign_ , значением которой становится найденный

sc-элемент. Если указан атрибут f ix e d _ , то операндом может быть и scp-переменная, и scp-константа */

/* данные атрибуты уточняют, известно (вычислено) ли значение операнда или необходимо найти sc-элемент и установить значение операнда данного

оператора */

/* данные атрибуты уточняют тип искомой sc-дуги по признаку "позитивная

дуга – негативная дуга – нечеткая дуга" */

/* данные атрибуты уточняют тип искомого sc-элемента по признаку "константа – переменная –

метапеременная" */

/* операндом является scp-переменная,

если указан атрибут assign_ , значением которой становится найденный sc-элемент. Если указан атрибут fixed _ , то операндом может быть и

scp-переменная и scp-константа */

/* данные атрибуты уточняют, известно (вычислено) ли значение операнда или необходимо найти sc-элемент и установить его значением операнда

данного оператора */

/* данные атрибуты уточняют тип искомого sc-элемента по признаку "узел –

элемент неопределенного типа – дуга" */

/* данные атрибуты уточняют тип искомого sc-дуги по признаку "позитивная

дуга – негативная дуга – нечеткая дуга" */

/* данные атрибуты уточняют тип искомого sc-элемента по признаку "константа – переменная –

метапеременная" */

/* операндом

является scp-переменная,

если

указан

атрибут

assign_ ,

значением,

которой

становится

найденный sc-элемент. Если указан

атрибут

fixed _ ,

то операндом

может

быть

и

scp-переменная,

и

scp-константа */

 

 

/* здесь указывается идентификатор того scp-оператора, которому передается управление после реализации данного scp-оператора и нахождения требуемой

sc-конструкции */

/* здесь указывается идентификатор того scp-оператора, которому передается управление после реализации данного scp-оператора и ненахождения требуемой

sc-конструкции */

74

4. Базовый язык программирования для графодинамических ассоциативных машин

Результаты выполнения операторов типа searchElStr3 :

Если первый операнд помечен атрибутом assign_ , то будет искаться sc-узел. Тип искомого sc-узла уточняется следующими атрибутами:

const_ - ищется константный sc-узел;

v a r_ - ищется переменный sc-узел;

m eta _ - ищется метапеременный sc-узел.

Если второй операнд помечен атрибутом assign_ , то будет искаться sc-дуга. Тип искомой sc-дуги уточняется следующими атрибутами:

p o s_ - ищется позитивная sc-дуга;

neg _ - ищется негативная sc-дуга;

fuz_ - ищется нечеткая sc-дуга;

const_, var_ , meta_ – ищется соответственно константная, переменная или метапеременная sc-дуга.

Если искомая sc-дуга найдена и указан атрибут f _ , то эта sc-дуга удаляется.

Если третий элемент помечен атрибутом assign_ , то будет искаться sc-элемент, тип которого уточняется следующими атрибутами:

node _ - ищется sc-узел;

elem _ - ищется sc-элемент неопределенного типа;

arc _ - ищется sc-дуга. В этом случае для уточнения типа могут дополнительно использоваться атрибуты pos_ , neg _ , fuz_ (семантику смотри выше);

const_, var_ , meta_ – ищется соответственно константный, переменный или метапеременный sc-элемент.

П р и м е ч а н и е . Хотя бы один операнд оператора должен быть помечен атрибутом fixed _ . Если при поиске будут найдены несколько подходящих sc-конструкций, то выберется одна из них.

Модификации scp-операторов типа searchElStr3 задаются комбинацией атрибутов, которыми помечен операнд. Приведем некоторые модификаций searchElStr3-оператора.

П р и ме р 4 . 2 . 4 . 1

searcheE lStr3

opi

1 _:

 

2_:

3_:

f ixed_:

assign_:

fixed_:

 

 

pos_:

 

 

 

const_:

 

x1

x2

x3

 

В результате успешного выполнения данного оператора (opi) будет найдена константная позитивная sc-дуга (gi), соединяющая sc-узел, являющийся значением операнда x 1 , и sc-элемент (ei), являющийся значением операнда x 3 . Также будет сгенерирована дуга, связывающая операнд x 2 с sc-элементом gi, и дуга принадлежности, связывающая указанную выше дугу со знаком соответствующего бинарного отношения (ri). Генерация этой дуги означает, что у операнда x 2 сформировалось (вычислилось) значение:

x1 x2 x3

ri

gi

ei

4.2. Описание ядра языка SCP

75

П р и ме р 4 . 2 . 4 . 2

genStr3 opi

1 _:

2_:

3_:

f ixed_: assign_: assign_: pos_: node_: const_: const_:

x1

x2

x3

 

В результате успешного выполнения данного оператора (o p i) будут найдены константный sc-узел (vi) и константная позитивная sc-дуга (g i), соединяющая его с sc-узлом, являющимся значением операнда x 1 . Также будут сгенерированы дуга, связывающая операнд x 2 с sc-элементом g i, и дуга, связывающая операнд x 3 с sc-элементом vi, а также дуги принадлежности, связывающие указанные выше дуги со знаком соответствующего бинарного отношения (ri). Генерация этих дуг означает, что у операндов x 2 и x 3 сформировалось (вычислилось) значение:

x1

x2

x3

 

 

ri

gi

vi

Пример 4 . 2 . 4 . 3

searchE lStr3 opi

1 _:

2_:

3_:

assign_: assign_:

f ixed_:

const_:

const_:

 

 

pos_:

 

x1

x2

x3

 

В результате успешного выполнения данного оператора (opi) будут найдены константный sc-узел (vi) и константная позитивная sc-дуга (gi), соединяющая его с sc-элементом (ei), являющимся значением операнда x 3 . Также будут сгенерированы дуга, связывающая операнд x 2 с sc-элементом gi, и дуга, связывающая операнд x 1 с sc-элементом vi, а также дуги принадлежности, связывающие указанные выше дуги со знаком соответствующего бинарного отношения (ri). Генерация этих дуг означает, что у операндов x 1 и x 2 сформировалось (вычислилось) значение

x1

x2

x3

ri

 

 

 

vi

gi

ei

 

76 4. Базовый язык программирования для графодинамических ассоциативных машин

П р и ме р 4 . 2 . 4 . 4

searchE lStr3 opi

1 _:

 

2_:

 

3_:

f ixed_:

assign_:

assign_:

 

 

var_: const_:

 

 

neg_:

 

elem_:

x1

x2

x3

 

 

В результате успешного выполнения данного оператора (o p i) будут найдены константный sc-элемент неопределенного типа (ei) и переменная негативная sc-дуга (g i), соединяющая его с sc-узлом, являющимся значением операнда x 1 . Также будут сгенерированы дуга, связывающая операнд x 2 с sc-элементом g i, и дуга, связывающая операнд x 3 с sc-элементом ei, а также дуги принадлежности, связывающие указанные выше дуги со знаком соответствующего бинарного отношения (ri). Генерация этих дуг означает, что у операндов x 2 и x 3 сформировалось (вычислилось) значение:

x1

x2

x3

 

 

ri

gi

ei

Операторы ассоциативного поиска произвольных элементов sc-конструкций, удовлетворяющих заданным условиям и состоящих из трех элементов, и формирования из них множества ( searchSetStr3-операторы, операторы типа searchSetStr3 )

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

Запись scp-операторов типа searchSetStr3 на языке SCs имеет следующий вид:

запись searchSetStr3 –оператора :: searchSetStr3

идентификатор searchSetStr3-оператора

( fixed _ : |

[ ( const_ : | var_ : | meta _ : ) ] )

1 _ : операнд x1 ,

( fixed _ : |

/* данный атрибут уточняет, известно (вычислено) ли значение операнда */

/* данные атрибуты уточняют тип искомого sc-узла по признаку "константа –

переменная – метапеременная" */

/* операндом является программная переменная, или если указан атрибут fixed _ , то операндом может быть и

константа программы */

/* данный атрибут уточняет, известно (вычислено) ли значение операнда */

4.2. Описание ядра языка SCP

77

[ ( p o s_ : | neg _ : | f uz_ : ) ]

 

 

[

(

const_ : | v a r_ :

| m eta _ :

)

]

)

2 _ : операнд x2 ,

 

 

 

 

( f ix e d _ : |

 

 

 

 

(

[

node _ :

| elem _ :

| arc _ :

]

 

 

[

(

pos_ :

| neg _ : | fuz_ : )

]

)

 

[

(

const_ : | var_ :

| meta _ :

)

]

)

3 _ : операнд x3 ,

 

 

 

 

(

fixed _ : | assign_ :

)

 

 

 

set1 _ : операнд xs1 ,

( fixed _ : | assign_ : )

set2 _ : операнд xs2 ,

( fixed _ : | assign_ : )

/* данные атрибуты уточняют тип искомой sc-дуги по признаку "позитивная дуга –

негативная дуга – нечеткая дуга" */

/* данные атрибуты уточняют тип искомого sc-элемента по признаку "константа –

переменная – метапеременная" */

/* операндом

является

программная

переменная,

или если

указан

атрибут

fixed _ , то

операндом

может

быть и

константа программы */

/* данный атрибут уточняет, известно (вычислено) ли значение операнда */

/* данные атрибуты уточняют тип искомого sc-элемента по признаку "узел – элемент

неопределенного типа – дуга" */

/* данные атрибуты уточняют тип искомой sc-дуги по признаку "позитивная дуга –

негативная дуга – нечеткая дуга" */

/* данные атрибуты уточняют тип искомого sc-элемента по признаку "константа –

переменная – метапеременная" */

/* операндом является программная переменная, или если указан атрибут fixed _ , то операндом может быть и

константа программы */

/* данные атрибуты уточняют, известно (вычислено) ли значение операнда или необходимо сгенерировать sc-элемент и установить значение операнда данного

оператора */

/* операндом

является

программная

переменная,

или если

указан атрибут

fixed _ , то операндом может быть и константа программы. Значением данного операнда становится множество “первых”

элементов найденных sc-конструкций */

/* данные атрибуты уточняют, известно (вычислено) ли значение операнда или необходимо сгенерировать sc-элемент и установить его значением операнда данного

оператора */

/* операндом

является

программная

переменная,

или если

указан атрибут

fixed _ , то операндом может быть и константа программы. Значением данного операнда становится множество “вторых”

элементов найденных sc-конструкций */

/* данные атрибуты уточняют, известно (вычислено) ли значение операнда или необходимо сгенерировать sc-элемент и установить значение операнда данного

оператора */

78

4. Базовый язык программирования для графодинамических ассоциативных машин

set3 _ :

операнд xs3 ,

/* операндом

является

программная

 

 

переменная,

или если

указан атрибут

then_ : идентификатор scp-оператора ;

else_ : идентификатор scp-оператора ;

Результаты выполнения операторов типа sea rchSetStr3 :

fix ed _ , то операндом может быть и константа программы. Значением данного операнда становится множество “третьих”

элементов найденных sc-конструкций */

/* здесь указывается идентификатор того scp-оператора, которому передается управление после реализации данного scp-оператора и нахождения требуемой

sc-конструкции */

/* здесь указывается идентификатор того scp-оператора, которому передается управление после реализации данного scp-оператора и ненахождения требуемой

sc-конструкции */

Если первый операнд не помечен атрибутом f ix e d _ , то будет искаться sc-узел. Тип искомого sc-узла уточняется следующими атрибутами:

const_ - ищется константный sc-узел;

v a r_ - ищется переменный sc-узел;

m eta _ - ищется метапеременный sc-узел.

Если второй операнд не помечен атрибутом f ix e d _ , то будет искаться sc-дуга. Тип искомой sc-дуги уточняется следующими атрибутами:

pos_ - ищется позитивная sc-дуга;

neg _ - ищется негативная sc-дуга;

fuz_ - ищется нечеткая sc-дуга;

const_, var_ , meta_ – ищется соответственно константная, переменная или метапеременная sc-дуга.

Если третий элемент не помечен атрибутом fixed _ , то будет искаться sc-элемент, тип которого уточняется следующими атрибутами:

node _ - ищется sc-узел;

elem _ - ищется sc-элемент неопределенного типа;

arc _ - ищется sc-дуга. В этом случае для уточнения типа могут дополнительно использоваться атрибуты pos_ , neg _ , fuz_ (семантику смотри выше);

const_, var_ , meta_ – ищется соответственно константный, переменный или метапеременный sc-элемент.

Пр и м е ч а н и е 1 . Хотя бы один операнд из первых трёх операндов должен быть помечен атрибутом fixed _ .

Пр и м е ч а н и е 2 . Последние три операнда ( xs1 , xs2 и xs3 ) задают множества соответственно “первых”,

“вторых” и “третьих” элементов sc-конструкций. Если указан атрибут assign_ , то генерируется новое множество, а если указан атрибут fixed _ , то множество дополняется найденными sc-конструкциями.

Пр и м е ч а н и е 3 . Операнды xs1 , xs2 и xs3 могут быть scp-переменными и scp-константами. Должен присутствовать хотя бы один из операндов xs1 , xs2 и xs3 .

Пр и м е ч а н и е 4 . Операнды x s 1 , x s 2 и x s 3 могут совпадать.

Модификации scp-операторов типа searchSetStr3 задаются комбинацией атрибутов, которыми помечен операнд. Приведем некоторые модификации searchSetStr3-оператора.

4.2. Описание ядра языка SCP

79

П р и ме р 4 . 2 . 4 . 5

searchSetStr3

opi

 

 

 

1 _:

2_:

3_:

set2_:

f ixed_:

pos_: fixed_:

f ixed_:

const_:

 

 

 

x1

x2

x3

xs1

 

До

 

 

x1

x3

ri

 

 

 

 

 

 

vi

 

xs1

 

g1

 

 

 

g2

 

 

 

g3

 

 

 

Пример 4 . 2 . 4 . 6

 

 

 

searchSetStr3

 

 

opi

 

 

 

 

1 _:

2_:

3_:

 

set2_:

fixed_:

pos_:

node_:

 

set3_:

assign_:

const_:

const_:

 

 

x1

x2

x3

xs1

 

Д о

 

 

x1

vi

xs1

 

g1

 

 

 

g2

 

 

 

g3

 

 

 

В результате успешного выполнения данного оператора (o p i) будет найдена константная позитивная sc-дуга (v1 ) и константная позитивная sc-дуга (g i), соединяющая его с sc-элементом (ei), являющимся значением операнда x 3 . Также будут сгенерированы дуга, связывающая операнд x 2 с sc-элементом g i, и дуга, связывающая операнд x 1 с sc-элементом vi, а также дуги принадлежности, связывающие указанные выше дуги со знаком соответствующего бинарного отношения (ri). Генерация этих дуг означает, что у операндов x 1 и x 2 сформировалось (вычислилось) значение:

После

x1

x3

 

ri

vi

xs1

g1

 

g2

g3

Врезультате успешного выполнения данного оператора (opi) будут найдены константный sc-узел (vi) и константная позитивная sc-дуга (gi), соединяющая его с sc-элементом (ei), являющимся значением операнда x 3 . Также будут сгенерированы дуга, связывающая операнд x 2 с sc-элементом gi, и дуга, связывающая операнд x 1 с sc-элементом vi, а также дуги принадлежности, связывающие указанные выше дуги со знаком

соответствующего бинарного отношения (ri). Генерация этих дуг означает, что у операндов x 1 и x 2 сформировалось (вычислилось) значение:

 

После

x1

vi xs1

g1

ri

 

g2

vj

 

g3

 

80

4. Базовый язык программирования для графодинамических ассоциативных машин

П р и ме р 4 . 2 . 4 . 7

 

 

 

 

 

 

 

searchSetStr3

 

 

 

opi

 

 

 

 

1 _:

2_:

3_:

set1 _:

set2_:

 

const_: const_:

fixed_:

fixed_: assign_:

 

 

pos_:

 

 

 

 

x1

x2

x3

xs1

xs2

В результате успешного выполнения данного оператора (o p i) будут найдены константный sc-узел (vi) и константная позитивная sc-дуга (g i), соединяющая его с sc-элементом (ei), являющимся значением операнда x 3 . Также будут сгенерированы дуга, связывающая операнд x 2 с sc-элементом g i, и дуга, связывающая операнд x 1 с sc-элементом vi, а также дуги принадлежности, связывающие указанные выше дуги со знаком соответствующего бинарного отношения (ri). Генерация этих дуг означает, что у операндов x 1 и x 2 сформировалось (вычислилось) значение:

 

 

До

 

 

 

 

После

 

 

 

 

 

 

 

 

 

ri

 

 

 

 

xs2

v1

v2

v3

v4

 

vi

 

 

 

 

 

 

 

 

 

 

v1

v2

v3

v4

xs1

 

 

 

 

xs2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

 

 

 

 

 

xs1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

 

 

 

 

Операторы ассоциативного поиска произвольных элементов, удовлетворяющих заданным условиям, и формирования из них множества ( selectYStr3-операторы, операторы типа selectYStr3 )

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

Запись scp-операторов типа selectYStr3 на языке SCs имеет следующий вид:

запись selectYStr3 –оператора

::

 

 

 

 

 

 

selectYStr3

 

 

 

идентификатор selectYStr3-оператора

( fixed _ : |

 

 

 

[ (

const_ : | var_ : | meta _ : ) ] )

1 _ :

операнд x1 ,

 

 

 

/* данный атрибут уточняет, известно (вычислено) ли значение операнда */

/* данные атрибуты уточняют тип искомого sc-узла по признаку "константа –

переменная – метапеременная" */

/* операндом является программная переменная, или если указан атрибут fixed _ , то операндом может быть и

константа программы */