„Конструктом в строгом языке” является любое „дерево порождения” { f}, которое можно „породить” из какого-нибудь порождающего правила данного языка.
.Дерево порождения” Т для понятия N, называемого „прообразом” этого Т, „порождается” следующим образом:
пусть Р есть {выводимое} порождающее правило для N
;
берется копия N;
■ к этой копии присоединяется последовательность деревьев порождения, называемых „прямыми наследниками” дерева Т, порожденных для каждого непустого звена какой-то {одной} альтернативы А правила Р; порядок {деревьев в} этой последовательности совпадает с порядком указанных звеньев в А;
• взятая копия прообраза вместе с присоединенными прямыми наследниками составляет дерево порождения Т.
.Дерево порождения” для символа состоит из копии этого символа {, т.е. оно состоит из какого-то символа}.
„Терминальным порождением” дерева порождения Т является последовательность, составленная из терминальных порождений прямых наследников этого Т, взятых в их порядке.
„Терминальным порождением” дерева порождения, состоящего только из одного символа, является этот символ.
{Пример:
порядок
запись десятичного основания'
степень десяти
’символ буква е'
I
возможные плюс или минус’
'плюс или минус'
десятичная
цифра'
, I
цифра нуль'
символ СИМВОЛ
плюс' цифра нуль'
'натуральное
число'
'последовательность
десятичных цифр'
: і
последовательность десятичных цифр'
десятичная цифра'
'цифра два'
'символ
цифра два' }
{Терминальным порождением этого дерева будет последовательность символов на его концах. Ее представление в эталонном языке выглядело бы как е+02.}
„Терминальным порождением” понятия является терминальное порождение одного из деревьев порождения для этого понятия {.следовательно, существует много других терминальных порождений 'порядка', кроме показанного выше?.
{Синтаксис строгого языка был выбран так, чтобы данная последовательность символов, являющаяся терминальным порождением какого-то понятия, была таковой в силу существования либо единственного дерева порождения, либо некоторого множества деревьев порождения, отличающихся друг от друга лишь настолько, чтобы исходы их исполнения были одинаковыми (например, деревья порождения, выводимые из правил 3.2.1.е (уравнивание), 1.3.1.d,e (предикаты) и6.7.1.а.Ь (выбор способа выписывания вида для приводимого, которое должно опустошаться); (см. также 2.2.2.а).
Поэтому на практике, в настоящем стандарте и в других случаях, вместо деревьев порождения берут терминальные порождения (или их представления) . На самом же деле исполнение программ определяется в семантике настоящего стандарта исходя из деревьев порождения; семантика посвящена объяснению смысла конструктов, прообразом которых служит понятие 'программа'.}
Дерево порождения Р является „наследником” дерева порождения Q, если оно прямой наследник {f} либо самого Q, либо некоторого его наследника. Говорят, что Q „содержит” своих наследников и что эти наследники „меньше” Q.
{Например, дерево порождения
'возможные плюс или минус'
'плюс или минус'
'символ плюс'
входит в качестве наследника в (, и меньше чем,) дерево порождения для 'порядка', (содержащее его и) показанное выше.}
Дерево порождения „видимо” („невидимо”) , если его терминальное порождение непусто (пусто).
Наследник {g} U дерева порождения Т расположен „прежде” („после”) другого наследника V того же Т, если терминальное порождение {f} этого U расположено прежде (после) терминального порождения, V в терминальном порождении Т. Это {частичное} упорядочение наследников Т называется „текстуальным порядком”. {В приведенном примере дерева порождения для понятия 'порядок' (f) дерево порождения, прообраз которого есть 'плюс или минус', расположено прежде дерева, прообраз которого есть 'цифра два'.
Наследник А дерева порождения „следует” („предшествует”) другому наследнику В в некотором текстуальном порядке, если А расположен после (прежде) В в этом текстуальном порядке и не существует видимого {h} наследника С, расположенного между А и В. {Тем самым подразумевается „непосредственное” следование (предшествование).}
Дерево порождения А „подобно” дереву порождения В, если терминальное порождение {f} А совпадает с терминальным порождением В.
Метаправила и простая подстановка.
{Метаправила образуют в настоящем языке множество контекстосвободных грамматик, определяющих „метаязык”.}
„Метаправилами” {Ь} данного языка служат метаправила {в приведенной форме}, заданные в разделах настоящего стандарта, заголовки которых начинаются со слов „Синтаксис”, „Метасинтаксис” или „Метаправила”, а также метаправила, получаемые следующим образом:
• для каждого заданного метаправила, относящегося к какому-
нибудь метапонятию М, создаются дополнительные правила, каждое из которых состоит из некоторой копии этого М и непосредственно следующего за ней одного из больших синтаксических знаков „О”, „1”, „2”, „3”, „4”, „5”, „6”, „7”, „8” или „9”, за которыми следуют два двоеточия, другая копия метапонятия М и точка. {Таким образом, следует добавить метаправило „ВИДІ:: ВИД.”.}
Всякое „метаправило” состоит из следующих элементов, расположенных в указанном порядке:
возможной звездочки;
непустой последовательности М больших синтаксических знаков;
двух двоеточий;
непустой последовательности гиперпонятий {І.І.З.І.е}, разделенных точками с запятой;
точки.
Такое метаправило называют метаправилом „для” {этого метапонятия (1.1.3.Id .}М.
{Зведзочка, если она есть, показывает, что это метапонятие не используется в других мета- или гиперправилах, а заведено только для того, чтобы облегчить изложение в семантике.}
{Примеры:
ЧИСЛОВОЕ :: 7РАЗМЕРНОЕ целое;
7РАЗМЕРНОЕ вещественное. (1.2.1.С) •
7РАЗМЕРНОЕ :: длинное ?ДЛИННОЕ;
короткое ?КОРОТКОЕ; ПУСТО. (1.2.1. D)}
„Терминальное метапорождение” метапонятия М есть любое протопонятие, получаемое „простой подстановкой” {d} из одного из гиперпонятий {, стоящих в правой части} метаправила для М.
Протопонятие Р получается „простой подстановкой” из гиперпонятия Н, если копию {приведенной формы} этого Н можно преобразовать в некоторую копию {приведенной формы} Р заменой каждого метапонятия М в указанной копии {приведенной формы} Н каким-нибудь терминальным метапорождением М.{Например, двумя возможными терминальными метапорождениями (с) „ЧИСЛОВОГО” будут 'целое' и 'длинное длинное вещественное'. Это объясняется тем, что из гиперпонятий '7РАЗМЕРНОЕ целое' и ^РАЗМЕРНОЕ вещественное' (гиперпонятий метаправила для {приведенной формы} „ЧИСЛОВОГО”) можно при помощи простой подстановки (d) вывести 'целое' и 'длинное длинное вещественное'; это в свою очередь возможно потому, что ' ' (пустое протопонятие) и 'длинное длинное' являются терминальными метапорождениями „7РАЗМЕРНОГО”.}
{Используемые в настоящем стандарте метапонятия выбраны так, чтобы конкатенация одного или нескольких из них не приводила к той же последовательности больших синтаксических знаков, что и при другой такой конкатенации. Этим устраняется источник возможной неоднозначности.
Хотя рекурсивная природа некоторых метаправил позволяет порождать терминальные метапорождения произвольной длины, длина терминальных метапорождений, вовлекаемых с необходимостью в порождение любой данной программы, конечна.}
Гиперправила и согласованная подстановка.
Гиперправилами {Ь} настоящего языка являются гиперправила {в приведенной форме}, заданные в разделах стандарта, заголовки которых начинаются со слова „Синтаксис”.
Всякое „гиперправило” состоит из следующих элементов, расположенных в указанном порядке:
возможной звездочки;
непустого гиперпонятия Н;
двоеточия;
непустой последовательности „гиперальтернатив”, разделенных точками с запятой;
точки.
Такое правило называют гиперправилом „для” {этого гиперпонятия (1.1.3.І.е) } Н.
Всякая „гиперальтернатива” есть непустая последовательность гиперпонятий, разделенных запятыми.
{Примеры:
последовательность ПОНЯТИЙ :
ПОНЯТИЕ; ПОНЯТИЕ, последовательность ПОНЯТИЙ. (1.1.3.Ь)
ПОНЯТИЕ, последовательность ПОНЯТИЙ}
Порождающее правило PR {1.1.3.2.b} выводится из некоторого гиперправила HR, если копию HR можно преобразовать в копию {приведенной формы} этого PR , применяя „согласованную подстановку” {е} к множеству всех {приведенных форм} гиперпонятий указанной копии HR.
Множество {одного или большего числа} протононятий РР получают, применяя „согласованную подстановку” к соответствующему множеству гиперпонятий НН, если копию НН можно преобразовать в копию {приведенной формы} ГР при помощи следующего шага:Шаг: Если копия {приведенной формы НН} содержит одно или более метапонятий, то для некоторого терминального' метапорождения Т одного из этих метапонятий М каждое вхождение М в данную копию заменяется копией этого Т и данный шаг повторяется.
{См. 1.1.4.1.а по поводу другого применения согласованной подстановки. }
{Применяя указанный процесс выведения к данным выше (с) гиперправилам, можно создать правило
последовательность десятичных цифр:
десятичная цифра;
десятичная цифра, последовательность десятичных цифр,
которое поэтому есть порождающее правило настоящего языка. Отметим, что
последовательность десятичных цифр: десятичная цифра; десятичная цифра, последовательность букв б.
не является порождающим правилом данного языка, поскольку замена метапонятия „ПОНЯТИЕ” одним из его терминальных метапорождений должна проводиться согласованно повсюду.}
{Так как некоторые метапонятия имеют бесконечное число терминальных метапорождений, число порождающих правил, которые можно вывести, бесконечно. Однако настоящий язык построен так, что для порождения любой программы конечной длины потребуется только конечное число таких порождающих правил.}
{f) Правила в Синтаксисе снабжены „перекрестными ссылками”, понимаемыми следующим образом:
Каждое гиперпонятие Н некоторой гиперальтернативы гиперправила А сопровождают ссылками на те гиперправила В, откуда выводятся порождающие правила для понятий, которые можно подставить в это Н. Точно так же гиперпонятия каждого гиперправила В сопровождают обратными ссылками на А. Однако, если Н следует заменить каким-нибудь символом, его сопровождают ссылкой на его представление в и. 9.4.1. Кроме того, вместо ссылок на многие гиперправила в некоторых случаях удобнее сделать ссылку на одно метаправило, и тогда опущенные ссылки можно найти в этом метаправиле.
Каждая такая ссылка служит в принципе номером пункта, за которым идет буква, указывающая строчку с нужным правилом или представлением. При этом используют следующие соглашения:
ссылки, номер пункта в которых совпадает с номером пункта, где они встречаются, дают первыми, и этот номер пункта опускают; например, „8.2.1.а” появляется в п. 8.2.1 как „а”;
опускаются все точки и последняя 1, а 10 заменяют на А; например, ,,8.2.1.а” входит во все остальные пункты как ,,82а”, а „10.3.4.1.1 .і” входит в виде А341 і”,(ill) опускают номер пункта, если он тот же, что и у предыдущей ссылки; например, „82а, 82b, 82с” входят как „82а, Ь, с”;
(iv) посредством отмечают наличие тупика, выводимого из данного гиперпонятия; например, в 8.0.1.а после „изображение ЗНАЧЕНИЯ”, поскольку „ЗНАЧЕНИЕ” можно заменить, например, на 'имя вещественного', а 'изображение имени вещественного' не является понятием} 1.1.4. Семантика
Семантика определяет „смысл” программ {2.2.Га} в строгом языке с помощью предложений {некоторого формализованного естественного языка?, устанавливающих, какие „действия” должны проводить во время „исполнения” {2.1.4.1} этих программ. „Смысл” программы в языке представления - это смысл программы в строгом языке, которую она представляет {9.31.
Гиперпонятия, обозначение и заложение.
{Гиперпонятия, заключенные в апострофы, используют, чтобы "обозначать ' протопонятия, принадлежащие к определенным классам; например, 'ЛОКАЛИЗУЮЩИЙ' обозначает любое из протопонятий 'локальный', 'первичный' и 'глобальный'. }
Находящиеся в тексте данного стандарта гиперпонятия, кроме случаев, когда они входят в гиперправила {1.1.3.4.Ы или метаправила {1.1.3.3.Ь}, „обозначают” любые протопонятия, которые можно получить, применяя к ним согласованную подстановку {1.1.3.4.е}; согласованную подстановку применяют ко всем гиперпонятиям, содержащимся в каждом законченном отрывке текста (это или отрывок, выделяемый буквой со скобкой, если такой есть, или же нумерованный раздел целиком) .
{Так, например, 'ОБОЗНАЧЕНИЕ для ПРИЗНАКА' есть гиперпонятие, обозначающее такие протопонятия, как 'буква и лат для целого', 'буква х для вещественного' и т.п. Если в каком-нибудь контексте оно фактически обозначает ’букву и лат для целого’, то все вхождения метапонятия „ПРИЗНАК” в текущий отрывок должны обозначать в этом контексте 'целое', а все вхождения „ОБОЗНАЧЕНИЯ” должны обозначать 'букву и лат'. Тогда, например, из отрывка 4.8.2.а можно вывести, что когда „сцена приписывается некоторому определяющему-букву-и-лат-индикатору-вы- дающему-целое”, именно ’буква и лат для целого' „получает доступ к V внутри соответствующего участка”.}