代码之家  ›  专栏  ›  技术社区  ›  Aaron Altman

重写一个多用途日志文件解析器来使用正式的语法会提高可维护性吗?

  •  3
  • Aaron Altman  · 技术社区  · 16 年前

    TLDR:如果我手工为每种格式构建一个多用途的解析器,并使用不同的代码,那么从长远来看,使用一块解析器代码和一个antlr、pyparsing或类似的语法来指定每种格式会更好吗?

    语境: 我的工作涉及大约50个不同基准的大量基准日志文件。有一些XML,一些HTML,一些CSV和许多没有文档说明的专有资料。为了节省我和我的同事手工输入数据的时间,我编写了一个解析工具,它处理我们经常处理的所有格式,使用一个统一的界面。不过,设计并不是那么干净。

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

    这值得我花点时间吗?等我完成重构之后,其他新手将来会更容易与之合作吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   chollida    16 年前

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

    我发现使用正确语法的选择与手工滚动的regex“parsers”相比,常常归结为输入的一致性。

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

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

    此外,如果输入流有一个错误,那么我发现使用antlr和regexs处理它们通常更容易。原因是,如果有两个选项可用,那么antlr就具有承载正确路径的内置功能,包括通过谓词回滚。

    说了这么多之后,工作代码就没有什么可说的了。我发现如果我想重写一些东西,那么我会努力为重写如何对产品的用户有利做一个好的用例。

    推荐文章