2016-12-21 112 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找到。