首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为大型项目选择解析技术

为大型项目选择解析技术
EN

Stack Overflow用户
提问于 2011-10-29 12:47:30
回答 2查看 326关注 0票数 2

我要处理很多不同的文件格式。至少50,也许超过100。

我以前和Antlr玩过。但是,我不确定Antlr是否适合这个项目,原因有以下几点:

  • 很难组合和重用语法和/或语法片段
  • Antlr做代码生成??对现有解析器进行更改需要回到Antlr,进行更改,重新生成代码,将代码集成回代码库,并运行单元测试。
  • 做树构建/处理需要处理Antlr内部的另一种语言--这是未来开发人员可能遇到的问题。

基本上,我喜欢Antlr,但我认为它可能更适合为复杂语言创建一个或两个解析器,而不是为一些更简单的语言/格式创建100个解析器。

类似Antlr的解析器生成器的一个替代方法是解析器组合器。其优点是解析器直接集成到代码中,使得重用、测试和进一步的抽象非常容易。另外,未来的开发人员也不必学习如何使用新工具。解析器组合器的缺点是,我不知道在Java中使用它们的任何繁重的库。

所以问题是:

  1. Antlr是否适合/打算用于如此大规模的解析项目?
  2. 在Java中进行大规模解析的其他选项是什么?

注意:有些文件格式是CSV或制表符分隔的,有些文件格式比较复杂,有些文件格式和Java一样复杂。从语义上讲,它们也可能相当复杂(虽然不是所有的都是如此)。

EN

回答 2

Stack Overflow用户

发布于 2011-10-29 13:01:34

我个人在过去使用过阿帕奇蒂卡,它非常适合我的需要,涵盖了各种各样的格式。我从来没有使用过Antlr,所以不能对此发表评论。

票数 0
EN

Stack Overflow用户

发布于 2011-10-29 15:00:54

有一种解析技术非常适合于组合、重用、继承和扩展解析器组件(甚至在运行时扩展正在运行的解析器)。

我永远不会把代码生成工具和一个好的声明性DSL作为一个缺点,但可能我离Java子文化太远了。如果这些担忧在某种程度上是有效的,那么这也不是一个问题--您可以使用组合器来实现Packrat。它在Java中可能有些笨拙(因为缺少适当的闭包和lambdas),但仍然比典型的特殊递归下降解析器更易读。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7938989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档