Showing entries 1 to 1
Displaying posts with tag: ragel (reset)
SQL parser in rage(l)

For the mysql-proxy I'm exploring several ways to write a small SQL parser for the internal commands. As I want to use basic SQL to modify the config and the internal operations I need a parser. Some time ago I used lemon which is used in sqlite3, which is easier to use than yacc, but you still have to write the lexer/tokenizer.

This time I looked into ragel which is a state-machine compiler.

Time get rid of code like this:

....
} else if (0 == g_ascii_strncasecmp(s->str + NET_HEADER_SIZE + 1, 
     C("update proxy_config set value=0 where option=\"proxy.profiling\""))) {
....

Ragel is a bit different than lex/yacc. Ragel combines the two into one and builds a full state-machine for the input stream. Just one file, one state-machine for the parser and lexer.

%%{
  machine sql;

  SELECT = /SELECT/i;
  FROM   = /FROM/i;
  WHERE  = …
[Read more]
Showing entries 1 to 1