Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реализация конечного автомата
Форум на CrossPlatform.RU > Разработка > С\С++
Andrew Selivanov
Как реализовать конечный автомат с использованием метапрограммирования: http://www.rsdn.ru/article/alg/Static_Fini...ate_Machine.xml by Alexander Nikolayenko © 2005
Автор предлагает генерировать таблицу переходов с использованием шаблонов. Видимо следующий шаг после этого > Boost.Spirit :)

Признаться я в основном тупо использую switch/case конструкции (по разным причинам), хотелось бы услышать мнение других... :)
Tonal
Зачем Boost.Spirit? Почему не Boost.Statechart?
Litkevich Yuriy
Цитата(Andrew Selivanov @ 1.9.2008, 15:35) *
switch/case конструкции

анкологично
Red Devil
Switch/Case
из буста для конечных автоматов лучше всего годится boost::signal.
sage
Конечные автоматы можно строить графически с помощью языка ДРАКОН
В конечном итоге схема выражается в виде
Цитата(Andrew Selivanov @ 1.9.2008, 10:35) *
switch/case конструкции
:)
Есть транслятор ДРАКОН-схем в программный код (Проект ДРОН) на языке Active Oberon, но язык вобщем-то может быть любой.
Litkevich Yuriy
sage, читал я про дракон, сыро сильно, и плохие воспоминания о б Алгоритм билдере (визуальный асемблер для AVR'ок)
Тем более, что в этой теме обсуждались проблемы реализации
sage
Цитата(Litkevich Yuriy @ 12.11.2008, 15:40) *
sage, читал я про дракон, сыро сильно
Да, пока нет нормального редактора, действительно довольно сыро. Новый редактор есть в планах писать :)
ViGOur
Цитата(sage @ 12.11.2008, 16:52) *
Новый редактор есть в планах писать :)
присоединяйся к Free DevStudio++. ;)
sage
Цитата(ViGOur @ 12.11.2008, 15:56) *
присоединяйся к Free DevStudio++. ;)
Нееет... уж лучше Вы к нам :)
Litkevich Yuriy
Цитата(Litkevich Yuriy @ 12.11.2008, 19:40) *
Тем более, что в этой теме обсуждались проблемы реализации
что-то я не дописал предложение до конца :)
"... на С++"
sage
А я предложение дописал
Цитата(sage @ 12.11.2008, 15:36) *
но язык вобщем-то может быть любой.
:)
ДРАКОН задаёт лишь управляющие конструкции, а наполнение блоков может быть осуществлено на любом языке :)
Таким образом, если нам необходима трансляция в С++, убираем из С++ все управляющие конструкции if, switch/case, while, и т.д. Их заменит графика! ;)
Если ещё и унифицировать синтаксис для наполнения блоков можно прийти к универсальному графическому представлению алгоритмов.
Похожая идея была у авторов сайта alglib, но там использованны морально устаревшие блок-схемы.
И что-бы не сложилось впечатление будто-бы это уход от темы ветки... Конечный автомат в полной мере реализуется схемой типа "силует" в ДРАКОНе :rolleyes:
AD
Цитата(sage @ 12.11.2008, 18:07) *
Конечный автомат в полной мере реализуется схемой типа "силует" в ДРАКОНе :rolleyes:

Можно вопрос? А каким образом пользователь, особенно такой "дубовый", как я,
поймет, что слово "силует"("силуэт" возможно ?????) подразумевает конечный автомат? :blink:
sage
Цитата(AD @ 13.11.2008, 8:30) *
Можно вопрос? А каким образом пользователь, особенно такой "дубовый", как я,
поймет, что слово "силует"("силуэт" возможно ?????) подразумевает конечный автомат?
Да, точно "силуэт", Вы правы :)
Насчёт "автоматности" "силуэта" шли жаркие дебаты. Но, на мой взгляд, тежело не увидеть очевидного... поскольку многие убедились на практике (в том числе и я), что "автоматные" задачи с помощью "силуэта" выражаются и успешно решаются. Что ещё нужно? ;)
AD
Цитата(sage @ 13.11.2008, 10:57) *
Да, точно "силуэт", Вы правы :)
Насчёт "автоматности" "силуэта" шли жаркие дебаты. Но, на мой взгляд, тежело не увидеть очевидного... поскольку многие убедились на практике (в том числе и я), что "автоматные" задачи с помощью "силуэта" выражаются и успешно решаются. Что ещё нужно? ;)

Вопрос не в том! просто где-то из программы, в которой есть этот элемент, не читая тонны документации, можно узнать что с помощью СИЛУЭТА можно описать конечный автомат? Как это сделать прочитав КРАТКУЮ справку, предположим где-то в инете, можно "чайнику" создать этот автомат? Или же перед этим требуется хорошо разобраться в программе? :)
sage
Цитата(AD @ 13.11.2008, 10:08) *
не читая тонны документации
Документации вобщем-то не тонны :)
Есть книга В.Д. Паронджанова "Как улучшить работу ума? Алгоритмы без программистов -- это очень просто! М.: Дело, 2001. --360 стр"
kwisp
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров
1. создаешь енум, где элементы состояния автомата.
2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики.
3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо.

коллега сказал что подсмотрел в ядре линукса основную идею.

если кому интересно выложу пример.

П.С.
кажется где то я уже это писал:)....
AD
Цитата(kwisp @ 22.7.2009, 17:19) *
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров
1. создаешь енум, где элементы состояния автомата.
2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики.
3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо.

Может быть лучше с помощью паттерна Состояние/State? Не реализовывал, но, думаю, стоит попробовать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.