[ragel-users] Conditional parsing

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


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


Thanks a lot.

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

ragel-users mailing list
ragel-users at complang.org

More information about the ragel-users mailing list