[ragel-users] Re: optimization idea

Adrian Thurston thurs... at cs.queensu.ca
Wed Feb 27 22:21:24 UTC 2008

Ragel should be binary searching those tests. Can you produce some numbers that show custom code to be faster?

Or if you don't want to modify generated code conditions might be useful for experimenting with this. Try using any with a condition that tests *p.


-----Original Message-----
From: Andrei Polushin <polushin at gmail.com>

Date: Wed, 27 Feb 2008 17:16:30 
To:ragel-users at googlegroups.com
Subject: [ragel-users] Re: optimization idea

Gaspard Bucher wrote:
> When there is a bug regex, we end up with huge switch statements. From 
> what I understand from these statements, in the worst case, the 
> process must execute every instruction of type (jump not equal).
 > We could reduce this by implementing a simple binary tree when the
 > case statements get too big:

I have a more practical use case that requires a similar optimization.

For the xdigit transition, Ragel generates something like:

   if ('0' <= *p && *p <= '9' || 'a' <= *p && *p <= 'f'
                              || 'A' <= *p && *p <= 'F') {
       // ...

In C, it could be replaced with the quite efficient table lookup code:

   if (isxdigit(*p)) {
       // ...

The general idea is that there should be something in the Ragel code 
generator that would allow us to selectively group transitions and 
optimize the code generated for them.

The problem is that we don't know in advance what transitions would be 
there after FSM minimization. So there should be a possibility to 
associate the optimization with something like "transition pattern", 
then rlgen-xx would recognize the "transition pattern" and generate the 
manually optimized code instead of its own.

Andrei Polushin

More information about the ragel-users mailing list