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

книги из ГПНТБ / Алферова, З. В. Математическое обеспечение экономических расчетов с использованием теории графов

.pdf
Скачиваний:
19
Добавлен:
20.10.2023
Размер:
8.54 Mб
Скачать

Алгоритм синтеза в языке АЛГЭК-С запишется следующим образом:

 

;нач

цел

 

Б1,

Б2,

CP;

цел

мае

А[20,

21], В[15, 1 6 ] ; С[30, 31], Л[10,21] ,

 

Л1[20,10],

Щ 1 0 , 1 6 ] ,

К1 [15,10];

 

 

 

 

 

 

 

 

 

 

цел

И, Ж , X, Р, Д, Е, П, 3,

Т, У, М, Н, К, СИ, Ш;

 

 

 

 

библ

('ВВОДЗ',

 

' I I ' ,

А,

В);

Н : = 2 0 ;

М: =

15;

Р : = 0 ;

 

Д : = 0 ; Е : = 0 ;

 

П : = 0 ; Т : = 0 ; Ш: = 1;

 

 

 

 

 

 

 

 

 

 

 

 

 

М20:

для

И : = 1:Н

цикл

нач

для

Х: = 1 : М

цикл

 

 

 

 

 

нач

если

А [И, 1] = В [ Х ,

1]

то

 

на

M l ;

 

 

 

 

 

 

 

кон;

Р : = Р + 1 ;

для

И : = 1 : Н

цикл

Л [Р, Ж ] : = А [ И , Ж ] ;

Ж : = И ;

 

для

И : = 1 : Н

цикл

Л1 [И, Р ] : =

А[И, Ж ] ;

 

 

 

 

 

 

кон;

 

П : = 3 ;

 

для

X: = 1 : М

цикл

 

 

 

 

 

 

 

 

 

 

нач

для

3 : = 1 : Р

 

цикл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нач

если

В[Х,

1 ] = С [ 3 , 1] то_на_М2;

 

 

 

 

 

 

 

 

кон;

 

Т : = Т + 1 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для

У: = 1 : 1 6

цикл

 

Ц[Т,У] : = В [ Х , У ] ;

У : = Х ;

 

 

 

 

 

для

Х: = 1 : М

 

цикл

Ц[Х, Т ] : = В [X, У];

Х : = У ;

 

 

 

 

М2:

кон;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нач

Е : = Р ;

для

Р : = 1 : Е

цикл

 

 

 

 

 

 

 

 

 

 

нач

С [ 3 , К ] : = Л [ Р ,

Ж ] ; К : = К + 1 ;

кон;

 

 

 

 

 

 

 

К : = Е ;

3: = 1;

для

И: = 1: Н

цикл

 

 

 

 

 

 

 

 

нач

С [ 3 , К ] : = Л [ И ,

Р];_на М40;

кон;

 

 

 

 

 

 

 

М40:

3 : = 3 + 1 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кон;

Е : = Т ;

для

Т: = 1: Е

цикл

 

 

 

 

 

 

 

 

 

 

нач

К: = 1;

для

 

У: == 1 : 16

цикл

 

 

 

 

 

 

 

 

 

 

_нач

С [ 3 , К ] : = Ц [ Т ,

У ] ;

если

К = Д

то на

МО;

К : = К + 1 ; н а М З ;

МО:

К : = К + Р ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

МЗ:

кон;

 

К : = 3 ;

 

3: = 1;

для

Х: = 1:М

цикл

 

 

 

 

 

 

 

иач

С [ 3 , К ] : = Ц [ Х , Т ] ;

ест

3 = Д _ т о на М4;

3 : = 3 + 1 ;

на

М5;

М4:

3 : = 3 + Р ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

М 5 :

кон;

3 : = 3 + 1 ;

 

кон;

К: = 1;

СИ: =

1;

Р : = 0 ;

 

 

 

 

 

М8:

для

3: = 1: Л

 

цикл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нач

если

С [ 3 , К] = С Р

то

на Мб; кон; на МЗО;

 

 

 

Мб:

К : = 3 ;

 

для_

3: = 1 : Л

цикл

СИ: = С И + С

[3, Д ] ;

 

 

 

 

 

если

С И > 2

_то

на

М7;

3 : = К ;

 

Ш : = 3 ;

на

М8;

 

 

 

М7:

П : = К ;

3 : = Д ;

3 : = 3 + 1 ;

С [ 3 , 1 ] : = Б 1 ;

С [ 3 , К ] : =

1; 3

: = 3 + 1 ;

 

С [ 3 , 1 ] : = Б 2 ;

 

С[3, . К] : = 1; _для

3 : = 1

: Д

цикл

 

 

 

 

 

нач

Д : = П ; если

С [ 3 , К] = 2

то

на

М9;

если С [ 3 , К] =

1

то

на М10;

 

на М П ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

М10: С [ 3 , К ] : = 0 ;

если

3 < ( Д — Т )

то_

ш_

М12;

К : = К + 2 ;

С [ 3 , К ] : = 1;

 

на М10;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

М9:

С [ 3 , К ] : - 0 ;

К : = Д ;

К : = К + 1 ;

С [ 3 , К ] : =

1;

К : * = К + 1 ;

С [ 3 , К ] : = 1 ;

М П :

кон^

К : = П ;

3 : = К + 1 ; на

МЗО;

 

 

 

 

 

 

 

 

 

МЗО:

для

К: = 1 : ( Л + 1 )

цикл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нач

для

 

3: = 1 : Д цикл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нач

если

С [ 3 , К] = 2

то

на

М12;

 

 

 

 

 

 

 

 

М13*

кон;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

М12:

С [ 3 , К ] : = 1;

на

MI2 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

библ

(ВЫВОД!',

'Г, С);

 

 

 

 

 

 

 

 

 

 

 

 

 

191

M l :

K : = 3 ; C[3,1] : = А [ И , Ж ] ;

_для

К: = 1:(М+1 )

цикл

 

нач

С [ 3 , К ] : = А [ И , Ж ] + В [ Х , У ] ;

если Ж = ( Н + 1 ) _ г о на М21;

 

если

У = ( М + 1 )

_то

_на

М22; У : = У + 1 ;

Ж : = Ж + 1 ;

M23:j

кон;

 

 

 

 

 

 

 

 

М22:

У : = У + 1 ; В [ Х , У ] : = 0 ;

Ж : = Ж + 1 ; _ н а

М23;

 

М21:

е_сли

У = ( М + 1 )

то_

на

М24;

Ж : = Ж + 1 ;

А [ И , Ж ] : = 0 ; У : = У + 1 3

 

на

М23;

 

 

 

 

 

 

 

М24:

Д : = 3; 3: = 3 + 1 ;

на

М20;

кон;

 

 

 

Блок-схема перевода матрицы смежности в векторную запись

графа

представлена

на

рис. 40.

Алгоритм перевода матрицы в

граф в языке АЛГЭК-С будет иметь следующий вид:

 

нач

цел

мае

В [ 1 : Р ] ,

А[1:П,

1:Т];

 

цел

X,

i ,

 

j , Т,

П,

Р;

 

 

 

 

библ

('ВВОДЗ',

'Г,

А);

 

 

М О :

 

j : = l ;

В [ Х ] : — a [ i , j ] ;

 

МЗ:

J : = j + 1 ;

 

если

j = T

то

на

M l ;

 

 

если

a[i,

j ] = l

то

на

М2;

на

МЗ;

М2:

Х : = Х + 1 ;

В [ Х ] : = а[1,]];_на

МЗ;

M l :

если

i = n

 

то

на

МЕТ;

 

 

 

 

i : = i + l ;

 

Х : = Х + 1 ;

на

МО;

 

МЕТ:

библ

('ВЫВОДГ,

'Г, В);

 

 

 

кон;

 

 

 

 

 

 

 

 

 

 

Рис. 40. Блок-схема преобразования матрицы в граф

Глава VIII

П Е Р С П Е К Т И В Ы И С П О Л Ь З О В А Н И Я

 

Т Е О Р ИИ ГРАФОВ

§ 8. 1. ИСПОЛЬЗОВАНИЕ ГРАФОВ

ДЛЯ ПРЕОБРАЗОВАНИЯ АЛГОРИТМОВ И ПРОГРАММ

Представление алгоритмов и программ в виде графов находит все большее применение [34, 62, 65, 80, 82]. Это обуслов­ лено тем, что в практическом использовании большое распрост­ ранение получил блок-схемный способ их представления. Блоксхема, по существу, является простейшим графическим способом представления алгоритмов. Однако отсутствие формализации в блок-схемах исключает возможность автоматизации программиро­ вания на их основе, а также различных формальных преобразо­ ваний алгоритмов.

В то же время блок-схема легко превращается в граф-схему введением функциональной детализации блоков и ориентирован­ ных связей между ними.

На этапе представления алгоритмов в виде граф-схем возни­ кает возможность развития формализованного аппарата для эк­ вивалентных преобразований алгоритмов. Переход к представле­ нию алгоритмов и программ в виде ориентированных графов от­ крывает дополнительные возможности, часть из которых была рас­ смотрена в данной работе.

В настоящее время имеется формализованный аппарат для пре­ образования алгоритмов и программ из строчной записи в графы, называемый парной грамматикой [90].

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

13. Заказ 4230.

193

преобразования графов в строки, а также для преобразования графов в графы.

Поскольку языки программирования довольно хорошо изучены, остановимся только на характеристике графовой грамматики и языке, порождаемом этой грамматикой. Графовая грамматика представляет собой обобщение обыкновенной контекстно-свобод­ ной (КС) грамматики, порождающей языки программирования.

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

дугами.

 

 

 

 

 

 

Пусть Ау

и Аи — конечные алфавиты, соответствующие мно­

жеству

значений вершин и

меток

дуг графа. Тогда граф G над

Ау и Ам

будет определяться

как G (N, V, F ) , где N — конечное

множество

вершин;

V: N—*Ау

функция,

задающая значение

каждой

вершине; F^NxAMXN

 

множество

дуг и соответствую­

щих им меток.

 

 

 

 

Если

(п,

a, m)^F,

то это дуга с меткой а из вершины п в вер­

шину т. Если задан граф G, то принадлежащие ему множества вершин, функций значения вершин и дуг будем обозначать соот­

ветственно NG,

VG, F G .

 

 

 

 

 

 

 

 

Если Ay и Ам — алфавиты, то

 

 

 

 

 

 

 

G\(AV,

AM)

= {G\G — граф над Ау

и

Ам).

Если

Ау

и

Ам

известны,

будем

писать

просто

G1 вместо G1

{Ау, Ам).

 

 

 

 

 

 

 

 

 

 

 

Графовый язык над Ау и Ам

— это последовательность графов

вида G1 (Ау,

Ам).

 

 

 

 

 

 

 

 

 

Графы

G и Я,

являющиеся

элементами

G1, эквивалентны

(G==H)

с точностью до изоморфизма, если

существует такая фун­

кция ф, что

 

 

 

 

 

 

 

 

 

 

 

1) v „ e / V G ,

VG(n)

=

VH{4>(n)),

 

 

 

 

2) (п,

а,

т)

е= F G ,

когда

(ф(п),

а, ф(т))

^

F H

Если графы G, Я и К являются элементами G1, то Я и К будут частичными графами от графа G в случае выполнения условий:

1)

N B { \ N K = 0 ,

 

NQ =

-NH\)NK;

 

2)

Vn^NH,

VH(n)

= VG(n)

и Y,n^NK,

VK(m) = VG(m);

3)

FH={(n,

a,

m)

<= FG\n,

m e= N H }

;

4)

FK={(n,

a,

m)^FG\n,

m<=NK} •

 

Графовой

грамматикой

будем

называть

совокупность

(AN,

АТ, Ам,

S,

P),

где AN

— конечное множество нетерминальных

сим­

волов;

АТ

— конечное множество

терминальных

символов;

Ам —

конечное множество

меток

дуг; S^AN — начальный нетерминаль­

ный символ; Р — конечное множество правил грамматики.

 

Каждое правило

грамматики представляет собой совокупность

194

вида Г= (G, Я, I , О), в которой

G e G l

(AN,

Ам),

и имеет

только

единственную изолированную вершину.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HeGl(AN\j

 

 

Ат,

Ам)

 

и

 

 

NH^0-

 

 

 

 

/ е Л ' н входная вершина;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0^NH

 

— выходная вершина.

Г=

(G, Я, I , О)

можно

записать

Коротко правило грамматики

в виде

 

 

 

Л - + Я <

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где Л—нетерминальный

символ,

соответствующий

значению

одной из вершин графа G.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Каждое правило определяет возможное преобразование вер­

шины, являющейся нетерминальным

символом.

 

 

 

 

 

 

Будем говорить, что граф Я непосредственно порождается из

графа

G в грамматике Г—G

=> Я, если существует такое

правило

Р = ( # , К,

/, О), что

 

 

 

 

G'

и G",

 

G'=R

 

 

 

1)

G может быть частью

графов

где

включает

NQ , содержащее только одну вершину —

n s

;

 

 

 

 

 

 

2)

Я может быть частью графов Н'

и Я", если

 

 

 

 

 

а)

H"==.G"

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

б)

Н'

=К .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в)

FH

= FH,

U FH»[}{(m,

а,

 

/ ) | (m,

 

a,

n Q ) e / 7

G ,

т = ^ " 0 }

 

 

 

 

 

 

U{(О,

а,

 

/п) | ( я s

,

a,

 

m)<=FG,

тфп

 

J

 

 

 

 

 

U ((.О,

а,

 

/ ) | ( л а

,

а,

 

 

ftjefo}

 

 

 

 

Таким

образом, получение

Я

из

 

G,

следуя правилу

Л—1 о,

С О С Т О И Т

в

подстановке в граф

G вместо

вершины

 

значения

Л

из графа /С. При этом дуги,

входящие

в

 

« s

,

заменяются

дугами,

ведущими в /, дуги, выходящие

из n s , дугами, выходящими из

О,

любая петля в вершине п 8

заменяется

дугой из О в /.

 

грамма-

Будем

говорить, что граф

 

Я

выводится

из

графа

G в

тике

 

 

*

 

 

 

 

 

такая

последовательность

хи

Г — G=> Н, если существует

Х2,---,хп,

 

г

каждое x^Gl

 

 

(AN[}AT,

 

 

Ам).

 

 

 

 

 

 

 

 

что

 

 

 

 

 

При

этом

G = x j ,

Я = д ; п и Xj=>

для t'= 1,2

 

 

п — 1.

 

 

 

 

 

 

 

 

 

 

 

 

 

г

 

 

 

 

 

 

 

Г,

есть множество

графов

Язык L , определенный грамматикой

вида

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*

 

 

 

 

 

 

 

 

 

L r = {Ge=Gl(AT,

 

 

AM)\Sr

 

=>

G,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

г

 

 

 

 

 

где Sr — начальный граф грамматики Г вида 5г = ({«}, {(я, 5 ) } , 0 ) •

Графовая грамматика порождает язык «терминальных графов» аналогично тому, как контекстно-свободная грамматика порожда­ ет множество терминальных строк. Вывод начинается с графа,

13*

195

включающего единственную нетерминальную вершину. На каж­ дом этапе преобразований одна нетерминальная вершина заме­

няется графом в соответствии с правилами

грамматики.

Процесс

преобразований продолжается до тех

пор, пока не останется ни

одной нетерминальной вершины.

 

 

 

 

 

Определим теперь парные грамматики. Под парной

граммати­

кой понимается пара графовых грамматик

над одними и теми же

алфавитами вместе с соответствиями,

установленными

между

правилами этих грамматик и между

нетерминальными

вершинами

в правилах.

 

 

 

 

 

Пусть заданы:

 

 

 

 

 

1)

алфавиты AN, Ат, Ам\

 

 

 

 

 

2)

графы G и Н из множества Gl

(AN,

Ат,

Ам);

 

 

3)

нетерминальные вершины графа G •—

 

 

 

 

Nl={ne=NG\VG{n)

 

е Л „ } ;

 

 

4)

нетерминальные вершины графа Н —

 

 

 

 

NH={n^NH\VH(n)^AN}

 

,

 

 

тогда нетерминальная вершина спаренных графов G и Н опреде­ ляется с точностью до изоморфизма h следующим образом:

 

 

 

 

V „ e / V o .

VG(n)

= Vn(h(n))

 

 

 

 

 

 

 

Парная

грамматика

определяется

как Г=

(AN,

 

Ат, Ам,

S,

Q),

где

AN,

Ат,

 

Ам — соответственно

алфавиты нетерминальных, тер­

минальных

символов и

меток

дуг, S^AN

— начальный

символ, а

Q —конечное

множество

наборов

(/, q,

к).

В этих

наборах /, q —

правила

таких графовых грамматик,

что

если

/

есть

правило

А^G'o

и q — правило А1—>HTV,

то А=А'

и h — нетерминальная

вершина спаренных графов G и Н.

 

 

 

 

 

 

 

 

 

 

 

 

Пусть Г— (AN, AT, AM, S,

 

Q) — парная

грамматика.

Если

q =

= (/, р, / i ) & Q , то / называется левым правилом

q,

а

р — правым

правилом q, h — спаренная нетерминальная вершина q.

 

 

 

 

вой

Графовая

грамматика Г=

(AN, Ат, Ам,

S,

Р)

называется

ле­

(правой)

грамматикой,

если

Р представляет

собой

множест­

во левых (правых) правил Q.

 

 

 

 

 

 

 

 

 

 

Г,

 

 

 

Язык,

порождаемый

левой

(правой)

грамматикой

называ­

ется левым

(правым) языком.

 

 

 

 

 

 

 

 

 

 

 

 

 

Язык, порождаемый парной грамматикой Г, состоит из упоря­

доченных пар графов левого и правого языков.

 

 

 

 

 

 

 

 

Парная грамматика определяет пары графов, получаемые из

одного и того же начального

графа параллельно. На

каждом

эта­

пе преобразований имеется пара графов,

каждый

из

которых

включает

несколько нетерминальных вершин и соответствия

меж­

ду

этими

нетерминальными

вершинами. При каждом

преобразо­

вании пара

соответствующих

нетерминальных

вершин,

по одной

из графа,

заменяется в соответствии

с правилами

парной

грамма-

196

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

 

Спаренный граф X над алфавитами AN,

Ат,

Ам

определяется

как

X=(G, Я, h), где G и H^Gl

(AN{jAT,

Ам),

a

h — нетерми­

нальная вершина спаренных графов G и Я.

 

 

 

AN, Ат,

 

Терминальный спаренный граф Z

над

алфавитами

Ам

это спаренный граф вида

Z={G,

Я,

А), в котором все вер­

шины графов G и Я являются

терминальными.

В

этом

случае

множество нетерминальных спаренных вершин будет пусто и граф

можно записать как Z— (G,

Н).

 

 

 

 

 

Пусть задана парная грамматика r=(AN,

Ат, Ам,

S,

Q) и па­

ра графов X=(GX,

Нх, hx)

и У = (Gy,

Ну, hy)

над алфавитами

AN,

Ат, AM-

 

 

 

выводится из X,

сле­

Будем говорить, что У непосредственно

дуя грамматике Г X=> У, если существует

правило

(/,

р,

h)^P,

нетерминальная

вершина п

в графе

G и нетерминальная

вершина

m в графе Я такие, что

1)hx(n)=m (т. е. нетерминальные вершины спариваются);

2)Gx=3* Gv в результате применения правила / для преобра­ зования вершины ft;

3)Яж=>- Ну в результате применения правила Р для преобра­ зования вершины т;

4)hy = hUhx{(я, т )}.

 

Будем

говорить, что

У выводится

из

X,

следуя грамматике Г

 

#

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

г<=>У,

если

существует

такая

последовательность

опарен-

ных

графов

2 Ь

Z2,...,Zn

над

алфавитом

(AN,

А-г, Ам),

что

Х =

— Z\,

y=Zn

 

и Zi

Z j + i

для

i=

1, 2, 3,...,

ft—

1.

 

 

 

 

Язык,

порождаемый

грамматикой

Г,

называется спаренным

языком, если он

определяется

как

L={X\X

 

— терминальный

спа-

 

 

 

 

 

 

 

 

 

 

 

 

*

 

 

 

ренный граф над алфавитами AN, АТ,

А

М И Sr

=> X).

 

 

 

Парная

грамматика

Г — однозначная,

если и левая и правая

грамматики,

принадлежащие

Г, — однозначны

и грамматика

Г не

содержит двух различных правил с идентичными левыми или пра­ выми правилами.

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

Используя однозначную парную грамматику,

можно достаточ­

но легко

найти

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

элементу

левого

языка. Пусть Г — однозначная

парная граммати­

ка, левый

язык

которой — множество строк, а правый язык —мно-

197

жество графов. И пусть X — строка в левом языке, которой в пра­ вом языке соответствует граф X'.

Процесс преобразования строки в граф может быть организо­

ван следующим образом. Прежде всего для

строки X выполняется

грамматический разбор на основе правил

левой грамматики, ре­

зультат которого представляется в виде вывода

 

S=> Zx=> Z 2 = ^ . . .=>Zn

= X •

 

После этого, используя правила правой

грамматики и

соответст­

вия парной грамматики, строку X преобразуют в граф X'. Процесс

преобразования начинается с графа 5,

содержащего

единствен­

ную вершину, и включает точно п шагов.

 

 

 

Таким образом, парные грамматики

дают формальный аппа­

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

Изучение парных грамматик является

перспективным

не толь­

ко с точки

зрения формализации процессов трансляции, но и в

связи с широким применением графов как

в теории программиро­

вания,

так

и в организации процессов обработки информации.

В

этой

связи рассмотрим следующее

расширение

графовой

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

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

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

1)Я ^ = Л У ;

2)Я-граф первого уровня над алфавитами Лу, Ам— это граф

над алфавитами Ау,

Ам;

 

 

3) Я , (AV,

Ам)

=G\(AV,

Л м ) — набор всех Я-графов

первого

уровня;

 

 

над алфавитами Л у, Ам

 

4) Я-граф

к-го

уровня

— это

198

граф над

Hi

(Лу, Ам), Ам, содержащий хотя бы одну вер­

шину Нк-\\

 

 

 

5) Нк (Av,

Ам)

= {Х\Х — это Я-граф/с-го уровня};

 

6) Н(Ау, Ам) =\Зк2(Ип — это множество всех Я-графов

над ал­

фавитами Av,

АМ-

 

 

Введем теперь для каждой терминальной вершины дополни­

тельный параметр — метку. Теперь каждая терминальная

вершина

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

При иерархической структуре графов объединение вершин с

одинаковыми метками разрешается производить только

в

одном

и том же графе в пределах иерархии. Таким образом,

не

могут

быть объединены вершины, расположенные на различных уровнях

Я-графа, а также

вершины,

расположенные в различных графах

одного уровня.

 

 

 

 

 

Введение меток облегчает процесс компиляции из строчного

языка в язык графов. В этом случае метки вершин

выполняют

примерно те же функции, что и таблица

символов.

 

 

В заключение

приведем

пример

представления

АЛГОЛ-про-

граммы (рис. 41)

в виде блок-схемного графа

(рис. 42) .получен­

ного в результате

преобразований по правилам

соответствующей

парной грамматики.

procedure flbsmaxta,n,/n.yi.k},

array a: integer n. m. i. k; real у. begin integerp, q.

for p. = / step l until n do

for

q.== I step 1 unti I m do

 

if

abs (af p, q.]) > у then

 

 

begin у : = abslafp, a])\i

.~p; k:~o end

etstg: = y

 

 

end

 

 

 

Рис. 41. Пример

АЛГОЛ-пропраммы

 

Следует особо подчеркнуть

перспективность

использования

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

199

Соседние файлы в папке книги из ГПНТБ