210
используется в качестве носителя информации от процессора-отправителя к
процессору-получателю и обратно. Соответственно в исходный текст
библиотеки операционной среды включается описание вида
procedure <RANDOM_NAME> (var Msg : TProcMessage); export;
begin … end;
а в предложение exports добавляется строка вида:
exports
<RANDOM_NAME> index id_First + id_Mes ;
где <RANDOM_NAME> — локально уникальное (в операционной среде одного
процессора) имя, генерируемое автоматически подсистемой процессирования
во время формирования текста библиотеки по спецификации операционной
среды процессора
130
. Константа id_First равна 10000. Добавление этой
константы необходимо для выхода из диапазона индексов, зарезервированных
для экспортируемых из библиотеки процедур внутрисистемного назначения.
Процессоры, обменивающиеся сообщениями. Рассмотрим в качестве
примера комплекс процессоров, анализирующих уже знакомые нам генераторы
Алгола 68, усложнив их синтаксис. Именно, в позиции границ фактических
описателей видов наряду с целыми числами (вопреки синтаксису реального
языка) разрешим писать тексты форматов, разумеется, в очень упрощенном
модельном представлении. Напомним, что форматы как значения особого вида
в конечном итоге используются в стандартных процедурах форматного обмена.
Возникающая здесь проблема состоит в том, что некоторые символы в тек-
стах форматов лексически должны трактоваться не так, как во всех других кон-
струкциях языка. Например, некоторые буквы, такие как l, n, p. x, y, z, на лек-
сическом уровне во всех конструкциях, кроме текстов форматов, должны вос-
приниматься просто как буквы
131
, а в текстах форматов — как представ-ления
особых символов управления форматированием
132
значений, участвующих в
процедурах обмена. Трудность состоит в том, что сканер должен однозначно
относить каждое вхождение любой из этих букв к соответствующему лексиче-
скому классу, которые по определению не могут пересекаться. Очевидно, без
использования контекстной информации, доступной анализатору, на уровне
сканера с этой задачей не справиться. Именно здесь и может помочь механизм
обмена сообщениями между процессорами разных уровней.
Действительно, анализатору в момент получения символа $, с которого на-
чинается текст формата, достаточно послать сообщение сканеру о том, что он
должен теперь воспринимать упомянутые буквы как символы размещения, а в
момент получения другого вхождения символа $, которым заканчивается текст
формата, послать сообщение сканеру о необходимости обычной обработки
всех букв.
130
При выполнении команды Process/Preparation/Compile текст этой библиотеки
компилируется в исполняемый DLL-модуль. В подсистеме процессирования он используется с
расширением der, а не dll.
131
Сканер должен относить их к лексическому классу ‘буква’.
132
И, соответственно, сканер должен формировать лексемы, относящиеся к лексическому
классу ‘символ размещения’.