Стили и методы программирования
4cab9ef0

Так как нужно печатать только


<?xml version="1.0" encoding="windows-1251" ?> <automat name="Test"> <action><![CDATA[char symbol; int cnt;]]> </action> <ref>St1</ref> <state name="St1"> <if> <condition><![CDATA[’a’<=symbol & symbol <= ’z’]]> </condition> <action><![CDATA[printf ("%c", symbol); cnt = 1;]]> </action> <ref>St2</ref> </if> <eif> <condition> <![CDATA[ symbol != ’\n’]]> </condition> <action><![CDATA[/* Так как нужно печатать только слова, действия не заполняются */ ]]> </action> <ref> St1 </ref> </eif> <eif> <condition> <![CDATA[ symbol == ’\n’]]> </condition> <action><![CDATA[/*Так как нужно печатать только слова, действия не заполняются */ ]]> </action> <ref> St3 </ref> </eif> </state> <state name="St2"> <if> <condition><![CDATA[ ’a’<=symbol & symbol <= ’z’]]> </condition> <action><![CDATA[printf ("%c", symbol); cnt++;]]> </action> <ref>St2</ref> </if> <eif> <condition><![CDATA[ symbol != ’\n’]]> </condition> <action><![CDATA[printf (" - %i\n", cnt);]]> </action> <ref>St1</ref> </eif> <eif> <condition> <![CDATA[ symbol == ’\n’]]> </condition> <action><![CDATA[printf (" - %i\n", cnt);]]> </action> <ref>St3</ref> </eif> </state> <state name="St3"> <if> <condition><![CDATA[’a’<=symbol & symbol <= ’z’]]> </condition> <action><![CDATA[printf ("%c", symbol); cnt = 1;]]> </action> <ref>St2</ref> </if> <eif> <condition> <![CDATA[ symbol != ’\n’]]> </condition> <action><![CDATA[/* Так как нужно печатать только слова, действия не заполняются */ ]]> </action> <ref> St1 </ref> </eif> <eif> <condition> <![CDATA[ symbol == ’\n’]]> </condition> <action><![CDATA[/* Переход не требует чтения, symbol == ’\n’ не нужно читать */ ]]> </action> <ref>Exit</ref> </eif> </state> </automat>
Листинг 11.2.1. Решение задачи автоматической трансформации таблиц конечного автомата
Закрыть окно




<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <DIV STYLE="font-family:Courier; font-size:12pt"> <xsl:for-each select="automat"> <TABLE border="1" width="75%"> <TR> <TD colspan="3"><xsl:value-of select="action" /></TD> <TD width="10%"><xsl:value-of select="ref" /></TD> </TR> <xsl:for-each select="state"> <TR> <td rowspan="3" width="10%" valign="top"> <xsl:value-of select="@name" /></td> <td><xsl:value-of select="if/condition" /></td> <td><xsl:value-of select="if/action" /></td> <td><xsl:value-of select="if/ref" /></td> </TR> <xsl:for-each select="eif"> <TR> <TD><xsl:value-of select="condition" /></TD> <TD><xsl:value-of select="action" /></TD> <TD><xsl:value-of select="ref" /></TD> </TR> </xsl:for-each> </xsl:for-each> </TABLE> </xsl:for-each> </DIV> </xsl:template> </xsl:stylesheet>
Листинг 11.2.2. Решение задачи автоматической трансформации таблиц конечного автомата
Закрыть окно




<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <blockquote> <pre STYLE="font-family:Courier; font-size:12pt;" > <xsl:for-each select = "automat">//C code for automat "<xsl:value-of select="@name" />" <![CDATA[ #include <stdio.h> # define failure true void main( void ) {]]> <xsl:value-of select = "action"/> goto <xsl:value-of select = "ref"/>;<br/> <xsl:for-each select="state"> <xsl:value-of select="@name" />: symbol = getchar (); <blockquote>if (<xsl:value-of select="if/condition" /> ) <blockquote>{ <xsl:value-of select="if/action" /> goto <xsl:value-of select="if/ref" />; } </blockquote> <xsl:for-each select="eif"> else if (<xsl:value-of select="condition" /> ) <blockquote>{ <xsl:value-of select="action" /> goto <xsl:value-of select="ref" />; } </blockquote> </xsl:for-each> </blockquote> </xsl:for-each> Exit: return;<br/>} </xsl:for-each> </pre> </blockquote> </xsl:template> </xsl:stylesheet>
Листинг 11.2.3. Решение задачи автоматической трансформации таблиц конечного автомата
Закрыть окно



Содержание раздела