two state machines

mitchell mforal.n... at gmail.com
Sat Jun 7 05:39:45 UTC 2008


Hi,

Untested, but it's an idea I had:

> #include <string.h>
> #include <stdio.h>
> %%{
>         machine FSM;
            char *substring_start, *substring_end;
>
>         FMS1 := ????          <- this parse a part of the string
            FMS1 := 'bar' @{ [do stuff] };

>         main := ????           <- this verify the string to match a pattern
            main := 'foo' >{ substring_start = p; }
                                 @{ substring_end = p; fgoto FMS1; };

> and extract a substring to pass to FSM1
Substring is between substring_start and substring_end.
>
> }%%
>
> %% write data;
>
> void parse(char *buf)
> {
>         int cs;
>         char *p = buf;
>         char *pe = p + strlen(p) + 1;
>         char FN[16];
>
>         %% write init;
>         %% write exec;     <- main
>
>         %% write exec;     <- FSM1
You don't need the second exec; FSM1 is executed via fgoto if main
matches.

>
> }
>
> int main( int argc, char **argv )
> {
>         if ( argc > 1 ) {
>                 parse(argv[1]);
>         }
>         return 0;
>
> }
>
> otherwise what vcan I do and how? I need fgoto, fcall or other?
fgoto should do the job.

Take care,



More information about the ragel-users mailing list