Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 重写多用途日志文件解析器以使用正式语法是否会提高可维护性?_Parsing_Logging_Antlr_Grammar_Pyparsing - Fatal编程技术网

Parsing 重写多用途日志文件解析器以使用正式语法是否会提高可维护性?

Parsing 重写多用途日志文件解析器以使用正式语法是否会提高可维护性?,parsing,logging,antlr,grammar,pyparsing,Parsing,Logging,Antlr,Grammar,Pyparsing,TLDR:如果我手工构建了一个多用途解析器,每种格式都有不同的代码,那么从长远来看,使用一段解析器代码和一个ANTLR、PyParsing或类似的语法来指定每种格式会更好吗 背景: 我的工作涉及来自约50个不同基准的大量基准日志文件。有一些是XML格式,一些是HTML格式,一些是CSV格式,还有很多没有文档规范的专有内容。为了节省我和我的同事手工输入这些数据的时间,我编写了一个解析工具,用统一的界面处理我们经常处理的所有格式。然而,设计却不那么干净 我用Python编写了这个东西,并创建了一个解

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

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

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


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

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

我发现选择使用正确的语法与手动正则表达式“解析器”相比,往往取决于输入的统一程度

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

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

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


话虽如此,对于工作代码还有很多话要说。我发现,如果我想重写某些内容,那么我会尝试编写一个很好的用例,说明重写将如何使产品的用户受益。

感谢您的回复。输入非常不一致。我们一直在运行rev的基准测试,几乎不能保证新的结果格式会像旧的一样。文件可以被损坏、部分或多批结果连接在一起。我给你打一针。起初,我对Python解析工具犹豫不决,因为我认为它们对大多数用户来说都有一个学习曲线,而不是像EBNF这样的东西。然后,我对我的同事进行了更多的思考,并意识到他们通常比脚本更新,所以Python不会成为更多的障碍。到目前为止进展顺利。