3

TLDR:如果我为每种格式手动构建了一个多用途解析器,从长远来看,使用一大块解析器代码和 ANTLR、PyParsing 或类似语法来指定每种格式会更好吗?

背景:我的工作涉及来自大约 50 个不同基准的大量基准日志文件。有一些 XML、一些 HTML、一些 CSV 和许多没有文档规范的专有内容。为了节省我和我的同事手动输入这些数据的时间,我编写了一个解析工具,它可以通过统一的界面处理我们经常处理的所有格式。但是,设计不是那么干净。

我用 Python 写了这个东西并创建了一个 Parser 类。每种文件格式都作为一种实现来处理,它为 Parser 的 read() 方法提供自己的代码。我喜欢只有一个使用语法来理解每种格式的 Parser 定义的想法,但我以前从未这样做过。

这值得我花时间吗,一旦我完成重构,其他新手将来会更容易合作吗?

4

1 回答 1

3

我不能100%肯定地回答你的问题,但我可以给你一个意见。

我发现选择使用正确的语法与手动正则表达式“解析器”通常归结为输入的统一程度。

如果输入非常统一,并且您已经知道一种可以很好地处理字符串的语言,例如 Python 或 Perl,那么我会保留您现有的代码。

另一方面,我发现像 Antlr 这样的解析器生成器在输入可能有错误和不一致时真的很出色。原因是形式语法允许您专注于在特定上下文中应该匹配的内容,而不必担心手动遍历输入流。

此外,如果输入流有错误,那么我发现使用 Antlr 与正则表达式处理它们通常更容易。原因是如果有几个选项可用,Antlr 已经内置了用于存储正确路径的功能,包括通过谓词回滚。

说了这么多,关于工作代码还有很多话要说。我发现如果我想重写某些东西,那么我会尝试为重写将如何使产品用户受益的一个好的用例。

于 2010-02-03T19:54:47.417 回答