[ragel-users] Ragel for network protocols?
Adrian Thurston
thurs... at cs.queensu.ca
Wed Nov 8 19:20:32 UTC 2006
Hi Stéphane,
The mechanism for building machines with the state chart paradigm is hidden
away in the language. You use the following operators
label: make labels
-> draw epsilon operations
, join machines together without transitions
() grouping comes in handy
You always need a start label for a join to work and if you want any final
states you need to make them explicitly by drawing an epsilon transition to
the implicitly created "final" state.
Note that if you're feeling adventurous, OPEN and CLOSE can be arbitrary
regular expressions.
%%{
machine foo;
OPEN = 0;
CLOSE = 1;
main :=
start:
door_closed: (
OPEN -> door_open -> final
),
door_open: (
CLOSE -> door_closed
);
}%%
Stéphane Bortzmeyer wrote:
> I'm trying to experiment with Ragel for specifying network protocols,
> which are often described as state machines.
>
> All the Ragel examples I can find are for parsers, not for protocol
> state machines. Reading the documentation, I still cannot write a
> state machine for a protocol as simple as:
>
> Open
> / \
> / \
> +--------------+ \ +-------------+
> | | > | |
> | Door-closed | | Door-open |
> +--------------+ +-------------+
> ^ /
> \ /
> \ /
> Close
>
> Any sample code somewhere?
>
>
More information about the ragel-users
mailing list