Данная лекция предназначена для тех, кто уже имеет начальные навыки работы на
Серьезный недостаток предложенного в $$\S$$ 10.3 решения задачи
Разработка технологии включает в себя создание и использование инструментов поддержки всех этапов, из которых состоит технологическая цепочка оперирования с таблицами. Ключевым моментом является выбор формата представления таблиц, приспособленный как к ручной, так и к автоматической обработке. Есть смысл попытаться отыскать универсальное решение. Если, вдобавок, оно будет стандартизовано, то появится возможность создать технологию. Сегодня предпосылки для такого решения существуют, в частности, использование так называемых
При обсуждении программы 10.3.1 было показано, что предложенный текст размечен символами _i, i=1,...,5 а также то, как от размеченного текста переходить к программе на языке С++ или к интерпретации таблицы. У такой разметки только один недостаток: она не стандартизована, а потому о распространении за пределы среды разработчиков системы, предназначенной для поддержки применения таблиц, говорить не приходится.
В настоящее время используются следующие
Их основное назначение — структурированное представление визуализации информации. С точки зрения автоматической трансляции таблиц целесообразно обсудить
Построение разного рода визуализаций текстов и сопутствующей им информации — определяющая функция
Пример 11.2.1. Текст данного примера в
\begin{example}\label{markupeample0}
и \end{example}.
Для того, чтобы напечатать первую из этих команд, пришлось применить дополнительную разметку (чтобы команда была проинтерпретирована как часть текста)
\verb|\begin{example}\label{markupeample0}|\\.
И, наконец, предыдущая строка также потребовала дополнительной разметки, но, во избежание бесконечного регресса, на этом закончим.
Для употребляющихся в Интернет
Подобные вычисления можно определять для любого
Если обратиться к стилю программирования, который в принципе может поддерживать
Ниже описывается решение задачи автоматической трансформации таблиц конечного автомата с использованием наиболее подходящего для этих целей языка
Если описывать тексты в современных
Применим возможности системы XML/XSL к нашей задаче: описание конечного автомата (за основу взята таблица переходов 9.1).
<?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>
В этом описании нашли отражение следующие свойства нашего конечного автомата (за основу взята таблица переходов 9.1):
<automat> ) включает в себя теги <state> — перечень всех состояний в любом порядке, а также теги <action> — действие и <ref> — ссылка на исходное <state>, т. к. состояние Init, например, не нуждается в чтении символа, не содержит условий и должно быть всегда первым. Как будет понятно впоследствии, универсальность составных частей модели упрощает работу с ней.<state> содержит атрибут name, чтобы на него можно было ссылаться, и набор условий: один тег <if> и любое количество тегов <eif> (означающих " else if "). Эти два тега также можно было бы заменить одним универсальным, тем более что структура их потомков не различается, но опять же этого не сделано по соображениям облегчения форматирования.<if> или <eif> включает в себя три тега: <condition> — собственно условие и уже описанные теги <action> и <ref> — действие при выполненном условии и ссылка на следующее состояние.<action> и <condition> содержат специальный тег <![CDATA[...]]> для включения строк на языке C++.В описание не включено состояние Exit. Эта часть одинакова у различных автоматов, а потому нецелесообразно ее описывать явно.
Данное описание служит основой для построения различных визуализаций автомата с помощью XSL. Например, достаточно просто строится табличная визуализация, практически не отличающаяся от ранее составленной таблицы:
<?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>
Следующая визуализация — это
<?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>
Как легко видеть, разница этого и предыдущего стилевых файлов только в том, что там, где для визуализации в таблицу вставляются графические элементы, изображающие рамки, для трансляции помещаются части синтаксиса языка С++/C# и отступы в целях лучшей читаемости получаемой программы.
Итак, благодаря использованию формата представления данных
Отметим теперь еще несколько интересных возможностей, которые мы бы могли использовать.
Хотя данная технология позволяет легко создавать С++/С# программы, основой для них остается язык
Естественно редактировать таблицы там же, где мы их уже научились генерировать — в окне браузера. Доступ к редактированиюэтих таблиц может предоставить DOM (стандарт, реализованный в браузерах Internet Explorer 5.0 и Netscape Navigator 6.0). Изменения, добавления и другие редактирующие действия определяются довольно просто. Например, на языке Java script добавление новой ячейки в таблицу можно описать следующим образом:
var oRow; var oCell; oRow = oTable.insertRow(); oCell = oRow.insertCell(); oCell.innerHTML = "This cell is <b>new</b>."
Точно так же можно создавать таблицы, строки и ячейки в них. Реализация же самого интерфейса (кнопочек, средств выделения, полей ввода) зависит только от вашей фантазии.
Тот же DOM, точно таким же образом, может работать с
Еще одним шагом в развитии проекта, использующим язык
Для этого придется использовать определения типов документов (Document Type Definition, DTD). Хранимые в начале файла
Каждая строка в определении типа документа может содержать декларацию типа элемента, именовать элемент и определять тип данных, которые элемент может содержать. Она имеет следующий вид:
<!ELEMENT имя_элемента (тип_данных)>
Например, декларация
<!ELEMENT action (#PCDATA)>
определяет элемент с именем action, содержащий символьные данные (т. е. текст). Декларация
<!ELEMENT automat (state_1, state_2, state_3)>
определяет элемент с именем automat, содержащий подэлементы state_1, state _2 и state_3 в указанном порядке, например:
<automat>
<state_1>XML : время пришло</state_1>
<state_2>XML превосходит самое себя</state_2>
<state_3>Управление сетями и системами
с помощью XML</state_3>
</automat>
После определения элементов DTD могут также определять атрибуты с помощью команды !ATTLIST. Она указывает элемент, именует связанный с ним атрибут и затем описывает его допустимые значения. Команда !ATTLIST позволяет управлять атрибутами и многими другими способами: задавать значения по умолчанию, подавлять пробелы и т. д. DTD могут содержать декларации !ENTITY, где приводятся ссылки на объекты, и декларации !NOTATION, указывающие, что делать с двоичными файлами, представленными не в формате
Серьезное и несколько удивительное ограничение DTD состоит в том, что они не допускают типизации данных, т. е. ограничивают данные конкретным форматом (таким, как дата, целое число или число с плавающей точкой). Как вы, вероятно, уже заметили, DTD используют иной синтаксис, нежели
Данная лекция предназначена для тех, кто уже имеет начальные навыки работы на
Серьезный недостаток предложенного в $$\S$$ 10.3 решения задачи
Разработка технологии включает в себя создание и использование инструментов поддержки всех этапов, из которых состоит технологическая цепочка оперирования с таблицами. Ключевым моментом является выбор формата представления таблиц, приспособленный как к ручной, так и к автоматической обработке. Есть смысл попытаться отыскать универсальное решение. Если, вдобавок, оно будет стандартизовано, то появится возможность создать технологию. Сегодня предпосылки для такого решения существуют, в частности, использование так называемых
При обсуждении программы 10.3.1 было показано, что предложенный текст размечен символами _i, i=1,...,5 а также то, как от размеченного текста переходить к программе на языке С++ или к интерпретации таблицы. У такой разметки только один недостаток: она не стандартизована, а потому о распространении за пределы среды разработчиков системы, предназначенной для поддержки применения таблиц, говорить не приходится.
В настоящее время используются следующие
Их основное назначение — структурированное представление визуализации информации. С точки зрения автоматической трансляции таблиц целесообразно обсудить
Построение разного рода визуализаций текстов и сопутствующей им информации — определяющая функция
Пример 11.2.1. Текст данного примера в
\begin{example}\label{markupeample0}
и \end{example}.
Для того, чтобы напечатать первую из этих команд, пришлось применить дополнительную разметку (чтобы команда была проинтерпретирована как часть текста)
\verb|\begin{example}\label{markupeample0}|\\.
И, наконец, предыдущая строка также потребовала дополнительной разметки, но, во избежание бесконечного регресса, на этом закончим.
Для употребляющихся в Интернет
Подобные вычисления можно определять для любого
Если обратиться к стилю программирования, который в принципе может поддерживать
Ниже описывается решение задачи автоматической трансформации таблиц конечного автомата с использованием наиболее подходящего для этих целей языка
Если описывать тексты в современных
Применим возможности системы XML/XSL к нашей задаче: описание конечного автомата (за основу взята таблица переходов 9.1).
<?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>
В этом описании нашли отражение следующие свойства нашего конечного автомата (за основу взята таблица переходов 9.1):
<automat> ) включает в себя теги <state> — перечень всех состояний в любом порядке, а также теги <action> — действие и <ref> — ссылка на исходное <state>, т. к. состояние Init, например, не нуждается в чтении символа, не содержит условий и должно быть всегда первым. Как будет понятно впоследствии, универсальность составных частей модели упрощает работу с ней.<state> содержит атрибут name, чтобы на него можно было ссылаться, и набор условий: один тег <if> и любое количество тегов <eif> (означающих " else if "). Эти два тега также можно было бы заменить одним универсальным, тем более что структура их потомков не различается, но опять же этого не сделано по соображениям облегчения форматирования.<if> или <eif> включает в себя три тега: <condition> — собственно условие и уже описанные теги <action> и <ref> — действие при выполненном условии и ссылка на следующее состояние.<action> и <condition> содержат специальный тег <![CDATA[...]]> для включения строк на языке C++.В описание не включено состояние Exit. Эта часть одинакова у различных автоматов, а потому нецелесообразно ее описывать явно.
Данное описание служит основой для построения различных визуализаций автомата с помощью XSL. Например, достаточно просто строится табличная визуализация, практически не отличающаяся от ранее составленной таблицы:
<?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>
Следующая визуализация — это
<?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>
Как легко видеть, разница этого и предыдущего стилевых файлов только в том, что там, где для визуализации в таблицу вставляются графические элементы, изображающие рамки, для трансляции помещаются части синтаксиса языка С++/C# и отступы в целях лучшей читаемости получаемой программы.
Итак, благодаря использованию формата представления данных
Отметим теперь еще несколько интересных возможностей, которые мы бы могли использовать.
Хотя данная технология позволяет легко создавать С++/С# программы, основой для них остается язык
Естественно редактировать таблицы там же, где мы их уже научились генерировать — в окне браузера. Доступ к редактированиюэтих таблиц может предоставить DOM (стандарт, реализованный в браузерах Internet Explorer 5.0 и Netscape Navigator 6.0). Изменения, добавления и другие редактирующие действия определяются довольно просто. Например, на языке Java script добавление новой ячейки в таблицу можно описать следующим образом:
var oRow; var oCell; oRow = oTable.insertRow(); oCell = oRow.insertCell(); oCell.innerHTML = "This cell is <b>new</b>."
Точно так же можно создавать таблицы, строки и ячейки в них. Реализация же самого интерфейса (кнопочек, средств выделения, полей ввода) зависит только от вашей фантазии.
Тот же DOM, точно таким же образом, может работать с
Еще одним шагом в развитии проекта, использующим язык
Для этого придется использовать определения типов документов (Document Type Definition, DTD). Хранимые в начале файла
Каждая строка в определении типа документа может содержать декларацию типа элемента, именовать элемент и определять тип данных, которые элемент может содержать. Она имеет следующий вид:
<!ELEMENT имя_элемента (тип_данных)>
Например, декларация
<!ELEMENT action (#PCDATA)>
определяет элемент с именем action, содержащий символьные данные (т. е. текст). Декларация
<!ELEMENT automat (state_1, state_2, state_3)>
определяет элемент с именем automat, содержащий подэлементы state_1, state _2 и state_3 в указанном порядке, например:
<automat>
<state_1>XML : время пришло</state_1>
<state_2>XML превосходит самое себя</state_2>
<state_3>Управление сетями и системами
с помощью XML</state_3>
</automat>
После определения элементов DTD могут также определять атрибуты с помощью команды !ATTLIST. Она указывает элемент, именует связанный с ним атрибут и затем описывает его допустимые значения. Команда !ATTLIST позволяет управлять атрибутами и многими другими способами: задавать значения по умолчанию, подавлять пробелы и т. д. DTD могут содержать декларации !ENTITY, где приводятся ссылки на объекты, и декларации !NOTATION, указывающие, что делать с двоичными файлами, представленными не в формате
Серьезное и несколько удивительное ограничение DTD состоит в том, что они не допускают типизации данных, т. е. ограничивают данные конкретным форматом (таким, как дата, целое число или число с плавающей точкой). Как вы, вероятно, уже заметили, DTD используют иной синтаксис, нежели
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.