语法分析瑞士军刀:LEMON Parser Generator

Lemon是个类似yacc(bison)的解析器生成器,它是SQLite的子项目。在SQLite中用来解析SQL语句。它是一个LALR(1)的解析器,关于LR和LL解析器谁好谁坏网上已经有讨论了。这里就不发表个人观点了,绝大多数情况下应付普通的DSL哪一种都行。 Lemon非常小巧,就一个程序文件(lemon.c)和一个模板文件(lempar.c)。将程序文件编译之后就得到lemon分析器了。然后将模板文件放到lemon能找到的地方(当前目录、$PATH中)即可。官方的文档写得也是同样小巧,不多说半句,我喜欢,使用前必看。 Lemon与bison最大的不同之处在于: 1.没有全局变量。这带来了线程安全性。 2.由词法分析器调用而不是调用词法分析器。这带来了编程上的一些便利,配合ragel使用真是畅快淋漓。 不过多介绍了,下面这个“无聊的分析器”呢,是我送给大家的甜品。 // lexer.rl #include #include #include "parser.h" #include "parser.c" %%{ machine lexer; main := |* [0-9]+ { int x = 0; for (char *c = ts; c != te; c++) { x = x * 10 + (*c - '0'); } Parse(parser, TK_INTEGER, x); }; '+' { Parse(parser, [...]

你可能感兴趣的:(工具使用,lemon,parser,ragel)