left up right
State one Recogniser
<xsl:template name="one">
  <xsl:param name="str"/>
  <xsl:param name="max"/>
  <xsl:param name="pos"/>
  <xsl:param name="sofar"/>
  <xsl:variable name="char" select="substring($str,1,1)"/>
  <xsl:variable name="dig" select="translate($char,'0123456789','dddddddddd')"/>

  <xsl:choose>
  <xsl:when test="$dig = $digit">
   <xsl:call-template name="two">...</xsl:call-template>
  </xsl:when>
  <xsl:when test="$char = $plus or $char = $minus">
    <xsl:call-template name="two">...</xsl:call-template>
  </xsl:when>
  <xsl:when test="$char = $fullstop">
    <xsl:call-template name="three">...</xsl:call-template>
  </xsl:when>
  <xsl:when test="$char = $separator">
    <xsl:call-template name="one">...</xsl:call-template>
  </xsl:when>
</xsl:choose>
</xsl:template>