Ada_Ru форум

Обсуждение языка Ада

Static FSM & Ada

Оставить новое сообщение

Сообщения

Alexey Veselovsky
Static FSM & Ada
2009-02-16 13:08:08

����� ������, � ��� �� ��� ����������� ��������� ��������� ��������? �������� �� �� ��� ����� ����� ��� ������:

http://www.rsdn.ru/article/alg/Static_Finite_State_Machine.xml

On Mon, 16 Feb 2009 16:08:08 +0300, you wrote:

 

ôÁËÏÊ ×ÏÐÒÏÓ, Á ËÁË ÎÁ áÄÅ ÒÅÁÌÉÚÕÅÔÓÑ ËÏÎÃÅÐÃÉÑ ËÏÎÅÞÎÏÇÏ Á×ÔÏÍÁÔÁ? ÷ÏÚÍÏÖÎÏ ÌÉ ÎÁ áÄÅ ÎÅÞÔÏ ×ÒÏÄÅ ×ÏÔ ÔÁËÏÇÏ:

http://www.rsdn.ru/article/alg/Static_Finite_State_Machine.xml

 

Разумеется, причем проблема модификации операторов case в Аде облегчается, т.к. Ада проверяет наличие всех альтернатив.

 

Кроме того, FSM можно реализовать через двумерный массив переходов, чего в Си - сделать напрямую нельзя из-за отсутствия массивов индексируемых перечислениями.

 

Так же возможно использование замыканий (closure), например, вместе с массивом переходов.

 

Образцы типа case по состоянию - dispatch по событию, или наоборот возможны в обоих языках.

 

Ни в каком из языков нельзя сделать dispatch по паре состояние - событие, т.к. это был бы double dispatch. Можно только последовательно, что - чертовски неудобно.

 

Реализацию на generic я не смотрел, т.к. ясно, что это можно налепить в Аде в столь же нечитабельном виде. Когда состояний и событий становится много лучше таблицы использовать, например для лексического разбора при разработке компилятора. Таблицы можно грузить динамически.

 

Исключительно полезно всякие специальные случаи факторизовать, т.к. матрицы переходов больших FSM, обычно сильно разрежены, с повторами и т.п.

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

hi,

 

Alexey Veselovsky wrote:

 

Такой вопрос, а как на Аде реализуется концепция конечного автомата?

хм... странноватый вопрос.

 

Возможно ли на Аде нечто вроде вот такого: http://www.rsdn.ru/article/alg/Static_Finite_State_Machine.xml

Здесь скорее демонстрируется идея приведения решения прикладной задачи к программной реализации конечного автомата. Примеры на С++ только для демонстрации этой идеи. Такое наваять можно на чём угодно.

 

Alex

>http://www.rsdn.ru/article/alg/Static_Finite_State_Machine.xml

 

 

����� ������ ��������������� ���� ���������� ������� ���������� ������ � ����������� ���������� ��������� ��������. ������� �� �++ ������ ��� ������������ ���� ����. ����� ������� ����� �� ��� ������.

 

���������� ������������. ��� ������ ������������ ������� C++. � ����� ������ ���� ������� ��������� ���������� FSM.

hi,

 

Alexey Veselovsky wrote:

 

http://www.rsdn.ru/article/alg/Static_Finite_State_Machine.xml

 

 

Здесь скорее демонстрируется идея приведения решения прикладной задачи к

программной реализации конечного автомата. Примеры на С++ только для

демонстрации этой идеи. Такое наваять можно на чём угодно.

 

Прочитайте внимательней. Там сурово используются шаблоны C++. В самом начале лишь примеры НЕУДОБНОЙ реализации FSM.

Я это заметил, но ковыряться в деталях _сугубо_академической_поделки_ мне влом 8-)

Если выражаться проще, то FSM на Аде реализовать можно, а вот "КАКИМИ СРЕДСТВАМИ АДЫ?" - уже зависит от поставленной целевой задачи и фантазии разработчика (собс-но, Казаков уже кратко обрисовал)

 

Alex

� ��� �������, �� ���������� � ������� _������_�������������_�������_ ��� ���� 8-)

 

��� ����� � ���, ��� ��� ������ ������������� ������� ������ ������������ � ����������, ��� ��������� �������� ��������� ������ �� �� ����� ���������� ���������, � �� ����������. + ��� ������������� ������������ ����������� ������� (���. �����. ��������). + ������� ������ �� �������.

 

���������� ��������� �������:

 

==================

// VendingMachine.h

enum State

{

Start,

Five,

Ten,

Fifteen,

Twenty

};

 

enum Event

{

Nickel,

Dime,

Quarter

};

 

class Impl

{

public:

void dispense(); // ����������� � ������ ������

};

 

typedef TYPELIST_15(

FSM_TRANSITION_NO_ACTION(Start, Nickel, Five),

FSM_TRANSITION_NO_ACTION(Start, Dime, Ten),

FSM_TRANSITION(Start, Quarter, Start, Impl, dispense),

 

FSM_TRANSITION_NO_ACTION(Five, Nickel, Ten),

FSM_TRANSITION_NO_ACTION(Five, Dime, Fifteen),

FSM_TRANSITION(Five, Quarter, Start, Impl, dispense),

 

FSM_TRANSITION_NO_ACTION(Ten, Nickel, Fifteen),

FSM_TRANSITION_NO_ACTION(Ten, Dime, Twenty),

FSM_TRANSITION(Ten, Quarter, Start, Impl, dispense),

 

FSM_TRANSITION_NO_ACTION(Fifteen, Nickel, Twenty),

FSM_TRANSITION(Fifteen, Dime, Start, Impl, dispense),

FSM_TRANSITION(Fifteen, Quarter, Start, Impl, dispense),

 

FSM_TRANSITION(Twenty, Nickel, Start, Impl, dispense),

FSM_TRANSITION(Twenty, Dime, Start, Impl, dispense),

FSM_TRANSITION(Twenty, Quarter, Start, Impl, dispense)

)

TransitionTable;

 

class VendingMachine : public fsm::Builder<TransitionTable, State, Event> {

};

 

// VendingMachine.cpp

 

#include "VendingMachine.h"

#include "display.h"

 

int main(int argc, char* argv[])

{

VendingMachine machine;

// display() ��������� ����� ��������� ��������...

display(machine);

// ...��� prompt() ������������� ��������������.

for(Event event = prompt(); event != Exit; event = prompt())

{

machine.postEvent(event);

display(machine);

}

 

return 0;

}==================

 

��� �������� ��������, �������� ������� ������ ����������� ��� ��������� �������� ��������� ������ Impl. ��������� � ������� ����� � ���� ����������� � enum'��, � ������� ��������� ��������� ������ ��� � ���� �������.

���� ���������� �����, �� FSM �� ��� ����������� �����, � ��� "������ ���������� ���?" - ��� ������� �� ������������ ������� ������ � �������� ������������ (����-��, ������� ��� ������ ���������)

FSM � �� pure C ����������� �����, ������ � ���, ��������� ��� ����� ������ ��������, ����� �� �������� ������������ �� �� ����� ���������� ��������� � ��������� ������/������ ��� ����� ��������������.

hi,

 

Alexey Veselovsky wrote:

 

Я это заметил, но ковыряться в деталях _сугубо_академической_поделки_

мне влом 8-)

 

Вся штука в том, что сия сугубо академическая поделка широко используется в продакшине, ибо...

 

Если серьезно, то был когда-то немецкий проект унифицированной реализации FSM на Аде-95, но ссылку никак не могу отковырять :(

 

Alex

>Вся штука в том, что сия сугубо академическая поделка широко используется в >продакшине, ибо...

 

Если серьезно, то был когда-то немецкий проект унифицированной

реализации FSM на Аде-95, но ссылку никак не могу отковырять :(

 

Это было как реализовано? Через некий сторонний кодогенератор/утилиту, или же средствами самого языка (через те же дженерики например)?

hi,

 

Alexey Veselovsky wrote:

 

Вся штука в том, что сия сугубо академическая поделка широко используется в

продакшине, ибо...

 

Если серьезно, то был когда-то немецкий проект унифицированной

реализации FSM на Аде-95, но ссылку никак не могу отковырять :(

 

Это было как реализовано? Через некий сторонний кодогенератор/утилиту,

или же средствами самого языка (через те же дженерики например)?

Все было написано на Аде-95. Правда, поскольку в этой поделке у меня не было особой надобности, то с деталями реализации я не разбирался.

 

Успешность не гарантирую, но попытайтесь поискать где-то тут:

http://www.informatik.uni-stuttgart.de/ifi/ps/ada-software/ada-software.html

а то у меня рабочий online internet на данный момент "лежит" :-(

 

Alex

����� � ��� �������!!!

��������� �����:

http://www.christ-usch-grein.homepage.t-online.de/Ada/FSM.html

 

���! �������! ���� ����������.

hi,

 

Alexey Veselovsky wrote:

 

Вся штука в том, что сия сугубо академическая поделка широко используется в

продакшине, ибо...

 

Если серьезно, то был когда-то немецкий проект унифицированной

реализации FSM на Аде-95, но ссылку никак не могу отковырять :(

 

Это было как реализовано? Через некий сторонний кодогенератор/утилиту,

или же средствами самого языка (через те же дженерики например)?

 

Нашел я эту поделку!!!

подробнее здесь:

http://www.christ-usch-grein.homepage.t-online.de/Ada/FSM.html

 

Alex

Нашел я эту поделку!!!

подробнее здесь:

http://www.christ-usch-grein.homepage.t-online.de/Ada/FSM.html

 

Посмотрел. Это генератор кода. Т.е. внешняя (по отношению к коду и компилятору) утилита. Т.е. таки несколько не то.

 

А то что оно писано на Аде, особой роли на самом деле не играет. Хоть на лиспе или перле, разницы тут особой нет. ;-)

 

День добрый!

Можно использовать языки моделирования близкие по духу, например VHDL. Описание процедур и функций ложатся один к одному из Ada в VHDL от Xilinx. В свое время сам проверял. Существуют конверторы Ada -> VHDL. В Linux есть проект реализации VHDL полностью написанный на Ada. Вообще меня эта тема очень интересует, кто что может добавить в таком разрезе.

 

With best regards

Sergey Kirkorov www.mediascan.by

Email: ksiby@...

 

----- Original Message ----- From: "Alexey Veselovsky" <alexey.veselovsky@...>

To: <ada_ru@yahoogroups.com>

Sent: Tuesday, February 17, 2009 12:36 PM

Subject: Re: [ada_ru] Re: Re: Static FSM & Ada

Сорри, тест кодировки.

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти