TLDR:如果我手工构建了一个多用途解析器,每种格式都有不同的代码,那么从长远来看,使用一大块解析器代码和一个ANTLR,PyParsing或类似的语法来指定每种格式会更好吗?
上下文: 我的工作涉及来自约50个不同基准的大量基准日志文件。有一些XML,一些HTML,一些CSV和许多专有的东西,没有文档规范。为了节省我和我的同事手动输入这些数据的时间,我编写了一个解析工具来处理我们定期使用统一接口处理的所有格式。但是,设计不是那么干净。
我在Python中编写了这个东西并创建了一个Parser类。每种文件格式都作为一种实现来处理,为Parser的read()方法提供自己的代码。我喜欢只有一个Parser定义的概念,它使用语法来理解每种格式,但我以前从未这样做过。
值得我花时间,一旦我完成重构,其他新手将来会更容易合作吗?
答案 0 :(得分:3)
我无法100%确定地回答你的问题,但我可以给你一个意见。
我发现选择使用正确的语法与手动滚动的正则表达式“解析器”通常归结为输入的统一程度。
如果输入非常统一,而且你已经知道一种处理字符串的语言,比如Python或Perl,那么我会保留你现有的代码。
另一方面,我发现解析器生成器(如Antlr)在输入可能存在错误和不一致时确实会发光。原因是形式语法允许您专注于在特定上下文中应该匹配的内容,而不必担心手动移动输入流。
此外,如果输入流有错误,那么我发现使用Antlr vs regexs处理它们通常更容易。原因是如果有两个选项可用,Antlr已经内置了用于输入正确路径的功能,包括通过谓词回滚。
说了这么多,工作代码还有很多话要说。我发现如果我想重写一些东西,那么我会尝试为重写将如何使产品用户受益的好用例。