Версия для печати темы
Форум на CrossPlatform.RU _ С\С++ _ Реализация конечного автомата
Автор: Andrew Selivanov 1.9.2008, 11:35
Как реализовать конечный автомат с использованием метапрограммирования: http://www.rsdn.ru/article/alg/Static_Finite_State_Machine.xml by Alexander Nikolayenko © 2005
Автор предлагает генерировать таблицу переходов с использованием шаблонов. Видимо следующий шаг после этого > Boost.Spirit
Признаться я в основном тупо использую switch/case конструкции (по разным причинам), хотелось бы услышать мнение других...
Автор: Tonal 1.9.2008, 12:41
Зачем Boost.Spirit? Почему не http://www.boost.org/doc/libs/1_36_0/libs/statechart/doc/index.html?
Автор: Litkevich Yuriy 1.9.2008, 12:47
Цитата(Andrew Selivanov @ 1.9.2008, 15:35)
switch/case конструкции
анкологично
Автор: Red Devil 3.9.2008, 16:23
Switch/Case
из буста для конечных автоматов лучше всего годится boost::signal.
Автор: sage 12.11.2008, 16:36
Конечные автоматы можно строить графически с помощью языка http://ru.wikipedia.org/wiki/ДРАКОН_(язык_программирования)
В конечном итоге схема выражается в виде
Цитата(Andrew Selivanov @ 1.9.2008, 10:35)
switch/case конструкции
Есть транслятор ДРАКОН-схем в программный код (http://sage.com.ua/ru.shtml?e6l0) на языке Active Oberon, но язык вобщем-то может быть любой.
Автор: Litkevich Yuriy 12.11.2008, 16:40
sage, читал я про дракон, сыро сильно, и плохие воспоминания о б Алгоритм билдере (визуальный асемблер для AVR'ок)
Тем более, что в этой теме обсуждались проблемы реализации
Автор: sage 12.11.2008, 16:52
Цитата(Litkevich Yuriy @ 12.11.2008, 15:40)
sage, читал я про дракон, сыро сильно
Да, пока нет нормального редактора, действительно довольно сыро. Новый редактор есть в планах писать
Автор: ViGOur 12.11.2008, 16:56
Цитата(sage @ 12.11.2008, 16:52)
Новый редактор есть в планах писать
присоединяйся к http://www.forum.crossplatform.ru/index.php?showforum=24.
Автор: sage 12.11.2008, 17:00
Цитата(ViGOur @ 12.11.2008, 15:56)
присоединяйся к http://www.forum.crossplatform.ru/index.php?showforum=24.
Нееет... уж лучше Вы к нам
Автор: Litkevich Yuriy 12.11.2008, 17:29
Цитата(Litkevich Yuriy @ 12.11.2008, 19:40)
Тем более, что в этой теме обсуждались проблемы реализации
что-то я не дописал предложение до конца
"... на С++"
Автор: sage 12.11.2008, 18:07
А я предложение дописал
Цитата(sage @ 12.11.2008, 15:36)
но язык вобщем-то может быть любой.
ДРАКОН задаёт лишь управляющие конструкции, а наполнение блоков может быть осуществлено на любом языке
Таким образом, если нам необходима трансляция в С++, убираем из С++ все управляющие конструкции if, switch/case, while, и т.д. Их заменит графика!
Если ещё и унифицировать синтаксис для наполнения блоков можно прийти к универсальному графическому представлению алгоритмов.
Похожая идея была у авторов сайта http://alglib.sources.ru/, но там использованны морально устаревшие блок-схемы.
И что-бы не сложилось впечатление будто-бы это уход от темы ветки... Конечный автомат в полной мере реализуется схемой типа "силует" в ДРАКОНе
Автор: AD 13.11.2008, 9:30
Цитата(sage @ 12.11.2008, 18:07)
Конечный автомат в полной мере реализуется схемой типа "силует" в ДРАКОНе
Можно вопрос? А каким образом пользователь, особенно такой "дубовый", как я,
поймет, что слово "силует"("силуэт" возможно ?????) подразумевает конечный автомат?
Автор: sage 13.11.2008, 10:57
Цитата(AD @ 13.11.2008, 8:30)
Можно вопрос? А каким образом пользователь, особенно такой "дубовый", как я,
поймет, что слово "силует"("силуэт" возможно ?????) подразумевает конечный автомат?
Да, точно "силуэт", Вы правы
Насчёт "автоматности" "силуэта" шли жаркие http://forum.oberoncore.ru/viewtopic.php?f=62&t=1152&start=0. Но, на мой взгляд, тежело не увидеть очевидного... поскольку многие убедились на практике (в том числе и я), что "автоматные" задачи с помощью "силуэта" выражаются и успешно решаются. Что ещё нужно?
Автор: AD 13.11.2008, 11:08
Цитата(sage @ 13.11.2008, 10:57)
Да, точно "силуэт", Вы правы
Насчёт "автоматности" "силуэта" шли жаркие http://forum.oberoncore.ru/viewtopic.php?f=62&t=1152&start=0. Но, на мой взгляд, тежело не увидеть очевидного... поскольку многие убедились на практике (в том числе и я), что "автоматные" задачи с помощью "силуэта" выражаются и успешно решаются. Что ещё нужно?
Вопрос не в том! просто где-то из программы, в которой есть этот элемент, не читая тонны документации, можно узнать что с помощью СИЛУЭТА можно описать конечный автомат? Как это сделать прочитав КРАТКУЮ справку, предположим где-то в инете, можно "чайнику" создать этот автомат? Или же перед этим требуется хорошо разобраться в программе?
Автор: sage 13.11.2008, 12:06
Цитата(AD @ 13.11.2008, 10:08)
не читая тонны документации
Документации вобщем-то не тонны
Есть книга В.Д. Паронджанова http://forum.oberoncore.ru/viewtopic.php?p=21078#p21078
Автор: kwisp 22.7.2009, 16:19
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров
1. создаешь енум, где элементы состояния автомата.
2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики.
3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо.
коллега сказал что подсмотрел в ядре линукса основную идею.
если кому интересно выложу пример.
П.С.
кажется где то я уже это писал....
Автор: AD 22.7.2009, 16:51
Цитата(kwisp @ 22.7.2009, 17:19)
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров
1. создаешь енум, где элементы состояния автомата.
2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики.
3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо.
Может быть лучше с помощью паттерна
Состояние/
State? Не реализовывал, но, думаю, стоит попробовать.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)