мягкого распроцедуривания {6Ю}:
ФОРМА выдающая процедуру вырабатывающую ВИД
послеСМЯГЧЕНИЯ {61DJ.
I Примеры:
псч (в вещ (псч))
х или у (в х или у := 3.14, см. 1.1.2)}
Семантика
Выдача W ФОРМЫ-выдающей-ЗНАЧЕНИЕ-после-распроцедуривания или ФОРМЫ-выдающей-ЗНАЧЕНИЕ-после-мягкого-распроцедуривания F в окружении Е определяется следующим образом:
пусть { процедура } R будет выдачей в Е прямого наследника из F;
W — выдача вызова {5.4.3.2.b} из R в Е;
требуется, чтобы W по области действия не была младше Е.
Объединение
{Объединение не изменяет вида значения, выдаваемого конструктом во время счета, а просто создает для него большую свободу. Такое значение должно быть приемлемо не только для одного какого-то вида, но для целого множества видов. Однако после объединения это значение может использоваться примитивным действием только после динамической проверки его сопоставляюшим-предложением { 3.4.1.g}; в самом деле, с конструктом вида 'ПРЕДСТАВИТЕЛЬ' нельзя запрограммировать никакие примитивные действия (кроме, конечно, присваивания переменной-вида-ПРЕДСТАВИ- ТЕЛЬ).
Пример:
об (лог, лит) t, v;
t : = ”a”;t := истина; v := t.J
Синтаксис
ФОРМА выдающая ПРЕДСТАВИТЕЛЬ после объединения [бій] : ФОРМА выдающая ЗНАЧЕНИЕ после РАСКРЫТИЯ £б IC }, если ЗНАЧЕНИЕ служит ПРЕДСТАВИТЕЛЕМ { b }.
ЕСЛИ ЗНАЧЕНИЕ 1 служит ЗНАЧЕНИЕМ? {a, 34i, 71m} : если ЗНАЧЕНИЕ 1 эквивалентно ЗНАЧЕНИЮ? { 73а}, ЕСЛИ ложь;
если неверно что
ЗНАЧЕНИЕ 1 эквивалентно ЗНАЧЕНИЮ? {73а } ,
ЕСЛИ укрытые ЮБЫЧНЫЕ1 входят
в укрытые !ОБЫЧНЫЕ? {731, т, п} ,
если (!ОБЫЧНЫЕ 1) есть (ЗНАЧЕНИЕ 1)
или (объединение ЮБЫЧНЫХ1 воедино) есть (ЗНАЧЕНИЕ1), если (ЮБЬЙНЫЕ?) есть (ЗНАЧЕНИЕ?)
или (объединение 'ОБЫЧНЫХ2 воедино) есть (ЗНАЧЕНИЕ?).
[ Примеры:
а) х (в uir : = х) •
и (в об (лит. цел, пуст) (и), в зоне: содержащей
об (цел, пуст) и := пустое)}
Обобщение
{Обобщение преобразует целые числа в вещественные, вещественные числа в комплексные (в обоих случаях с тем же размером), значения вида 'БИТОВОЕ' в неупакованные векторы истинностных значений и значения вида 'СЛОГОВОЕ' в неупакованные векторы литер.
, Например, в z ;= 1 выдача 1 обобщается до вещественного числа 1.0, а затем до комплексного числа (1.0, 0.0) ; синтаксически здесь априорный вид, специфицируемый цел, заменяется видом, специфицируемым вещ, а затем видом, специфицируемым компл. J
Синтаксис
БИТОВОЕ :: структура содержащая 7МЕРНУЮ букву алеф для выборки вектора из логических в себе.
СЛОГОВОЕ :: структура содержащая 7МЕРНУЮ букву алеф для выборки вектора из литерных в себе.
7МЕРНОЕ :: ДОЛГОЕ 7ДОЛГОЕ; КРАТКОЕ 7КРАТКОЕ; ПУСТО.
ДОЛГОЕ :: буква д буква л буква и буква н.
КРАТКОЕ :: буква к буква о буква р.
7ДОЛГОЕ :: ДОЛГОЕ 7ДОЛГОЕ; ПУСТО.
7КРАТКОЕ :: КРАТКОЕ 7КРАТКОЕ; ПУСТО.
ФОРМА выдающая 7РАЗМЕРНОЕ вещественноепосле обобщения £b, 61а) :
ФОРМА выдающая 7PA3MEPHOE целое после РАСКРЫТИЯ {біс}. [?РАЗМЕРНОЕ :: длинное 7ДЛИННОЕ;
короткое 7КОРОТКОЕ; ПУСТО.)
ФОРМА выдающая структуру содержащую букву эр лат букву е лат для выборки 7РАЗМЕРНОГО вещественного букву и лат букву эм лат для выборки 7РАЗМЕРНОГО вещественного в себе после обобщения {61 А) ;
ФОРМА выдающая 7РАЗМЕРНОЕ вещественное после РАСКРЫТИЯ {61С} ;
ФОРМА выдающая 7РАЗМЕРНОЕ вещественное после обобщения fa).
ФОРМА выдающая вектор из логических после обобщения {б1А};
ФОРМА выдающая БИТОВОЕ после РАСКРЫТИЯ £біс).
ФОРМА выдающая вектор из литерных после обобщения {б1А}:
ФОРМА выдающая СЛОГОВОЕ после РАСКРЫТИЯ { 61CJ . {Примеры: а) 1 (в х : = 1)
1.0 (в compl z := 1.0) *1 (в compl z := 1)
2г 101 (в [ ] лог (2г 101))
г (в [ ] лит (г), см. 1.1.2)}
6.5.2. Семантика
Выдача W ФОРМЫ-выдающей-ВИД-после-обобщения F определяется следующие образом:
• пусть V — выдача прямого наследника F;
Случай А: 'ВИД' есть '7РАЗМЕРНОЕ вещественное':
• W — вещественное число, обобщаемое {2.1.3.1.eJ из V; Случай В: 'ВИД' есть 'структура содержащая букву эр лат букву е лат для выборки 7РАЗМЕРНОГО вещественного букву и лат букву эм лат для выборки 7РАЗМЕРНОГО вещественного в себе' • W — {комплексное число, которое есть) структурное значение с нолями, равными V и вещественному числу 0 того же размера {2.1.3.l.b) , что и V;
Случай С: 'ВИД' есть 'вектор из логических' или 'вектор из литерных': • W — единственное поле из V.
6.6. Векторизация
{ Векторизация позволяет построить массив из одного элемента. Если последний является именем, то результат векторизации также может быть именем, именующим этот массив.
Пример
:[1 : 1] вещ Ы : = 4.13}
Синтаксис
а) ФОРМА выдающая ?ИМЯ МАССИВА! из ВИДА после векторизации {61а}:
если (МАССИВ!) есть (вектор),
ФОРМА выдающая 7ССЫЛКУ НА ВИД
после УСИЛЕНИЯ {б1А},
если (?ИМЯ) выводится из (7ССЫЛКИНА) [531b, с,-};
если (МАССИВ!) есть (вектор МАССИВОВ?).
ФОРМА выдающая 7ССЫЛКУ НА МАССИВ? из ВИДА после УСИЛЕНИЯ [ 61 А},
если (7ИМЯ) выводится из (7ССЫЛКИ НА) { 531b, с, -} .
[Примеры:
а) 4.13 (в [1 : 1] вещ Ы : = 4.13 •
х1 (в [1 : 1, 1 : п] вещ Ь2 := xl)J
Семантика
а) Выдача W ФОРМЫ-выдающей-?ИМЯ-МАССИВА1-из-ВИДА-после-век- торизации F определяется следующим образом: ,
• пусть V — выдача ФОРМьІ-после-УСИЛЕНИЯ из F;
Случай А: '7ЙМЯ' есть 'ПУСТО':
W — массив, „построенный”f bJ из V для 'МАССИВА!';
Случай В: '7ЙМЯ' есть 'ИМЯ':
Если V — псевдоимя, то W — тоже псевдоимя;
иначе W - имя, „построенное” [с} из V для 'МАССИВА!'.
Ь) Массив W, „построенный” из значения V для некоторого 'МАССИВА!', определяется следующим образом:
Случай А: 'МАССИВ!' есть 'вектор':
• W составляется из
паспорта ((1,1)),
[одного элемента} V;
Случай В: 'МАССИВ!' есть 'вектор МАССИВОВ2':
пусть паспорт значения V будет ((1Х, щ),..., (1п>йп));
• W составляется из
паспорта ((1,1), (h.Ui),..., (ln, un)),
элементов этого V;
• элемент, выбираемый в V по индексу (ij, ..., in), является элементом, выбираемым в W по индексу (1, іі, ..., in) •
с) Имя N1, „построенное” из имени N для некоторого 'МАССИВА!', определяется следующим образом:
• N1 —[не обязательно вновь созданное} имя, равное по области действия имени N и именующее массив, построенный { b} для 'МАССИВА из значения, именуемого N;
Случай А: 'МАССИВ!' есть 'вектор':
• [ единственным ] подыменем этого N1 является N;Случай В: 'МАССИВ1' есть 'векторМАССИВОВ2':
подыменем этого N1, выбираемым по (1, ijin), является подымя имени N, выбираемого по (ij,in).
6.7. Опустошение
{Опустошение используют, чтобы отбросить выдачу некоторой основы, первичное назначение которой — вызвать побочный эффект; ее апостериорным видом становится тогда просто 'пустое значение'. Например, в х := 1; у := 1; присваивание у := 1 опустошается, а в проц t = цел : целч (псч X 100); t ; использующий-идентификатор t опустошается после распроцедуривания, предписывающего вызов процедуры.
Присваивания и другие ПРЯМЫЕ опустошаются без всякого распроцедуривания, так что в проц пуст р; р : = финиш это присваивание р : = финиш не предусматривает неожидаемого здесь вызова процедуры финиш.}
Синтаксис
А) НЕРАСП {рОЦЕДУРИВАЕМОЕ} :: ПРОСТОЕ; СОСТАВНОЕ; ПРЕДСТАВИТЕЛЬ; ИМЯ НЕРАСП;
процедура с ПАРАМЕТРАМИ вырабатывающая ЗНАЧЕНИЕ.
РАСКРЫВАЕМОЕ выдающее пустое значение
после опустошения {61 А}:
РАСКРЫВАЕМОЕ выдающее НАРАСП
после распроцедуривания {63а};
РАСКРЫВАЕМОЕ выдающее НЕРАСП после сохранения f 61 fj.
ПРЯМОЕ выдающее пустое значение
после опустошения {61 а} :
ПРЯМОЕ выдающее ВИД после сохранения { 61 f}.
{Примеры:
псч (в пропуск; псч;)
след псч (пред псч)
(в пропуск; след псч (пред псч) ;)
проц пуст (рр)
(в проц проц пуст рр = проц пуст:
(печ (1); пуст : печ (2));
проц пуст (рр)-,)]
Семантика
Исполнение ФОРМЫ-выдающей-пустое-значение-после-опустошения состоит из исполнения ее прямого наследника и выдает пустое.
7. ВИДЫ И СРЕДЫ
{Идентификация свойств в среде представляет собой статический двойник динамического определения (4.8.2.Ь) значения в некотором окружении: поиск проводится с самого нового (самого младшего) уровня по направлению к предыдущим (более старшим) уровням.
Виды составляются из примитивных видов, таких, как 'логическое', с помощью 'ПРОЛОГОВ', таких, как 'структура содержащая', и могут быть рекурсивными. Рекурсивные виды, выписываемые различным образом, могут тем fce менее быть эквивалентными. Синтаксис проверяет эквивалентность таких видов, доказывая невозможность обнаружения какого- либо несовпадения между их соответствующими подструктурами или составляющими видами.
Предотвращается ряд небезопасных использований свойств. Никакой идентификатор или индикатор-вида не описывается более одного раза в каждой зоне. Виды операндов всякой формулы не определяют более одной операции. Рекурсия в видах не приводит к динамическому созданию объектов неограниченного размера и не допускает двусмысленных приведений.}
Н е з а в и с и м о с т ь свойств
{Следующий синтаксис определяет, могут ли два свойства (т.е. две 'ПАРЫ'), подобные тем, которые соответствуют вещ х и цел х, быть заложены в один и тот же 'СЛОЙ'.}
Синтаксис
ПРИСТАВКА :: процедура вырабатывающая; ИМЯ.
КОРЕНЬ :: ПРОСТОЕ; СОСТАВНОЕ; ПРЕДСТАВИТЕЛЬ;
пустое значение; процедура с ПАРАМЕТРАМИ вырабатывающая ЗНАЧЕНИЕ.
С)* ’ПРИСТАВКИ :: ПРИСТАВКА 7ПРИСТАВКИ; ПУСТО.
{ПАРА :: ОПИСАНИЕ; МЕТКА; ПОЛЕ.
ПРИЗНАК :: ВИД; ЗНАЧЕНИЕ НОМЕР; БИНАРНОЕ;
метка; выборка ВИДА.
ОБОЗНАЧЕНИЕ :: СЛОВО; ИНДИКАНТ; ИНФИКС; ПРЕФИКС.
АФФИКС :: ИНФИКС; ПРЕФИКС.}
ЕСЛИ ПАРА1 не зависит от ІПАР2 ПАРЫ2 { а, 48а, с, 72а} :
ЕСЛИ ПАРА1 не зависит от ЇПАР2 { а, с,}
и ПАРА1 не зависит от ПАРЫ2 { с }.
ЕСЛИ ПАРА не зависит от ПУСТО {48а, с, 72а} : ЕСЛИ истина.
ЕСЛИ ОБОЗНАЧЕНИЕ! для ПРИЗНАКА! не зависит
от ОБОЗНАЧЕНИЯ2 для ПРИЗНАКА2 { а, 48а, с, 72а}:
если неверно что (ОБОЗНАЧЕНИЕ!) есть (ОБОЗНАЧЕНИЕ2) ЕСЛИ истина;
если (ОБОЗНАЧЕНИЕ!) есть (ОБОЗНАЧЕНИЕ2)
и (ОБОЗНАЧЕНИЕ!) есть (АФФИКС),
ЕСЛИ ПРИЗНАК! не зависит от ПРИЗНАКА2 { d }.
ЕСЛИ ПРИЗНАК 1 не зависит от ПРИЗНАКА2 { с }:
если ПРИЗНАК! связан с ПРИЗНАКОМ2 {е, f, g, h, і, j, -}, ЕСЛИ ложь;
если неверно что ПРИЗНАК! связан с
ПРИЗНАКОМ2 {е, f, g, h, і, j, -}, ЕСЛИ истина.
ЕСЛИ ОДНОМЕСТНАЯ связана с ДВУМЕСТНОЙ { d}: ЕСЛИ ложь.
ЕСЛИ ДВУМЕСТНАЯ связана с ОДНОМЕСТНОЙ {d} : ЕСЛИ ложь.
ЕСЛИ ОПЕРАЦИЯ связана с БИНАРНЫМ { d}: ЕСЛИ ложь, h) ЕСЛИ БИНАРНОЕ связано с ОПЕРАЦИЕЙ { d}: ЕСЛИ ложь.
ЕСЛИ процедура с параметром вида ВИДІ параметром
вида ВИД2 выбаратывающая ЗНАЧЕНИЕ 1 связана с процедурой с параметром вида ВИДЗ параметром вида ВИД4 вырабатывающей ЗНАЧЕНИЕ2 { d}:
ЕСЛИ ВИДІ крепко связан с ВИДОМЗ { к}
и ВИД2 крепко связан с ВИДОМ4 f к }
ЕСЛИ процедура с параметром вида ВИДІ вырабатывающая ЗНАЧЕНИЕ 1 связана с процедурой с параметром вида ВИД2 вырабатывающей ЗНАЧЕНИЕ? {dl :
ЕСЛИ ВИДІ крепко связан с ВИД0М2 { kJ.
ЕСЛИ ЗНАЧЕНИЕІ крепко связано со ЗНАЧЕНИЕМ? { i, j J:
ЕСЛИ ! ОБЫЧНЫ El скреплены со ЗНАЧЕНИЕМ? {1, m }
или 'ОБЫЧНЫЕ? скреплены со ЗНАЧЕНИЕМ! { 1, т,}, если (10БЫЧНЫЕ1) есть (ЗНАЧЕНИЕІ)
или (объединение ЮБЫЧНЫХ1 воедино) есть (ЗНАЧЕНИЕ!), если (! ОБЫЧНЫЕ?) есть (ЗНАЧЕНИЕ?)
или (объединение І0БЫЧНЫХ2 видов) есть (ЗНАЧЕНИЕ?).
І) ЕСЛИ ! ОБЫЧНЫЕ ОБЫЧНОЕ секреплены со ЗНАЧЕНИЕМ [ к, 1} : ЕСЛИ ЮБЫЧНЫЕ скреплены со ЗНАЧЕНИЕМ {1, т}
или ОБЫЧНОЕ скреплено со ЗНАЧЕНИЕМ f т}.
т) ЕСЛИ ЗНАЧЕНИЕ! скреплено со ЗНАЧЕНИЕМ? { k, 1, n, 47fJ:
ЕСЛИ ЗНАЧЕНИЕ! эквивалентно ЗНАЧЕНИЮ? {73а}
или ЗНАЧЕНИЕ! служит ЗНАЧЕНИЕМ? {64b } или ЗНАЧЕНИЕ? есть корень ЗНАЧЕНИЯ! [nJ.
п) ЕСЛИ ЗНАЧЕНИЕ? есть корень ЗНАЧЕНИЯ! {mJ:
если (ЗНАЧЕНИЕ!) есть (ПРИСТАВКА ЗНАЧЕНИЕЗ), ЕСЛИ ЗНАЧЕНИЕ5 скреплено со ЗНАЧЕНИЕМ? { т}, если ЗНАЧЕНИЕ5 фиксирует ЗНАЧЕНИЕЗ {47а, Ь, с} ;
если (ЗНАЧЕНИЕ!) есть (КОРЕНЬ), ЕСЛИ ложь.
{ Чтобы предотвратить двусмысленное использование индикаторов, как в вещ х, цел х; х := 0, на определяющие-индикаторы, входящие в некоторую данную зону, налагаются определенные ограничения. Они обеспечиваются синтаксической проверкой „независимости” свойств, заложенных в соответствующий 'СЛОЙ' (правила а, Ь, с). Достаночное условие независимости пары свойств, каждое из которых является некоторым 'ОБОЗНАЧЕНИЕМ для ПРИЗНАКА', не выполненное в приведенном выше призере, состоит в различии этих 'ОБОЗНАЧЕНИЙ' (правило с). Для 'ОБОЗНАЧЕНИЙ', не являющихся 'АФФИКСОМ', это условие также и необходимо, так что даже вещ х, цел х; пропуск не есть последовательное-предложение.
Дія двух свойств 'АФФИКС для ПРИЗНАКА!' и 'АФФИКС для ПРИЗНАКА?' проверка на независимость несколько сложнее, как это можно видеть из последовательного-предложения
оп + = (цел і) лог : истина, оп + = (цел i, j) цел : 1,
on + - (цел і, лог і) цел : 2, прио + = 6;
0 + + 0|і = 2»і.
Двусмысленности можно обнаружить в
прио + = 6, + = 7; 1 + 2 X 3 ft 7 или 9?$.
в
on z = (цел і) цел : 1, вид z = цел;
zip формула или описание? ft; пропуск
и в
оп? = (об(имя вещ, лит) а) цел : 1, оп ? = (вещ а) цел : 2; ? лок вещ ft 1 или 2? ft.
В таких случаях проверяется, независимы ли эти два 'ПРИЗНАКА' (правила с, d). Всякое 'ЗНАЧЕНИЕ НОМЕР' всегда зависит от любого 'ПРИЗНАКА' (правило d). 'ОДНОМЕСТНАЯ' всегда не зависит от 'ДВУМЕСТНОЙ' (правила d, е, f) и обе они не зависят от 'БИНАРНОГО' (т.е. от 'приоритета ПРИОРИТЕТ') (правила d, g, h). В случае двух 'ОПЕРАЦИЙ', обеих 'ОДНОМЕСТНЫХ' или 'ДВУМЕСТНЫХ', двусмысленность может возникнуть, если виды их соответствующих параметров „крепко связаны”, т.е. если вид операнда может крепко приводиться к виду параметра (виды пары операндов могут крепко приводиться к видам параметров) какой-нибудь 'ОПЕРАЦИИ' (правила i, j). В примере с двумя определениями для ? указанные две 'ОПЕРАЦИИ' связаны, поскольку крепко связаны виды, специфицируемое описателями об (имя вещ, лит) и вещ; специфицируемый имя вещ вид крепко приводим к любому из них.