Parsing 重写多用途日志文件解析器以使用正式语法是否会提高可维护性?
TLDR:如果我手工构建了一个多用途解析器,每种格式都有不同的代码,那么从长远来看,使用一段解析器代码和一个ANTLR、PyParsing或类似的语法来指定每种格式会更好吗 背景: 我的工作涉及来自约50个不同基准的大量基准日志文件。有一些是XML格式,一些是HTML格式,一些是CSV格式,还有很多没有文档规范的专有内容。为了节省我和我的同事手工输入这些数据的时间,我编写了一个解析工具,用统一的界面处理我们经常处理的所有格式。然而,设计却不那么干净 我用Python编写了这个东西,并创建了一个解析器类。每个文件格式都作为一个实现来处理,该实现为解析器的read()方法提供自己的代码。我喜欢只有一个解析器定义的想法,它使用语法来理解每种格式,但我以前从未这样做过Parsing 重写多用途日志文件解析器以使用正式语法是否会提高可维护性?,parsing,logging,antlr,grammar,pyparsing,Parsing,Logging,Antlr,Grammar,Pyparsing,TLDR:如果我手工构建了一个多用途解析器,每种格式都有不同的代码,那么从长远来看,使用一段解析器代码和一个ANTLR、PyParsing或类似的语法来指定每种格式会更好吗 背景: 我的工作涉及来自约50个不同基准的大量基准日志文件。有一些是XML格式,一些是HTML格式,一些是CSV格式,还有很多没有文档规范的专有内容。为了节省我和我的同事手工输入这些数据的时间,我编写了一个解析工具,用统一的界面处理我们经常处理的所有格式。然而,设计却不那么干净 我用Python编写了这个东西,并创建了一个解
这值得我花时间吗?将来我完成重构后,其他新手会更容易合作吗?我不能百分之百肯定地回答你的问题,但我可以给你一个意见 我发现选择使用正确的语法与手动正则表达式“解析器”相比,往往取决于输入的统一程度 如果输入非常统一,并且您已经知道一种很好地处理字符串的语言,如Python或Perl,那么我将保留您现有的代码 另一方面,我发现解析器生成器,比如Antlr,在输入中可能存在错误和不一致时非常有用。原因是,形式语法允许您关注在特定上下文中应该匹配的内容,而不必担心手动遍历输入流 此外,如果输入流有错误,那么我发现使用Antlr和regexs处理它们通常更容易。原因是,如果有两个选项可用,Antlr就内置了用于引导正确路径的功能,包括通过谓词回滚
话虽如此,对于工作代码还有很多话要说。我发现,如果我想重写某些内容,那么我会尝试编写一个很好的用例,说明重写将如何使产品的用户受益。感谢您的回复。输入非常不一致。我们一直在运行rev的基准测试,几乎不能保证新的结果格式会像旧的一样。文件可以被损坏、部分或多批结果连接在一起。我给你打一针。起初,我对Python解析工具犹豫不决,因为我认为它们对大多数用户来说都有一个学习曲线,而不是像EBNF这样的东西。然后,我对我的同事进行了更多的思考,并意识到他们通常比脚本更新,所以Python不会成为更多的障碍。到目前为止进展顺利。