286
пляр объекта T для правила Т, которое исполняется. Наконец, терми-
нал-действие 'Close_T' уничтожает экземпляр T. На этом исполнение
правила В заканчивается.
Рассмотрим, что происходит при выполнении правила T. Выполнение
этого правила начинается с проверки параметров, полученных экземпля-
ром объекта, созданного для этого правила. Эту проверку выполняет
(полиморфный) резольвер resolution. Полученные параметры – координа-
ты концов основания некоторого треугольника. Если расстояние между
этими точками меньше, чем установленный предел разрешения монитора,
то выполнение правила заканчивается. В противном случае, по коорди-
натам вершин треугольника (координаты третьей вершины уже были вы-
числены конструктором), терминал-действие 'DrawTriangle' рисует его
боковые стороны.
Стоит отметить, что хотя наша картинка состоит из треугольников,
полностью прорисовывается только один треугольник - самый большой,
т.к. основания остальных сливаются с уже нарисованными линиями и
таким образом их прорисовывать не требуется.
Далее выполняется терминал-действие 'Open1_L_in_T', которое
создает экземпляр объекта L, посылает ему в качестве параметров ко-
ординаты концов одной из боковых сторон треугольника, соответствую-
щего текущему правилу Т, и передает управление правилу L. После то-
го, как исполнение правила L завершено, исполняется терминал-
действие 'Close_L'. Терминал Open2_L_in_T, передает очередному соз-
даваемому экземпляру объекта L координаты концов другой боковой сто-
роны, снова исполняется правило L (но в другом окружении), и, нако-
нец, терминал-действие 'Close_L' завершает исполнение правила T.
Выполнение правила L состоит из проверки полученных параметров
относительно чувствительности монитора. Если расстояние между точ-
ками, координаты которых получены, меньше, чем установленный порог,
то исполнение правила прекращается. В противном случае выполнятся
терминал-действие 'Open1_L_in_L', правило L, терминал-действия
'Close_L', 'Open_T_in_L', правило T, терминал-действия 'Close_T',
'Open2_L_in_L', правило L, но для изменившейся операционной среды, и
терминал-действие 'Close_L'.
Рассмотрим, каковы параметры, передаваемые терминалами
'Open1_L_in_L', 'Open_T_in_L' и 'Open2_L_in_L', создаваемым ими эк-
земплярам соответствующих объектов. Когда начинает выполняться пра-
вило L, мы имеем координаты концов некоторого отрезка. Конструктор
объекта, соответствующий правилу L, вычисляет координаты еще двух
точек, лежащих на этом отрезке и делящих этот отрезок на три равные
части. Обозначим подряд эти точки n1, n2, n3 и n4. Пусть L1=(n1,n2),
L2=(n2,n3), L3 = (n3,n4). Терминал-действие 'Open1_L_in_L' передает
координаты концов L1, терминал-действие 'Open_T_in_L' - координаты
концов L2, а терминал-действие 'Open2_L_in_L' - координаты концов
L3.
Порождающая управляющая грамматика
PRODUCTIVE SYNTAX
NONTERMINALS: S, B, T, L.
TERMINALS: 'Start','Finish','DrawBase','DrawTriangle',
'Open_L_in_B', 'Open1_L_in_T', 'Open2_L_in_T',
'Open1_L_in_L','Open2_L_in_L','Open_T_in_B',
'Open_T_in_L','Close'.
FORWARD PASS RESOLVERS: resolution.