[ragel-users] Conditional parsing

Iñaki Baz Castillo ibc at aliax.net
Thu Apr 10 20:52:41 UTC 2014


2014-04-10 22:08 GMT+02:00 Iñaki Baz Castillo <ibc at aliax.net>:
> Hi,
>
> I'm building a parser for a protocol message similar to HTTP (let's
> say: a main header and N key: value separated by CRLF until a final
> double CRLF). My concern is:
>
> - I parse the messages in a "Dispatcher" module that just needs to
> parse a few fields in each message.
> - Then the Dispatcher passes the message to a Worker thread via UNIX Socket.
> - And the Worker must parse it again, but in this case I need all the
> fields parsed.
>
> Note that during the Worker's parsing, a C++ complex object is build
> with all the parsed fields mapped into member variables, so I don't
> want to play with those complex objects in the Dispatcher module.
>
> How could I reuse the same Ragel machine for both cases? Of course I
> would like something like:
>
>
>
> %%{
>   machine Parser;
>
>   [...]
>
>   if (dispatcher) {
>     main :=  xxxxxxx
>   }
>   else {
>     main := yyyyyyy
>   }
>
> }%%



Mmm, I think using the "when" statement is the way to go :)



-- 
Iñaki Baz Castillo
<ibc at aliax.net>

_______________________________________________
ragel-users mailing list
ragel-users at complang.org
http://www.complang.org/mailman/listinfo/ragel-users


More information about the ragel-users mailing list