art31.htm

Суперкомпиляция двойной интерпретации

(как один час машинного времени можно превратить в одну секунду)

3. Синтаксический анализ.

3.1. Полукомпозиционность.

      Следуя за Джонсом [ссылка на Джонса], мы должны отнести наш интерпретатор VT.ref к полукомпозиционным. Классификация параметров на синтаксические и несинтаксические произошла в процессе суперкомпиляции автоматически: необходимое условие упрощающего упорядочивания [ссылка ] для свертки дерева прогонки не позволило потерять информацию о статической природе синтаксических параметров, так как в процессе интерпретации длина синтаксических структур интерпретируемой XSLT-программы монотонно убывает внутри одного логического шага XSLT-машины, и XSLT-программа каждый раз восстанавливается в начале каждого такого шага. Следует подчеркнуть, что указанная классификация произведена автоматически в режиме on-line одним из общих механизмов суперкомпиляции; она произошла логически -- в суперкомпиляторе Scp4 нет специального понятия "синтаксичексого параметра" в рассматриваемом контексте.

      Обозначим <FunctionName ... > абстрактный вызов функции в некотором метаязыке, позволяющем рассуждать [ссылка Турчин-Немытых, метапеременные] о всём множесте языков программирования; слово "функция" здесь используется достаточно широко, и соответсвующее понятие может называться в конкретном языке каким-то другим словом ( например, в XSLT это template ), но всегда отражает точку входа в некоторый синтаксический цикл.

      Рефал-синтаксис интерпретатора XSLT (свойство нашего интерпретатора) фиксирует инъективное отображение функциональных стековых понятий языка XSLT в функциональные стековые понятия языка Refal-а ( то есть в его соответствующие языковые конструкторы ), сохраняя их стековую структуру. Мы могли бы говорить о морфизме при наличии точного определения стековой структуры, если это определение не будет зависеть от конкретного языка. Нижеследующая схема показывает это инъективное отображение:

 
           XSLT-stack is moved to         
 ==> 
             Refal-stack.                       
   Just one level notation. 
               
<IntXSLT_refal ...                          >
                  <F_xslt ... <G_xslt ... > >
               
<IntXSLT_refal  ...     <IntXSLT_refal             >  >
             <F_xslt ...             <G_xslt ... >  >
        
               
<IntXSLTF_xslt_refal ... <IntXSLTG_xslt_refal ... >>
        

      В схеме вложенность вызовов соответствует их композиции. Нижняя строчка является объектом преобразований верхней, причём аргументы верхних вызовов расположены либо непосредственно на верхней строке, либо обрамляются проекцией соответсвующих верхних угловых скобок на нижнюю строку.

      Таким образом информация о функционально стековых свойствах части интерпретируемых данных косвенным образом становится доступной для Scp4, и, тем самым, обрабатывается инструментами анализа именно функционально стековых структур [ссылка на Турчина], а не общими инструментами обработки произвольных данных неизвестной природы.