speed vs. re2c?

Joshua Haberman jhaber... at gmail.com
Fri Oct 6 01:02:15 UTC 2006


Adrian,

Let me try to clarify what I'm talking about.  The traditional use of
re2c or Ragel is:

COMPILE TIME: c-compiler(ragel(regex)) -> binary that can parse regex

I am proposing:

COMPILE TIME: c-compiler(ragel) -> library that can generate
regex-parsing code
RUN TIME: ragel-library(regex) -> machine code in memory I can jump to
to parse regex

An API for Ruby would look something like:

myparser = Ragel::Machine.new("number = (
    [0-9]+ $dgt ( '.' @dec [0-9]+ $dgt )?
    ( [eE] ( [+\-] $exp_sign )? [0-9]+ $exp )?
   ) %number;")

myparser.actions["dgt"] = Proc.new { |dgt| puts "DGT: #{dgt}" }

myparser.run(File.open("foo.txt"))

Specifically:

- I can use Ragel from an interpreted language, without having to
compile every pattern with a C compiler (like Mongrel does)

- I can write my actions in the target language

- it's faster than a table-based re engine, like what I would get by
saying: file.read =~ /blah/

Is this more clear?

Thanks,
Josh



More information about the ragel-users mailing list