gpt4 book ai didi

Scala 解析器组合器,大文件问题

转载 作者:行者123 更新时间:2023-12-03 23:58:38 26 4
gpt4 key购买 nike

我写了一个解析器如下:

class LogParser extends JavaTokenParsers {

def invertedIndex: Parser[Array[Array[(Int, Int)]]] = {
num ~> num ~> num ~> rep(postingsList) ^^ {
_.toArray
}
}

def postingsList: Parser[Array[(Int, Int)]] = {
num ~> rep(entry) ^^ {
_.toArray
}
}

def entry = {
num ~ "," ~ num ^^ {
case docID ~ "," ~ count => (docID.toInt, count.toInt)
}
}

def num = wholeNumber ^^ (_.toInt)

}

如果我使用 FileReader 从(270MB)文件解析如下:
val index = parseAll(invertedIndex, new FileReader("path/to/file")).get

我得到一个 Exception in thread "main" java.lang.StackOverflowError (我也试过用 BufferedReader 包装)但我可以通过首先将文件读入字符串来修复它,如下所示:
val input = io.Source.fromFile("path/to/file")
val str = input.mkString
input.close()
val index = parseAll(invertedIndex, str).get

为什么会这样?有什么办法可以避免先把它读成String,好像很浪费?

最佳答案

还有另一个库[1],它很像支持蹦床的scala解析器组合器,这是阻止stackoverflow错误所需要的。

[1] https://github.com/djspiewak/gll-combinators

关于Scala 解析器组合器,大文件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13213646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com