我要处理很多不同的文件格式。至少50,也许超过100。
我以前和Antlr玩过。但是,我不确定Antlr是否适合这个项目,原因有以下几点:
基本上,我喜欢Antlr,但我认为它可能更适合为复杂语言创建一个或两个解析器,而不是为一些更简单的语言/格式创建100个解析器。
类似Antlr的解析器生成器的一个替代方法是解析器组合器。其优点是解析器直接集成到代码中,使得重用、测试和进一步的抽象非常容易。另外,未来的开发人员也不必学习如何使用新工具。解析器组合器的缺点是,我不知道在Java中使用它们的任何繁重的库。
所以问题是::
注意:有些文件格式是CSV或制表符分隔的,有些文件格式比较复杂,有些文件格式和Java一样复杂。从语义上讲,它们也可能相当复杂(虽然不是所有的都是如此)。
发布于 2011-10-29 13:01:34
我个人在过去使用过阿帕奇蒂卡,它非常适合我的需要,涵盖了各种各样的格式。我从来没有使用过Antlr,所以不能对此发表评论。
发布于 2011-10-29 15:00:54
有一种解析技术非常适合于组合、重用、继承和扩展解析器组件(甚至在运行时扩展正在运行的解析器)。
我永远不会把代码生成工具和一个好的声明性DSL作为一个缺点,但可能我离Java子文化太远了。如果这些担忧在某种程度上是有效的,那么这也不是一个问题--您可以使用组合器来实现Packrat。它在Java中可能有些笨拙(因为缺少适当的闭包和lambdas),但仍然比典型的特殊递归下降解析器更易读。
https://stackoverflow.com/questions/7938989
复制相似问题