我在scala中使用本地解析器組合器庫,我想用它來解析一些大文件。我有我的combinators設置,但我試圖解析的文件太大,一次不能讀入內存。我希望能夠通過解析器從輸入文件進行流式處理,並將其讀回到磁盤,以便我不需要立即將其全部存儲在內存中。我的當前系統看起來像這樣:斯卡拉解析器組合器:解析流
val f = Source.fromFile("myfile")
parser.parse(parser.document.+, f.reader).get.map{_.writeToFile}
f.close
這將讀取整個文件,因爲它解析,我想避免。
這很有道理。有什麼辦法可以利用我的頂級組合器只是一個重複的事實嗎?也就是說,我可以按照單個「文檔」大小的塊讀入流中嗎? –
只要你能想出辦法(手動)分割文件,是的。然後你將每個文件分別轉交給你的語法。大多數PEG運營商(包括重複)實際上都依賴於回溯,因爲PEG的表現力是基於能夠說「試試這個,如果不行的話我們會嘗試其他的」。 –