blob: af07ca27cc7b0133ded67c06185703743644428f [file] [log] [blame]
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:text="http://chaperon.sourceforge.net/schema/text/1.0"
xmlns:st="http://chaperon.sourceforge.net/schema/syntaxtree/2.0"
xmlns="http://chaperon.sourceforge.net/schema/grammar/1.0"
exclude-result-prefixes="st text">
<xsl:output indent="yes" method="xml" encoding="ASCII"/>
<xsl:template match="st:output/st:grammar" >
<grammar><xsl:comment>This file was generated! Don't edit!</xsl:comment>
<priority>
<xsl:apply-templates select="st:token_decls/st:token_decl" mode="priority"/>
</priority>
<xsl:apply-templates select="st:token_decls/st:token_decl" mode="associativity"/>
<xsl:apply-templates select="st:production_decls"/>
<xsl:apply-templates select="st:token_decls/st:start_decl"/>
</grammar>
</xsl:template>
<xsl:template match="st:token_decl" mode="priority">
<terminal symbol="{st:id}"/>
</xsl:template>
<xsl:template match="st:token_decl" mode="associativity">
<xsl:if test="st:token_decl = '%left'">
<associativity symbol="{st:id}" type="left"/>
</xsl:if>
<xsl:if test="st:token_decl = '%right'">
<associativity symbol="{st:id}" type="right"/>
</xsl:if>
</xsl:template>
<xsl:template match="st:production_decls" >
<xsl:for-each select="st:production_decl/st:production_defs/st:production_def">
<production>
<xsl:attribute name="symbol"><xsl:value-of select="../../st:id"/></xsl:attribute>
<xsl:if test="st:prec_decl">
<xsl:attribute name="precedence"><xsl:value-of select="st:prec_decl/st:id"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates select="st:ids/st:id"/>
</production>
</xsl:for-each>
</xsl:template>
<xsl:template match="st:id" >
<xsl:variable name="symbol" select="text()"/>
<xsl:choose>
<xsl:when test="/st:output/st:grammar/st:token_decls/st:token_decl/st:id[.=$symbol]">
<terminal symbol="{.}"/>
</xsl:when>
<xsl:otherwise>
<nonterminal symbol="{.}"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="st:start_decl" >
<start symbol="{st:id}"/>
</xsl:template>
</xsl:stylesheet>