我必须处理许多不同的文件格式。至少50,也许超过100。
过去我和Antlr玩过。但是,由于以下几个原因,我不确定Antlr是否适合这个项目:
基本上,我喜欢Antlr,但我认为它可能更适合为复杂语言创建一个或两个解析器,而不是为一些更简单的语言/格式创建100个解析器。
类似Antlr的解析器生成器的替代方法是解析器组合器。优点是解析器直接集成到代码中,使重用,测试和进一步抽象变得非常容易。此外,未来的开发人员不必学习如何使用新工具。解析器组合器的缺点是我不知道在Java中使用它们的任何重型库。
所以问题是:
注意:某些文件格式是CSV或制表符分隔的,有些文件格式更复杂,有些文件格式与Java一样复杂。语义学上,它们也可能相当复杂(尽管不是全部都是)。
答案 0 :(得分:0)
我个人过去曾使用Apache Tika,这非常适合我的需要,涵盖了各种各样的格式。我从来没有使用过Antlr所以无法真正评论它。
答案 1 :(得分:0)
There is a parsing technique非常适合组合,重用,继承和扩展解析器组件(甚至在运行时扩展正在运行的解析器)。
我永远不会将代码生成工具和一个好的声明性DSL视为一个缺点,但可能我离Java亚文化太远了。如果这些问题在某种程度上是有效的,那么它仍然不是问题 - 您可以使用组合器实现Packrat。它在Java中可能有点笨拙(由于缺少适当的闭包和lambdas),但仍然比典型的ad hoc递归下降解析器更具可读性。