3. Интерпретатор XSLT на рефале и суперкомпиляция его.

В данной работе речь идет о суперкомпиляции двойной интерпретации. Здесь мы рассмотрим первый интерпретатор, в следующем параграфе - второй.

На языке программирования рефал-5 [3] написан интерпретатор VT.ref некоторого подмножества языка XSLT.

На примере подмножества XSLT и его интерпретатора продемонстрирована возможность (через суперкомпиляцию интерпретатора) компиляции в эффективную программму (на рефале) с очень приличным ускорением по сравнению с интерпретацией. Продукт является демонстрацией способностей суперкомпилятора SCP4 [1].

Интерпретатор VT.ref обрабатывает следующие конструкции языка XSLT :

<xsl:apply-templates>
<xsl:call-template>
<xsl:with-param>
<xsl:choose>
<xsl:copy-of>
<xsl:element>
<xsl:attribute>
<xsl:for-each>
<xsl:if>
<xsl:param>
<xsl:text>
<xsl:value-of>
<xsl:variable>

Реализована интерпретация дополнительной функции xt:node-set - без нее невозможно организовать рекурсию, которая необходима при интерпретации машины Тьюринга.

Невозможность описать в языке XSLT повторный проход по данным делает его великолепным практическим объектом суперкомпиляции. Именно в этом и есть гланая причина, почему всё так легко получается при специализации интерпретатора по конкретным программам, если эти программы не используют функцию xt:node-set.

Заметим, что это свойство хорошо и для специализаторов.