Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于流解析器的Java或Scala库_Java_Scala_Parsing - Fatal编程技术网

用于流解析器的Java或Scala库

用于流解析器的Java或Scala库,java,scala,parsing,Java,Scala,Parsing,据我所知,Scala解析器组合器要求整个文件都在内存中,而对于大小为数十GB的文件来说,这并不太实际。总之,parser combinator库比手头任务所需的功能强大得多,所以我正在考虑推出简单的FSA解析器。是否有一些库用于此功能,或者除了具有多个开关的文本墙之外没有其他方法 据我所知,Scala解析器组合器需要整个文件 存储在内存中,对于几十个文件来说,这是不太实际的 GB大小 如果需要解析一个大文件,可以使用BufferedReader并使用该读取器调用parseAll。大概是这样的:

据我所知,Scala解析器组合器要求整个文件都在内存中,而对于大小为数十GB的文件来说,这并不太实际。总之,parser combinator库比手头任务所需的功能强大得多,所以我正在考虑推出简单的FSA解析器。是否有一些库用于此功能,或者除了具有多个
开关的文本墙之外没有其他方法

据我所知,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]
。即使这一个通常是从字符串初始化的,也有可能以流方式(从未尝试过)完成。