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.