K J*_*K J 15 parsing yacc antlr lalr ll-grammar
我一直在使用lex/yacc,现在我正在尝试切换到ANTLR.主要关注的是ANTLR是一个LL(*)解析器,与yacc不同,它是LALR.我习惯于自下而上思考,我不知道LL语法的优点是什么.人们说LL语法现在更容易理解,更受欢迎.但似乎LR解析器更强大,例如LL解析器无法处理左递归,尽管似乎有一些解决方法.
那么问题是LL语法比LALR有什么优势?如果有人能给我一些例子,我会很感激.有用文章的链接也很棒.
感谢您的帮助!
(我认为这是一个很好的资源:LL解析器对LR解析器有什么优势?但是对于一些例子它会更好.)
Pup*_*ppy 13
LR解析器比LL解析器更强大,此外,LALR解析器可以像LL解析器一样在O(n)中运行.所以你不会发现LL相对于LR的任何功能优势.
因此,LL的唯一优点是LR状态机相当复杂且难以理解,并且LR解析器本身并不是特别直观.另一方面,自动生成的LL解析器代码可以非常容易理解和调试.
Aus*_*ley 11
我看到LL解析器的最大优点是它们易于理解和实现!您可以使用与语法紧密匹配的代码手写递归下降解析器.
LR通常被认为更强大,也更快,但我知道有一些权衡:
但是,您会发现LL(*)也非常强大.