几年前,我在本科学习期间曾在 Flex, Bison 工作过。然而,我现在已经不记得太多了。最近,我听说了 ANTLR。
- 你会建议我学习 ANTLR 还是更好地复习 Flex/Bison?
- ANTLR 的功能是否比 Flex/Bison 多/少?
几年前,我在本科学习期间曾在 Flex, Bison 工作过。然而,我现在已经不记得太多了。最近,我听说了 ANTLR。
ANTLRv3 为 LL(k),可配置为 LL(*)。后者尤其容易编写解析器,因为您基本上可以按原样使用 EBNF。
此外,ANTLR 生成的代码非常类似于您从头开始编写的递归下降解析器。它非常易读且易于调试,以查看解析不起作用或错误的原因。
Flex/Bison(或任何其他 LALR 解析器)的优势在于速度更快。
ANTLR 有一个运行时库 JAR,您必须将其包含在您的项目中。
ANTLR 的递归下降解析器比 Flex/Bison 生成的“自下而上”解析器更容易调试,但语法规则略有不同。
如果您想要用于 Java 的 Flex/Bison 样式 (LALR) 解析器生成器,请查看JavaCC。
我们决定使用 ANTLR 来满足我们的一些信息处理需求——解析遗留文件和自然语言。学习曲线很陡峭,但我们正在超越它,我觉得这是一种更现代、更通用的方法来完成我们需要做的事情。缺点 - 正如你所问 - 主要是学习曲线,这似乎是不可避免的。