[ragel-users] Searching a buffer

Adrian Thurston thurston at complang.org
Mon Apr 20 23:10:17 UTC 2009


There's no best way, you just have to choose one that works for you. The 
alternative to the two methods you tried is to manually run the machine 
( A | B | C ) at every position in the input. As soon as it fails it 
will stop so you won't get N^2 running time. This is very much like 
using a scanner. You'll have to keep data around though. You can't do 
that on one pass of the data for the same reason you need to do some 
management of ts, te, etc. for a scanner.

-Adrian

Smelly Pooh wrote:
> Hi,
> 
> What's the best way to search a buffer for a list of patterns using ragel?
> 
> I've tried:
> 
> search = A | B | C;
> 
> main := any* search;
> 
> which works ok but generates a lot of states.
> 
> I've also tried using a scanner like:
> 
> main := |*
>     A;
>     B;
>     C;
>     any;
> *|;
> 
> which also works and generates much fewer states, but I'm not interested 
> in writing extra code to handle te, ts, eof etc.
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> 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