Назад Оглавление Вперед
На головную страницу М.М.Горбунов-Посадов
 
РАСШИРЯЕМЫЕ ПРОГРАММЫ
 

Элементы языка
 

 

ЭЛЕМЕНТЫ  ЯЗЫКА

      Использованные в книге конкретные элементы языка расширяемых программ преследуют чисто иллюстративные цели и весьма далеки от совершенства. Тем не менее, чтобы облегчить читателю изучение примеров, в этом разделе собраны краткие сведения о трех основных конструкциях: вариантном гнезде, наборном гнезде и объявлении элемента рассредоточенного набора. Напомним, что все эти конструкции обрабатываются препроцессором.


Вариантное гнездо

      Вариантное гнездо (см. разд. 4.2, 4.5) служит для формирования безболезненно развиваемых многовариантных программ. Его расположение в исходном тексте задается предложением #VARIANT вида

#VARIANT  имя_гнезда [. имя_компонента ]

где имя_компонента используется, если гнездо представляет собой односвязный компонент многосвязного гнезда. На место вариантного гнезда препроцессор подставляет текст ровно одного сменного модуля, назначенного этому гнезду в описании конфигурации собираемой программы.


Наборное гнездо

      Наборное гнездо (см. разд. 5.2) служит для оформления группы смежных однородных элементов программы, повышая наглядность и обеспечивая возможность безболезненного расширения этой группы. Наборное гнездо представляет собой цикл периода сборки программы. Цикл повторяется столько раз, сколько имеется в программном фонде однородных модулей, предназначенных данной конкретной конфигурацией для подстановки в наборное гнездо, а переменная цикла в это время последовательно пробегает все подставляемые модули.

•    •    •
#HORIZON  имя_набора
      тело_гнезда
[
#DELIMITER  разделитель ]
#END_OF_HORIZON
•    •    •

      Предложения #HORIZON и #END_OF_HORIZON очерчивают границы гнезда, а имя_набора задает подставляемый набор однородных модулей и одновременно служит в качестве переменной цикла, пробегающей по всем подставляемым модулям. В цикле многократно воспроизводится тело_гнезда, представляющее собой произвольный текст на исходном языке, в котором располагаются точки включения односвязных компонентов модуля. Точки включения задаются с помощью конструкций вставки вида

#имя_набора . имя_компонента

Если модуль односвязный, то имя компонента не указывается и конструкция вставки приобретает более простой вид:

#имя_набора

      Для включения в формируемый текст имени очередного однородного модуля используется конструкция вставки, где на месте имени компонента записывается зарезервированное слово NAME:

#имя_набора . NAME

Сходным образом включаются в текст номер текущего повторения цикла (NUMBER), общее число однородных модулей (SIZE) и т. д.
      Часть #DELIMITER может быть опущена. Если она присутствует, то между повторениями цикла (но не вслед за последним повторением!) записывается разделитель.
      В программе может располагаться несколько наборных гнезд, относящихся к одному набору. В каждом из этих гнезд элементы набора перебираются в одной и той же последовательности.


Объявление элемента набора

      Механизм рассредоточенного набора позволяет собрать воедино разбросанные по тексту программы однородные элементы. В тексте программы элемент рассредоточенного однородного набора объявляется (см. разд. 6.2) посредством конструкции вида

{ #INSTALL_IN  [ LOCAL ] имя_набора [ SUBSET ]
      { имя_компонента : значение } }
[ #APPLY
      применение ]
#END_OF_INSTALL

      В одной конструкции разрешается объявлять сразу несколько элементов различных рассредоточенных наборов (об этом говорят внешние фигурные скобки, окаймляющие первые две строки).
      В строке #INSTALL_IN указывается имя_набора, в который включается объявляемый элемент. Служебное слово LOCAL говорит о том, что область действия набора — текущий модуль трансляции; если LOCAL отсутствует, то область действия — вся программа. Служебное слово SUBSET указывает на то, что рассредоточенный набор высекает подмножество существующего в программном фонде регулярного однородного набора; в этом случае в объявлении присутствует только один компонент с именем NAME, значение которого задает имя включаемого в подмножество элемента регулярного набора.
      Вложенные фигурные скобки, окаймляющие вторую строку, означают, что записанная в них конструкция должна быть воспроизведена в одном или в нескольких экземплярах. Тем самым имеется возможность объявления составного элемента: каждый экземпляр конструкции вводит один из компонентов. Имя_компонента задается в левой части конструкции, а справа записывается значение объявляемого компонента.
      Далее следует необязательная часть #APPLY. Там располагается то, что должно остаться в исходном тексте после обработки конструкции #INSTALL_IN препроцессором. Часть #APPLY представляет собой обычный текст, среди которого могут размещаться значения компонентов объявленного элемента рассредоточенного набора, задаваемые конструкцией вида #имя_набора . имя_компонента. Кроме того, в текст можно включать порядковый номер, полученный объявленным элементом в наборе; он задается в виде #имя_набора . NUMBER.

Далее

Рейтинг@Mail.ru