Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дал У.И.Симула 67.doc
Скачиваний:
8
Добавлен:
01.03.2025
Размер:
216.58 Кб
Скачать

9.2. Квазипараллельное исполнение

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

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

Квазипараллельная система состоит из «компонент» си­стемы, каковыми являются главная программа и самостоя­тельные объекты (содержащие, разумеется, экземпляры бло= ков, динамически вложенные в такие объекты), для которых минимальным объемлющим экземпляром блока с префиксом является главная программа системы. Компоненты квазипа­раллельной системы по определению считаются «самостоя­тельными на» уровне данной квазипараллельной системы.

С любой компонентой системы связано «локальное упра­вление» (ЛУ), а с каждой квазипараллельной системой в це­лом— «внешнее управление» (ВУ)Ч Внешнее^ управление на уровне системы, равном нулю, совпадает с УП. ВУ некоторой квазипараллельной системы на уровне k (£^1) совпадает с ЛУ той компоненты на (k— 1)-м уровне системы, которая объемлет данную систему.

"Для любой данной квазипараллельной системы в каждый данный момент одна и только одна из ее компонент является «активной». ЛУ этой компоненты совпадает с ВУ квазипарал­лельной системы.

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

В любой данный момент существует такая последователь­ность компонент систем XOt Х\у ..., ХПу что

Xh активна на уровне системы k (k = 0, 1, ..., п);

Xh вложена в Xk^i (k = 1,2, ..., п)\

в Хп не вложено никакой квазипараллельной системы.

Эта последовательность называется «работающей цепоч­кой». Все компоненты системы в работающей цепочке содер­жат УП и поэтому называются.работающими. ЛУ некоторой компоненты остается неподвижным до тех пор, пока эта ком­понента не станет членом работающей цепочки1).

9.2.1. Оператор detach (открепить) .

Пусть X — наименьший работающий экземпляр блока. Если X является прикрепленным объектом, оператор откре­пить производит следующие действия:

объект становится самостоятельным (открепленным) на уровне системы наименьшего объемлющего экземпляра блока с префиксом, а его ЛУ останавливается в конце опе­ратора detach;

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

Если X является самостоятельным объектом, являю­щимся компонентой некоторой квазипараллельной системы S, то оператор detach производит следующие действия:

1) ВУ системы 5 покидает X. В результате X удаляется из работающей цепочки, а его ЛУ останавливается в конце.

оператора detach; - .

2) ВУ системы 5 входит в главную программу системы S на текущую позицию "ее Л У. В результате главная про­ грамма системы 5 и, возможно, компоненты систем на уров­ нях, более высоких, чем уровень S, станут работающими.

Если X есть экземпляр блока с префиксом, то оператор detach вдкаких действий не производит.

Если X есть экземпляр блока, но не объект и не экзем­пляр блока с префиксом, то использование оператора detach представляет собой ошибку.

+

9.2.2. Оператор resume (возобновить)

Оператор resume формально является процедурой с ojx-ним параметром гипа ссылок на объект, квалифицирован­ным некоторым фиктивным классом, объемлющим все классы.

Пусть фактический параметр'оператора resume ссылается на некоторый самостоятельный объект У, являющийся ком­понентой некоторой квазипараллельной системы 5. Согласно правилам языка на Y можно сослаться только изнутри эк­земпляра блока (назовем его X), являющегося компонентой той же системы 5 или вложенного в некоторую компоненту

этой системы. Экземпляр блока X является в данный момент работающим. Оператор resume производит следующие дей­ствия:

г

ВУ системы 5 покидает X. В результате сам X и все работающие компоненты на более высоких уровнях системы удаляются из работающей цепочки. ЛУ каждой компоненты останавливается в конце оператора resume";

ВУ системы 5 входит в У на текущую позицию его ЛУ. В результате Y и, возможно, последовательность компо­нент на более высоких уровнях системы становятся рабо­тающими.

Если фактический параметр оператора resume не ссы­лается на самостоятельный объект, то при выполнении опе­ ратора выдается сообщение об ошибке,

9.2.3. Выход через «end» объекта

Результат того, что УП выходит через замыкающий сим--вол end объекта, совпадает с действием оператора detach с тем отличием, что объект становится завершенным (а не самостоятельным) и, таким образом, теряет свое ЛУ.

9.2.4. Операторы перехода

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

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

10. ТИП «ТЕКСТ» . ' '

10.1. АТРИБУТЫ ТЕКСТА

Приводимые ниже процедуры являются атрибутами лю­бой ссылки на текст. К ним можно обращаться посредством дистанционных идентификаторов вида

(простое текстовое выражение) . (идентификатор процедуры).

integer procedure length

text procedure main

integer procedure pos

procedure setpos

Boolean procedure more

character procedure getchar

procedure putchar

text procedure sub

text procedure strip

integer procedure getint

real procedure getreal

integer procedure getfrac

procedure putint

procedure putfix

procedure putreal

procedure puttext

procedure putfrac

В следующих разделах буква X, если не оговорено про­тивное, означает ссылку на текст.

процедуры-атрибуты length и main .

integer procedure length ;

Процедура X . length доставляет в качестве своего значе­ния количество литер текстового значения, .на которое ссы­лается X (ср. разд. 3.2.3). Выражение notext. length имеет значение, равное нулю.

text procedure main ;

Процедура X.main доставляет в качестве своего значения ссылку на текстовый объект, являющийся текстом, на кото­рый ссылается X, или содержащий такой текст (ср. разд. 3.2.3).

Выражение notext. main эквивалентно выражению notext.

Для любой ссылки на текст выполняются следующие от­ношения:

X. main . length ^ X. length

X. main . main = = X. main

10.3. ДОСТУП К ЛИТЕРАМ

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

Указатель позиции ссылки X — это целое число в интер­вале [1, X . length + 1].

Указатель позиции для notext равен единице. Ссылка на текст, получаемая в результате вызова любой системной текстовой процедуры, имеет указатель позиции, равный еди­нице.

Указатель позиции данной ссылки на текст можно изме­нить процедурами setpos, getchar и putchar. Кроме того, лю­бая из процедур, определенных в разд. 10.9 и 10.10, может изменить указатель позиции ссылки на текст, атрибутом кото­рого является такая процедура.

Указатели позиций не принимаются во внимание и не из­меняются при вычислении отношений ссылок на текст, othqшении текстовых значении и при присваиваниях текстовых значений.

Следующие процедуры употребляются для получения до­ступа к литерам. Они приспособлены к организации последо­вательного доступа.