Python 重新初始化PLY解析器

Python 重新初始化PLY解析器,python,parsing,ply,Python,Parsing,Ply,我使用PLY编写了一个解析器,它可以满足我的需要。 现在,我想使用parser类解析多个文件。 我不想为每个文件实例化解析器类,而是希望对所有文件重复使用相同的实例化类(这样我就可以在解析器类中积累一些结果) 一个文件的解析可能无法很好地完成,因此我希望在输入另一个文件之前重新初始化解析器 重新初始化PLY解析器的正确方法是什么? (或者,我不应该重复使用解析器?如果要对多个文件重复使用同一个解析器,但每次都重置堆栈,可以使用重新启动功能: parser = yacc.yacc() for fi

我使用PLY编写了一个解析器,它可以满足我的需要。 现在,我想使用parser类解析多个文件。 我不想为每个文件实例化解析器类,而是希望对所有文件重复使用相同的实例化类(这样我就可以在解析器类中积累一些结果)

一个文件的解析可能无法很好地完成,因此我希望在输入另一个文件之前重新初始化解析器

重新初始化PLY解析器的正确方法是什么?
(或者,我不应该重复使用解析器?

如果要对多个文件重复使用同一个解析器,但每次都重置堆栈,可以使用
重新启动
功能:

parser = yacc.yacc()
for file in file_list:
    with open(file) as fp:
       parser.parse(fp.read())
       ... # accumulate logging info
       parser.restart() # this discards the entire parsing stack and resets the parser to its initial state

更多信息请访问。

(免责声明:我不使用PLY。)如果您举例说明希望保留的数据类型以及原因,您可能会得到更多答案。如果PLY确实有一个安全的重新初始化方法,我怀疑它会让您想要保留的确切值未重新初始化。。。就这一点而言,您是否最好将希望从每个解析器保存的数据累积到一个字典中,或者可能在每个解析文件的一个字典中?我正在编写一个Verilog解析器,它将处理多个Verilog文件。其中一些可能包含错误,以便在解析文件时,解析器可能会以一种奇怪的状态停止。我认为重用解析器可能是一个好主意,这样就不需要拆下解析器对象并构建新的解析器对象。此外,我还可以在类中保留来自多个输入文件的解析结果。“其中一些可能包含错误,因此解析器可能会在一个有趣的状态下停止”,再加上“我可以保留来自多个输入文件的解析结果”,听起来像是将来自第一类文件的错误混合到第二类文件的良好结果中。但我不在这里,所以我将把这个问题留给其他人。不过,我建议您将评论中的细节添加到问题中——这里不会注意到这些细节。Pyparsing包括一个verilog解析器作为其示例的一部分——即使您仍然选择使用PLY,这段代码可能会让您了解您自己的解析器实现中需要什么。