2016-12-21 77 views
0

我用PLY编写了一个解析器,它可以满足我的需求。 现在,我想使用解析器类来解析多个文件。 而不是实例化每个文件的解析器类,我想重新使用相同的实例化类的所有文件(以便我可以在解析器类中积累一些结果)。重新初始化PLY解析器

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

什么是重新初始化PLY解析器的正确方法? 如果要重复使用多个文件相同的解析器(?或者说,我不应该再使用一个解析器)

+0

(声明:我不使用PLY。)如果您提供您想要保留的数据类型的示例以及原因,您可能会得到更多答案。如果PLY _does_有一个安全的重新初始化方法,我怀疑它会让_un_重新初始化想要保留的确切值。 ...对于这个问题,你是不是更好地累积你想从每个解析器保存在字典中的数据,或者可能在每个解析文件的一个字典中保存数据? –

+1

我在写一个Verilog解析器,它会处理多个Verilog文件。其中的一些可能包含错误,以便解析文件时解析器可能停在滑稽状态。我认为重新使用解析器可能是一个好主意,因此不需要拆分解析器对象并构建新的解析器对象。另外,我可以保留类中多个输入文件的分析结果。 – user2756376

+0

“它们中的一些可能包含错误,因此解析器可能会停在一个有趣的状态”,再加上“我可以保留来自多个输入文件的解析结果”,听起来像是将第一类文件中的错误混合为良好结果在第二。但是我在这里不在我的领域,所以我会把这个问题留给其他人。不过,我建议你将你的评论中的细节写入你的问题---他们不会在这里被注意到。 –

回答

1

,但每次重新设置堆栈,你可以使用restart功能:

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 

更多可以在official documentation找到。