Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 217

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 211 212 213 214 215 216 < 217 > 218 219 220 221 222 223 .. 316 >> Следующая

ваемх данных. ногда такая разметка явно расставляется по структуре данных (пример — язык Рефал), иногда она выносится в специальную
10.5. ПРОГРАММНЫЕ ПРЕДСТАВЛЕНИЯ ГРАФА СОСТОЯНИЙ
617
структуру (Prolog), но в обоих случаях контекст, определяий выполнение команд, и замена данных путем порождения результатов команд остаются. Вполне закономерна тенденция, прослеживающаяся в развитии языков разметки, отделять распознавание структур текста — сентенциальная часть обработки — от использования этой структуры для задания действий, кото-ре определя т обобенне вычисления.11
Обзор языков разметки с точки зрения выделения обобщенных вычислений естественно поместить в более позднюю главу, посвященную сентенциальному программировани , поскольку и вчисления, и структуры, задан-не этими языками, естественно соотносятся в перву очередь с методами сентенциального программирования. о, как мо но было предполагать у е после знакомства с синтаксическими таблицами, некоторые из аспектов обработки структурированных текстов и обобщенных вычислений над ними естественно обсудить именно в связи с автоматами и методами программирования от состояний. оэтому ни е описывается конкретное реение задачи автоматической трансформации таблиц конечного автомата с использованием наиболее подходящего для этих целей языка XML (см. книгу [55] и §13.3.2).12
10.5.3. Автоматное преобразование структурированных текстов
Если описывать текст в современных языках разметки, типа LATEX [43] или XML то возникает задача описывать и программировать преобразования таких текстов. акеты здесь явля тся паллиативом, и на самом деле реени-ями являются специализированные языки преобразований текстов либо соответствующие методики программирования, поддержанные автоматизированным преобразованием спецификаций в программу. Здесь мы рассмотрим методику, базирууся на автоматах.
рименим возмо ности системы XML/XSL к наей конкретной задаче: описание конечного автомата. Программа 10.5.1
11 Как мы уже имели возможность убедиться (см., например, § 3.5 и 3.6), тенденция отделения распознавания от обработки характерна и для других стилей программирования. Но для сентенциального стиля она оказывается решающей.
12 То, что мы ссылаемся на более поздний параграф, — осознанное решение. В технических руководствах Вам все равно предстоит научиться заглядывать вперед, чтобы понять интересующее Вас место. Чтение книги как последовательного файла — слишком часто наименее эффективный метод ее изучения.
618
ГЛАВА 10. МЕТОДЫ ПРОГРАММИРОВАНИЯ ОТ СОСТОЯНИЙ
<?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[ failure]]> </condition>
<action><![CDATA[/* Переход не требует чтения,
symbol == '\n' не нужно читать */ ]]>
</action>
<ref>Exit</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>
10.5. ПРОГРАММНЫЕ ПРЕДСТАВЛЕНИЯ ГРАФА СОСТОЯНИЙ
619
<condition><![CDATA[ symbol != '\n']]> </condition>
<action><![CDATA[printf (" - %i\n", cnt);]]>
</action>
<ref>St1</ref> </eif> <eif>
<condition><![CDATA[ failure]]> </condition>
<action><![CDATA[printf (" - %i\n", cnt);]]> </action> <ref>Exit</ref> </eif> </state> </automat>
В этом описании нали свое отра ение следуие свойства наего конечного автомата (за основу взята таблица конечного автомата из § 10.2.3):
• Конечный автомат (тег <automat>) включает в себя теги <state> — перечень всех состояний в лбом порядке а так е теги <action> — действие и <ref> — ссылка на исходное состояние13.
• Каждый <state> содержит атрибут name, чтобы на него можно было ссылаться, и набор условий: один тег <if> и любое количество 0) тегов <eif> (означающих "else if"). Эти два тега также можно было бы заменить одним универсальным, тем более что структура их потомков не различается, но опять е этого не сделано по сообра ениям облегчения форматирования.
• Кадый <if> или <eif> вкл чает в себя три тэга: <condition> — собственно условие и у е описанне теги <action> и <ref> — действие при выполненном условии и сслка на следуее состояние.
• Теги <action> и <condition> содержат специальный тег <![CDATA[.. .]]>
для вкл чения строк на язке C++.
13 Можно было бы оформить эти тэги с помощью особого состояния Init, но при этом мы бы потеряли универсальность тэга <state>, т. к. состояние Init, например, не нуждается в чтении символа, не содержит условий и должно быть всегда первым. А, как будет понятно в последствии, универсальность составных частей модели сильно упрощает работу с ней.
Предыдущая << 1 .. 211 212 213 214 215 216 < 217 > 218 219 220 221 222 223 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100