
- •6.1.2.2. Присваивание ссылок на объект
- •7. Дистанционное обращение
- •7.1. Дистанционные идентификаторы
- •7.2. Присоединения
- •9.2. Квазипараллельное исполнение
- •Integer procedure pos;
- •Inspect sysout do inspect sys in do
- •11.4.2. Семантика
- •1 12.1. Последовательности псевдослучайных чисел
- •14.2.3.2. Семантика
- •14.2.4. Управляющие процедуры
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шении текстовых значении и при присваиваниях текстовых значений.
Следующие процедуры употребляются для получения доступа к литерам. Они приспособлены к организации последовательного доступа.