我在scala中使用本地解析器组合器库,我想用它来解析一些大文件。我有我的combinators设置,但我试图解析的文件太大,一次不能读入内存。我希望能够通过解析器从输入文件进行流式处理,并将其读回到磁盘,以便我不需要立即将其全部存储在内存中。我的当前系统看起来像这样:斯卡拉解析器组合器:解析流
val f = Source.fromFile("myfile")
parser.parse(parser.document.+, f.reader).get.map{_.writeToFile}
f.close
这将读取整个文件,因为它解析,我想避免。
这很有道理。有什么办法可以利用我的顶级组合器只是一个重复的事实吗?也就是说,我可以按照单个“文档”大小的块读入流中吗? –
只要你能想出办法(手动)分割文件,是的。然后你将每个文件分别转交给你的语法。大多数PEG运营商(包括重复)实际上都依赖于回溯,因为PEG的表现力是基于能够说“试试这个,如果不行的话我们会尝试其他的”。 –