2015-02-17 2 views
2

Насколько я понимаю, комбайнаторы Scala для парсеров требуют, чтобы весь файл находился в памяти, и это не совсем практично для файлов размером в десятки гигабайт. Во всяком случае, библиотека комбинаторного анализатора намного эффективнее, чем нужно для задачи, поэтому я думаю о развертывании простого анализатора FSA. Есть ли там библиотеки для этого или нет другого способа, кроме стены текста с несколькими switch es?Библиотеки Java или Scala для анализаторов потоков

+0

Antlr - хороший инструмент для генерации парсеров. Насколько я знаю, можно использовать потоковое воспроизведение для разбора, возможно, бесконечного потока символов. – vbezhenar

+1

Чтение scaladoc, комбинатор синтаксического анализатора применяется к 'Reader [Elem]'. Даже если это обычно вводится из строки, возможно, это возможно сделать потоковым способом (никогда не пробовали). – cchantep

ответ

0

Насколько я понимаю, Scala комбинаторов синтаксического анализа требуется весь файл быть в памяти, и это не совсем практично для файлов десятки гигабайта

Если вам нужно разобрать огромный файл , вы можете использовать BufferedReader и вызывать parseAll с этим читателем. Что-то вроде этого:

val bufferedReader: BufferedReader = ??? 
val myResult = MyParser.parseAll(MyParser.rootParser, bufferedReader) 

Таким образом, файл читается кусками, так что вы не должны быть обеспокоены, чтобы запустить из памяти.

В качестве альтернативы, вы можете создать PagedSeqReader из bufferedSource, если вам необходим читатель, специфичный для API-интерфейсов парсерных компиляторов.

Смежные вопросы