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

标签: 工具使用 lemon parser ragel | 发表时间:2011-07-26 06:20 | 作者:dccmx GFans
出处:http://blog.dccmx.com/
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 <string.h> #include <stdlib.h> #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] 推荐:

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

- GFans - DCCMX
Lemon是个类似yacc(bison)的解析器生成器,它是SQLite的子项目. 在SQLite中用来解析SQL语句. 它是一个LALR(1)的解析器,关于LR和LL解析器谁好谁坏网上已经有讨论了. 这里就不发表个人观点了,绝大多数情况下应付普通的DSL哪一种都行. Lemon非常小巧,就一个程序文件(lemon.c)和一个模板文件(lempar.c).

Unix调试的瑞士军刀:lsof

- Ran - 黑客志
这是“你应该知道的Unix和Linux命令”系列的第三篇,在这篇文章中,我会介绍lsof这个工具,如果说netcat是进行网络诊断的瑞士军刀,那么lsof就是Unix调试的瑞士军刀. Lsof是遵从Unix哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所有文件信息. 打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,明明管道,符号链接,Socket流,网络Socket,UNIX域Socket,以及其它更多.

Unix 调试的瑞士军刀:lsof

- 加州旅客 - Wow! Ubuntu
本文转载自黑客志 (这是一个多人协作的群体Blog,旨在为国内开发者提供新鲜和高质量的黑客文章,文章主要来源为 Hacker News. 原文地址:Unix调试的瑞士军刀:lsof / 原作者: @Yuanyi Zhang. 这是“你应该知道的Unix和Linux命令”系列的第三篇,在这篇文章中,我会介绍lsof这个工具,如果说netcat是进行网络诊断的瑞士军刀,那么 lsof 就是 Unix 调试的瑞士军刀.

Unix调试的瑞士军刀:lsof

- paul - FeedzShare
来自: 黑客志 - FeedzShare  . 发布时间:2011年06月20日,  已有 2 人推荐. 这是“你应该知道的Unix和Linux命令”系列的第三篇,在这篇文章中,我会介绍lsof这个工具,如果说netcat是进行网络诊断的瑞士军刀,那么lsof就是Unix调试的瑞士军刀. Lsof是遵从Unix哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所有文件信息.

石器时代的瑞士军刀

- Zoe - 玩意儿
石器时代的工具,变成瑞士军刀的造型,酷. 本文原始链接:http://www.cngadget.cn/swiss-army-knife.html.

石器时代的 瑞士军刀

- Life is Beta - Poboo
精挑细选8位 Cosplay 美女. 瑞士超现实主义艺术插画师David Fuhrer作品欣赏 (@sudasuta). 大叔版少女时代,同步率破万,以前的鸡鸡鸡鸡弱爆了. 瑞士Vals村的地下住宅 (@60designwebpick). 瑞士动物园培育奇异水母,形似煎蛋 (@ermiao). 瑞士裝置藝術家—URS FISCHER (@mydesy).

石器时代的瑞士军刀

- Norbert - YesKafei Daily
3D 时代:Sony 计划将所有已经发布的PS3游戏升级为3D版本. 三轮车将10年带到了纽约时代广场. 商业中心纯粹为瑜伽~ (@i-oo). 对话,时代的气息 (@longquanzs). 心胸格局——菩萨度众生就是引领时代 (@longquanzs). 纽约时代广场:上海宣传片 (@17weiguan).

Linux命令行里的“瑞士军刀”

- - 外刊IT评论
这里说的“瑞士军刀”是指那些简单的一句命令就能完成其它高级语言一大片代码才能完成的工作. 下面的这些内容是 Quora网站上Joshua Levy网友的总结:. 通过sort/uniq获取文件内容的交集、合集和不同之处:假设有a、b两个文本文件,文件本身已经去除了重复内容. 下面是效率最高的方法,可以处理任何体积的文件,甚至几个G的文件.

技术主管的瑞士军刀

- - 博客园_新闻
英文原文:  The Swiss Army Knife for Technical Leads. 作为一名技术主管的工作是令人非常振奋的,你每天都需要应对新的挑战,要解决新的问题,以此获得很大的满足感. 但有些时候,为了改进你的团队,让它变得更强大,你还需要一些提示. 有许多种技术可以保证我们所生产的产品质量,但其中最重要也是最强大的一点毫无疑问是反馈循环.