10

几年前,我在本科学习期间曾在 Flex, Bison 工作过。然而,我现在已经不记得太多了。最近,我听说了 ANTLR。

  • 你会建议我学习 ANTLR 还是更好地复习 Flex/Bison?
  • ANTLR 的功能是否比 Flex/Bison 多/少?
4

3 回答 3

10

ANTLRv3 为 LL(k),可配置为 LL(*)。后者尤其容易编写解析器,因为您基本上可以按原样使用 EBNF。

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

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

于 2009-11-26T22:41:31.997 回答
2

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

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

如果您想要用于 Java 的 Flex/Bison 样式 (LALR) 解析器生成器,请查看JavaCC

于 2010-04-08T21:08:21.700 回答
0

我们决定使用 ANTLR 来满足我们的一些信息处理需求——解析遗留文件和自然语言。学习曲线很陡峭,但我们正在超越它,我觉得这是一种更现代、更通用的方法来完成我们需要做的事情。缺点 - 正如你所问 - 主要是学习曲线,这似乎是不可避免的。

于 2009-11-27T15:41:14.173 回答