我在 scala 中使用本机解析器组合器库,我想用它来解析许多大文件。我已经设置了组合器,但是我尝试解析的文件太大,无法一次读入内存。我希望能够通过解析器从输入文件流式传输并将其读回磁盘,这样我就不需要一次将其全部存储在内存中。我当前的系统看起来像这样:
val f = Source.fromFile("myfile")
parser.parse(parser.document.+, f.reader).get.map{_.writeToFile}
f.close
这会在解析时读取整个文件,我想避免这种情况。
没有简单或内置的方法可以使用 scala 的解析器组合器来完成此任务,该组合器提供了实现的工具解析表达式语法 https://en.wikipedia.org/wiki/Parsing_expression_grammar.
运营商如|||
(最长匹配)在很大程度上与流解析模型不兼容,因为它们需要广泛的回溯功能。为了完成您想要做的事情,您需要重新制定语法,这样就不需要回溯,ever。这通常比听起来要困难得多。
正如其他人所提到的,最好的选择是研究初步阶段,在该阶段对输入进行分块(例如按行),以便一次可以处理流的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)