我必须处理许多不同的文件格式。至少 50 个,也许超过 100 个。
我过去曾使用过 Antlr。但是,出于以下几个原因,我不确定 Antlr 是否适合这个项目:
- 很难组合和重用语法和/或语法片段
- Antlr 进行代码生成——对现有解析器进行更改需要返回到 Antlr,进行更改,重新生成代码,将代码集成回代码库,并运行单元测试
- 进行树构建/处理需要在 Antlr 中处理另一种语言——这对 future 的开发人员来说是一个潜在的问题
基本上,我喜欢 Antlr,但我认为它可能更适合为复杂语言创建一个或两个解析器,而不是为稍微简单的语言/格式创建 100 个解析器。
类 Antlr 解析器生成器的替代方案是解析器组合器。优点是解析器直接集成到代码中,使重用、测试和进一步抽象变得非常容易。此外, future 的开发人员不必学习如何使用新工具。解析器组合器的缺点是我不知道有任何重型库可以在 Java 中使用它们。
所以问题是:
- Antlr 是否适合/适用于如此庞大的解析项目?
- 在 Java 中进行大规模解析还有哪些其他选择?
注意:有些文件格式是 CSV 或制表符分隔的,有些稍微复杂一些,有些和 Java 一样复杂。在语义方面,它们也可能非常复杂(尽管并非全部)。
最佳答案
我个人用过Apache Tika在过去,这非常适合我的需要,涵盖了多种格式。我从未使用过 Antlr,所以无法对其发表评论。
关于java - 为大型项目选择解析技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7938989/