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.
Заметим, что это свойство хорошо и для специализаторов.