если (13НАЧЕНИЯ) есть (7ОБЫЧНЫЕ объединение ЮБЫЧНЫХ1 воедино 73НАЧЕНИЯ),
ЕСЛИ 7ОБЫЧНЫЕ ІОБЫЧНЫЕ1 .'ЗНАЧЕНИЯ сплетены с ЮБЫЧНЫМИ {g}.
{Никакой составляющий вид объединения не может приводиться укреплением к одному из других составляющих видов этого объединения или к их объединению (, правило f), так как в противном случае может возникнуть двусмысленность. Например, ядр<р
об (имя цел, цел) (лок цел)
двусмысленно в том, что разыменование может как появиться, так и нет перед объединением. Аналогичновид сеп = об (середи, петер);
об (имя сеп, сеп) (док сеп)
двусмысленно. Отметим, что из-за сплетения (, правило g,) вид, специфицируемый описателем данного ядра, точнее обозначается описателем об (имя сеп, середи, петер) .}
Индикаторы и указатели полей
Синтаксис
ИНДИКАТОР :: идентификатор; индикатор вида;
обозначение операции.
ПРИМЕНЯЮЩИЙ :: определяющий; использующий.
7ПАРЫ :: !ПАРЫ; ПУСТО.
!ПАРЫ :: ПАРА; !ПАРЫ ПАРА.
ПАРА :: ОПИСАНИЕ; МЕТКА; ПОЛЕ.
■СПАРА :: ОБОЗНАЧЕНИЕ для ПРИЗНАКА.}
ПРИЗНАК :: ВИД; ЗНАЧЕНИЕ НОМЕР; БИНАРНОЕ;
метка; выборка ВИДА.
ОБОЗНАЧЕНИЕ :: СЛОВО; ИНДИКАНТ; ИНФИКС; ПРЕФИКС.
определяющий ОБОЗНАЧЕНИЕ ИНДИКАТОР в СРЕДЕ с
новыми 7ПАРАМИ1 ОБОЗНАЧЕНИЕМ для ПРИЗНАКА 7ПАРАМИ2 выдающий ПРИЗНАК {32с, 35b, 42b, 43b, 44с, f, 45с, 541f}:
знак ОБОЗНАЧЕНИЕ {942А, D, F, К},
если ОБОЗНАЧЕНИЕ для ПРИЗНАКА не зависит
от 7ПАР1 7ПАР2 {71а, Ь, с}.
использующий ОБОЗНАЧЕНИЕ ИНДИКАТОР в СРЕДЕ
выдающий ПРИЗНАК {42с, 46а, b, 5D, 542а, Ь, 544а}:
знак ОБОЗНАЧЕНИЕ {942А, D, F, К}, если ОБОЗНАЧЕНИЕ для ПРИЗНАКА
идентифицировано в СРЕДЕ {72а}.
определяющий СЛОВО указатель поля вида ВИД
среди 7ПАР1 СЛОВА для выборки ВИДА 7ПАР2 {46f}:
знак СЛОВО {942А},
если СЛОВО для выборки ВИДА
не зависит от 7ПАР1 7ПАР2 {71а, Ь, с}.
использующий СЛОВО указатель поля
вида ВИД среди ІПОЛЕЙ {531а}:
знак СЛОВО {942А},
если СЛОВО для выборки ВИДА находится в ’.ПОЛЯХ {72b, с, -}.
* ПРИМЕНЯЮЩИЙ ОБОЗНАЧЕНИЕ индикатор в СРЕДЕ
выдающий ПРИЗНАК:
ПРИМЕНЯЮЩИЙ ОБОЗНАЧЕНИЕ ИНДИКАТОР
в СРЕДЕ выдающий ПРИЗНАК {а, Ь}.
f)* ПРИМЕНЯЮЩИЙ СЛОВО указатель поля вида ВИД:
ПРИМЕНЯЮЩИЙ СЛОВО указатель поля
вида ВИД среди !ПОЛЕЙ {с, d}.
S-1361-[Примеры:
а) х (в вещ х, у) Ь) х (в х + у)
с) следующая (см. 1.1.2) d) следующая (в следующая из
проект) }
4.8.2. Семантика
Когда какое-нибудь значение или сцена V „приписывается” определяющему ОБОЗНАЧЕНИЕ-индикатору-выдающему-ПРИЗНАК в окружении Е, 'ОБОЗНАЧЕНИЕ для ПРИЗНАКА' получает доступ к V внутри участка этого Е -C2.l_2.cJ-.
Выдача W использующего-ОБОЗНАЧЕНИЕ-индикатора-выдающего- ПРИЗНАК 1 в окружении Е, составленном из окружения Е1 и участка L, определяется следующим образом:
Если L соответствует '7ОПИСАНИЯМ 7МЕТКАМ', в которые заложено {1.1.4.1.с} это 'ОБОЗНАЧЕНИЕ для ПРИЗНАКА',
то W — значение или сцена, если они существуют, доступные для 'ОБОЗНАЧЕНИЯ для ПРИЗНАКА' внутри L, и не определено в противном случае;
иначе W - выдача этого 1 в Е1.
{Рассмотрим замкнутое-предложение, содержащее другое такое же: начало прим блок 1 прим
цел і = 421, цел а := 5, проц р = пуст : печ (а);
начало прим блок 2 прим
вещ а; а := і; р конец
конец
К тому времени, когда в ходе исполнения встретится а := і, будут созданы два новых окружения, по одному для каждого блока.
Сначала идет поиск определяющего-идентификатора і в Е2, младшем из них, и, поскольку он не найдется там, то начнется поиск (успешный) в старшем окружении в Е1. Участок этого Е1 соответствует 'букве и лат для целого букве а для имени целого букве пэ лат для процедуры вырабатывающей пустое значение'. Следовательно, выдачей данного использующего-иденти- фикатора і будет значение 421, приписанное (а) 'букве и лат для целого внутри участка окружения Е1. Однако выдача идентификатора а в а := і найдется в участке окружения Е2.
Когда вызывается (5.4.3.2.Ь) процедура р, ее основа исполняется в некотором окружении ЕЗ, устанавливаемом вокруг Е1, но по Е2 (3.2.2.Ь). Это означает, что в отношении области действия ЕЗ младше Е2, а Е1 - составляющее окружение этого ЕЗ. Когда а должно печататься, оно является выдачей идентификатора-выдающего-имя-целого, описанного во внешнем из имеющихся блоков, и эта выдача есть 5.
Таким образом, смысл индикатора, используемого, но не описанного внутри процедуры, определяется контекстом, в котором эта процедура была создана, а не тем, в котором она вызывается.}
5. ОСНОВЫ
{Основы используются для программирования примитивных действий или превращения в единичные компоненты больших конструктов из разд. 3.
Приведенные-ПОНЯТИЯ, но не доопределения, являются результатом приведений (разд. 6); в случае ЗАКРЫТЫХ-предложений любые требуемые приведения осуществляются внутри них.
Из задаваемого ниже синтаксиса следует, например, что текст из отчет + „конец” разбирается как (текст из отчет) + „конец”, поскольку выборка есть ‘ВТОРИЧНОЕ', а формула - 'ТРЕТИЧНОЕ'.У
Синтаксис
А) ОСНОВА {32dT :: приведенное присваивание {521 а};
приведенное отношение одноименности {5 22а};
приведенный текст процедуры 541а, b ; переход (544а) : пропуск [ 522а} ; ТРЕТИЧНОЕ { В} .
В) ТРЕТИЧНОЕ {A, 521b,522а} :: псевдоимя {524а} ;
приведенная АРНАЯ формула { 542а, b} ; ВТОРИЧНОЕ { С } .
С) ВТОРИЧНОЕ { В, 531а, 542с} :: приведенная выборка {531а} ;
приведенный ЛОКАЛИЗУЮЩИЙ генератор { 523а} ;
ПЕРВИЧНОЕ {D}.
D) ПЕРВИЧНОЕ {С, 532а, 543а} :: приведенная вырезка [ 532а} :
приведенный вызов [551а];
приведенное изображаемое { 80а} ;
приведенное ядро {551а} ;
приведенный текст формата {А341а} ;
приведенный использующий СЛОВО идентификатор {48b} ;
ЗАКРЫТОЕ предложение { 31а, 33а, с, d, е, 34а, 35а}_
f Гиперправила для 'приведенной ФОРМЫ ПРИВОДИМО выдающей ЗНАЧЕНИЕ', данные в 6.1.1.a, b, с, d и е, служат входами в синтаксис при-, ведений. Когда этот синтаксис приведений запрашивается для какой-то 'приведенной ФОРМЫ ПРИВОДИМО выдающей ЗНАЧЕНИЕ', он в конце концов возвратится (, исключая тупики,) к некоторому правилу для 'ФОРМЫ выдающей ЗНАЧЕНИЕ1' в данном разделе, Именно на эти правила даны ссылки в метаправилах, перечисленных выше. Синтаксис приведений просто преобразует 'ЗНАЧЕНИЕ' в 'ЗНАЧЕНИЕ 1' для семантики; в это время не порождается никакой другой видимый наследник. J а) * доопределение ДЕЙСТВУЮЩЕЕ :
переход ДЕЙСТВУЮЩИЙ {544а};
пропуск ДЕЙСТВУЮЩИЙ {552};
псевдоимя ДЕЙСТВУЮЩЕЕ { 524а} .
{ Видом доопределения всегда является апостериорный вид, требуемый контекстом; выдача доопределения приемлема для этого вида. Поскольку любой вид легко получить таким образом, никакие приведения здесь не разрешены. }Основы, связанные с именами
{ Именам можно присваивать (5.2.1), их можно сравнивать с другими именами (5.2.2) и создавать (5.2.3).}
Присваивания
[ В присваиваниях значение „присваивается” имени. Например, в х := 3.14 выдаваемое источником 3.14 вещественное число присваивается имени, выдаваемому получателем х.}
Синтаксис.
присваивание в СРЕДЕ выдающее ИМЯ ВИДА £ 5а} : получатель выдающий ИМЯ ВИДА в СРЕДЕ £ b}.
знак присвоить {94с} , источник вида ВИД в СРЕДЕ £ с }.
получатель выдающий ИМЯ ВИДА в СРЕДЕ £ а}:
ТРЕТИЧНОЕ в СРЕДЕ мягко выдающее ИМЯ ВИДА [5в] .
источник вида ВИДІ в СРЕДЕ £а, 44dJ :
основа в СРЕДЕ сильно выдающая ВИД2 132dJ .
если ВИД2 фиксирует ВИДІ { 47а, Ь, с, -}.
£ Примеры:
а) х : = 3.14 Ь) х
с) 3.14}
Семантика.
Всякое присваивание А исполняется следующим образом:
пусть N и W — £ совместные} выдачи £имя и некоторое другое значение} получателя и источника этого А;
W присваивается £ b} N:
выдачей А служит N.
Значение W „присваивается” имени N, видом которого является некоторое 'ИМЯ ВИДА', следующим образом:
Требуется, чтобы
N не было псевдоименем и
W по области действия не было младше N;
Случай А; 'ВИД' есть 'структура содержащая 1ПОЛЯ в себе': Для каждого 'СЛОВА', выбирающего поле в W, • это поле присваивается подымени, выбираемому по 'СЛОВУ' в N;
Случай В: 'ВИД' есть 'МАССИВ из ВИДА1':
пусть V — £сгарое } значение, именуемое N; требуется, чтобы паспорта W и V были идентичны;
Для каждого индекса 1, выбирающего элемент в W,
этот элемент присваивается подымени, выбираемому по IbN;
Случай С: 'ВИД' есть 'подвижный МАССИВ из ВИДА1': пусть V - £ старое} значение, именуемое N;
N начинает именовать массив, составленный из (і) паспорта значения W,
(іі) вариантов,{4.4.2.с} некоторого {, возможно скрытого,} элемента значения V;
• N снабжается подыменами {2.1.3.1 .g} ;
Для каждого индекса 1, выбирающего элемент в W,
этот элемент присваивается подымени, выбираемому по IbN;
Остальные случаи {, например, если 'ВИД' есть 'ПРОСТОЕ' или некоторый'ПРЕДСТАВИТЕЛЬ'} : .
N начинает именовать { 2.1,3.2а} W
{ Если дано
подв [1 : 0] [1 : 3] цел подвфикс,
то наличие скрытого элемента {2.1.3.4.с} гарантирует, что смысл присваивания подвфикс := лок [1 : 1] [1 : 3] цел вполне определен, в то время как смысл присваивания подвфикс := лок [1:1] [1:4] цел не определен, так как граничные пары по второму измерению различны.}
Отношения одноименности
{ Отношения-одноименности могут использоваться, чтобы узнать, совпадают ли два имени одного и того же вида.
Например, после присваивания проект := („абв”, нил) отношение-одно- именности следующая из проект : = : имя книга (нил) выдает значение истина. Однако следующая из проект : = : нил выдает ложь, поскольку оно эквивалентно следующая из проект :=: имя имени книга (нил), здесь выдача ТРЕТИЧНОГО следующая из проект есть безо всяких приведений имя, именующее второе поле структуры, именуемой значением проект и, следовательно, не являющейся псевдоименем.}
Синтаксис.
отношение одноименности в СРЕДЕ
выдающее логическое { 5 А} :
если мягко уравнивает ПРИВОДИМОЇ и ПРИВОДИМО2 f 32f} , ТРЕТИЧНОЕ 1 в СРЕДЕ
ПРИВОДИМОЇ выдающее имя ВИД £5В} , сравнитель имен fb},
ТРЕТИЧНОЕ2 в СРЕДЕ
ПРИВОДИМ02 выдающее имя ВИД £ 5 В_} .
сравнитель имен { a J : знак есть {94}};
знак не есть {94fJ.
{ Примеры:
следующая из проект : =: имя книга (нил)
: = : • :=#:}
f Данным синтаксисом не порождается al [і] :=: al |j]. Тем самым предотвращается сравнение временных имен (2.1.3.6.с) посредством отношения-одноименности. }
Семантика.
Выдача W отношения-одноименности 1 определяется следующим образом:
• пусть N1 и N2 — {совместные} выдачи ТРЕТИЧНЫХ этого 1;
Случай А: Знаком сравнителя-имен этого 1 является знак-есть:
W — истина, если { имя} N1 есть то же, что и N2, и ложь в противном случае;
Случай В: Знаком сравнителя-имен этого 1 является знак-не-есть:
W — истина, если N1 не есть то же, что и N2, и ложь в противном случае.
Ген ераторы
{ Исполнение генератора, например лок вещ в хх := лок вещ := 3.14, или задания-генератора, например [1: п] лит в [1 : п] лит u, v;, включает создание имени, т.е. отведение места в памяти.
Использование локального-генератора предполагает (в большинстве реализаций) отведение памяти в динамическом стеке, тогда как глабаль- ные-генераторы предполагают отведение памяти в другой области, называемой „кучей”, в которой для управления памятью можно применять технику, называемую обычно „сборкой мусора”. В силу меньшей эффективности последнего режима локальные-генераторы лучше, так что в задании-ге- нераторов описаний переменных можно опускать только лок.}
Синтаксис.
{ ЛОКАЛИЗУЮЩИЙ :: локальный; глобальный; первичный.}
ЛОКАЛИЗУЮЩИЙ генератор в СРЕДЕ
выдающий имя ВИДА { 5С } :
знак ЛОКАЛИЗУЮЩИЙ [ 94d, -} ,
фактический описатель ВИДА в СРЕДЕ {46а} .
задание ЛОКАЛИЗУЮЩЕГО генератора
в СРЕДЕ ВЫДАЮЩЕГО ИМЯ ПРОВИДА {44е} :
знак ЛОКАЛИЗУЮЩИЙ {94d, -} ,
фактический описатель ПРОВИДА в СРЕДЕ {44b, 46а} ;
если (ЛОКАЛИЗУЮЩИЙ) есть (локальный),
фактический описатель ПРОВИДА в СРЕДЕ {44b, 46а} ;
{ Примеры:
а) лок вещ Ь) лок вещ • вещ}
{ Не существует представления для символа-первичный (см. 9.4.а) }
Семантика.
а) Выдача W ЛОКАЛИЗУЮЩЕГО-генератора или задания-ЛОКАЛИЗУЮ- ЩЕГО-генератора G в окружении Е определяется следующим образом:
W - вновь созданное имя, начинающее именовать [2.1.3.2.а} выдачу в Е фактического-описателя {4.4.2.d, 4.6.2.а} из G;
W по области действия та же, что и окружение Е1, определяемое следующим образом:
Случай А: 'ЛОКАЛИЗУЮЩИЙ' есть 'локальный':
Е1 - „локализующее окружение” { b}, доступное из окружения Е;
Случай В: 'ЛОКАЛИЗУЮЩИЙ' есть 'глобальный':
El является {первым окружением, созданным в ходе исполнения текущей собственно-программы, являющимсяJ таким, что:
первичное окружение {2.2.2.а} — это окружение окружения окружения этого Е1 {именно так!} и
Е1 есть Е или старше Е;
Случай С: 'ЛОКАЛИЗУЮЩИЙ' есть 'первичный':
• Е1 — первичное окружение;
• если W - составное имя {2.1.3.2.b}, то W снабжается подыменами {2.1.3.3.Є, 2.1.3.4.g}.
{Единственное место, где встречаются примеры первичных-генерато- ров, — это стандартное- и системное-вступления (10.3.1.1.11, 10.3.1.4.b, п, о, 10.4.1.а).