Category: Compiler
Coco/R: A LL(1) parser generator
October 25th, 2009Link: http://www.scifac.ru.ac.za/coco/
最近,我发现一个LL(1)parser generator,它像antlr,但是好像简单一些。
平心而论,我对antlr的LL(k) parser很没有信心。根据以前的经验,如果lex+lemon只要200k的话,对应的antlr LL(k) parser要>1M. 不过通过阅读其他人的经验,好像LL(1)的实现其实要小巧和快速一些。可能antlr的实现有问题。因此我决定在试试Coco/R.
另外一个原因是Coco/R支持原生的多语言。我准备用ruby来试试LL(1)的c语言parser.
Coco/R的官方网站上提供了电子版的书籍 Compilers and Compiler Generators: An Introduction with C++
LALR(1) vs LL(1)
October 22nd, 2009Link: http://compilers.iecc.com/comparch/article/95-11-234
今天我研究了一下语法分析算法,分别是LL(1)和LALR(1)。在comp.compiler上看到一个很有趣的争论,总结如下:
LALR(1) (yacc)
Pro:
语法自然简洁
语法表达力强
Con:
1,yacc容易出错,grammer文件需要各种hack来使yacc接受,
2,分析速度稍慢
3,错误恢复难
4,生成语法树难
LL(1) (handwrite recurise parser)
Pro:
容易实现
速度快
容易理解和维护
易于错误恢复
易于生成语法树
Con:
语法表现力差
为适合LL(1)语法,经常需要改写语法,导致语法不自然和难懂