www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Finite state machine in D

reply Druzhinin Alexandr <news digitalmars.com> writes:
Hello
Could someone help me with FSM (like boost MSM but simpler and in D of 
course) - where should I start from? I found good paper about FSM 
implementation in c++ (with type list and so on), but I'm not sure it is 
applicable in D. What is the D-way to implement fsm with code generation?
Sep 26 2012
parent reply Mirko Pilger <pilger cymotec.de> writes:
 What is the D-way to implement fsm with code generation?

you might have a look at ragel: http://www.complang.org/ragel/
Sep 27 2012
next sibling parent reply Druzhinin Alexandr <news digitalmars.com> writes:
27.09.2012 14:48, Mirko Pilger пишет:
 What is the D-way to implement fsm with code generation?

you might have a look at ragel: http://www.complang.org/ragel/

implementation in D without third party's instruments (for simple use). My question was inspired when I saw several fsm implementation in c++, but I didn't find D implementation to compare with. And now I'm writing my own. This writing seems to be very useful - I've found new advantages of D over C++ =)
Sep 27 2012
parent reply Druzhinin Alexandr <news digitalmars.com> writes:
27.09.2012 18:15, Philippe Sigaud пишет:
 I'm not sure you need code generation. Using D functions literals or
 closures already gives you a good part of a FSM:

 States are functions, that accept a current 'payload' and return a
 tuple consisting of another function and the new payload.
 The FSM driver just call the current state on the current payload,
 stores the new stat/payload pair and loop until it reaches a terminal
 state.

 I can search at home to see what I have (if I kept anything), if
 you're interested. It's a FSM in 10-20 lines of code, IIRC.

What about code generation - I just want to learn how to do it, so
Sep 27 2012
parent Druzhinin Alexandr <news digitalmars.com> writes:
28.09.2012 01:24, Philippe Sigaud пишет:
 Here is an example:

 http://dpaste.dzfl.pl/81a63163

 Seeing your code in another thread, yes code generation could help
 here. I have a template tutorial (a bit light on code generation) that
 might help you on this.

 https://github.com/PhilippeSigaud/D-templates-tutorial/blob/master/dtemplates.pdf?raw=true

 (this will download a pdf)

Sep 29 2012
prev sibling next sibling parent Philippe Sigaud <philippe.sigaud gmail.com> writes:
On Thu, Sep 27, 2012 at 10:15 AM, Druzhinin Alexandr
<news digitalmars.com> wrote:
 27.09.2012 14:48, Mirko Pilger =D0=BF=D0=B8=D1=88=D0=B5=D1=82:

 What is the D-way to implement fsm with code generation?



I'm not sure you need code generation. Using D functions literals or closures already gives you a good part of a FSM: States are functions, that accept a current 'payload' and return a tuple consisting of another function and the new payload. The FSM driver just call the current state on the current payload, stores the new stat/payload pair and loop until it reaches a terminal state. I can search at home to see what I have (if I kept anything), if you're interested. It's a FSM in 10-20 lines of code, IIRC. If you really want code generation, could you give us some use case? std.regex contains a compile-time regex engine that is, in a way, a FSM on steroids. I have a parser generator project on github that also does code generation, but both modules are for a particular type of automata: parsers/matchers, not a generic FSM.
Sep 27 2012
prev sibling parent Philippe Sigaud <philippe.sigaud gmail.com> writes:
On Thu, Sep 27, 2012 at 2:39 PM, Druzhinin Alexandr
<news digitalmars.com> wrote:


Here is an example: http://dpaste.dzfl.pl/81a63163
 What about code generation - I just want to learn how to do it, so

Seeing your code in another thread, yes code generation could help here. I have a template tutorial (a bit light on code generation) that might help you on this. https://github.com/PhilippeSigaud/D-templates-tutorial/blob/master/dtemplates.pdf?raw=true (this will download a pdf)
Sep 27 2012