与Flex / Bison相比,使用ANTLR有什么缺点?

时间:2009-11-26 22:35:57

标签: antlr bison flex-lexer jflex

我几年前在本科学习期间曾在Flex,Bison工作过。但是,我现在不记得了。最近,我听说过ANTLR。

  • 您是否建议我学习ANTLR或更好地刷新Flex / Bison?
  • ANTLR的功能是否比Flex / Bison更多/更少?

3 个答案:

答案 0 :(得分:7)

ANTLRv3是LL(k),可以配置为LL(*)。后者特别容易编写解析器,因为您基本上可以使用EBNF。

此外,ANTLR生成的代码非常类似于您从头开始编写的递归下降解析器。它非常易读且易于调试,以查看解析无法正常工作或工作错误的原因。

Flex / Bison(或任何其他LALR解析器)的优势在于它更快。

答案 1 :(得分:2)

ANTLR有一个运行时库JAR,您必须将其包含在项目中。

ANTLR的递归下降解析器比Flex / Bison生成的“自下而上”解析器更容易调试,但语法规则略有不同。

如果您想要Java的Flex / Bison风格(LALR)解析器生成器,请查看JavaCC

答案 2 :(得分:0)

我们决定将ANTLR用于我们的一些信息处理要求 - 解析遗留文件和自然语言。学习曲线非常陡峭,我们正在学习它,我觉得这是一种更现代化,更通用的方法,可以满足我们的需求。缺点 - 因为你问 - 主要是学习曲线似乎是不可避免的。