[ragel-users] Conditional parsing

Adrian Thurston thurston at complang.org
Sat Jun 28 22:43:17 UTC 2014


Hi Iñaki,

Using conditionals is one way. I'm not sure I fully understand your use 
case, but I think you can also make use of the ability to enter into any 
named instantiation. All machine instances are defined in the data 
section as constant values. It's just a matter of setting the current 
state to the appropriate value.

-Adrian

On 14-04-10 04:52 PM, Iñaki Baz Castillo wrote:
> 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 :)
>
>
>

_______________________________________________
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