用于流解析器的Java或Scala库
据我所知,Scala解析器组合器要求整个文件都在内存中,而对于大小为数十GB的文件来说,这并不太实际。总之,parser combinator库比手头任务所需的功能强大得多,所以我正在考虑推出简单的FSA解析器。是否有一些库用于此功能,或者除了具有多个用于流解析器的Java或Scala库,java,scala,parsing,Java,Scala,Parsing,据我所知,Scala解析器组合器要求整个文件都在内存中,而对于大小为数十GB的文件来说,这并不太实际。总之,parser combinator库比手头任务所需的功能强大得多,所以我正在考虑推出简单的FSA解析器。是否有一些库用于此功能,或者除了具有多个开关的文本墙之外没有其他方法 据我所知,Scala解析器组合器需要整个文件 存储在内存中,对于几十个文件来说,这是不太实际的 GB大小 如果需要解析一个大文件,可以使用BufferedReader并使用该读取器调用parseAll。大概是这样的:
开关的文本墙之外没有其他方法
据我所知,Scala解析器组合器需要整个文件
存储在内存中,对于几十个文件来说,这是不太实际的
GB大小
如果需要解析一个大文件,可以使用BufferedReader
并使用该读取器调用parseAll
。大概是这样的:
val bufferedReader: BufferedReader = ???
val myResult = MyParser.parseAll(MyParser.rootParser, bufferedReader)
通过这种方式,文件被分块读取,这样您就不必担心内存不足
或者,如果需要特定于parser combinators API的读取器,则可以从bufferedSource
创建PagedSeqReader
val rdr = new PagedSeqReader(PagedSeq.fromReader(Source.fromFile(new File("huge_file")).bufferedReader()))
Antlr是生成解析器的好工具。据我所知,可以使用流来解析可能无限的字符流。阅读scaladoc,解析器组合器应用于读取器[Elem]
。即使这一个通常是从字符串初始化的,也有可能以流方式(从未尝试过)完成。