Как использовать moo lexer (и nearley) с большими файлами
Я пытаюсь найти что-то, что будет анализировать очень большие файлы (в основном файлы PGN). Я начал использовать antlr4, но даже если они утверждают, что их классы являются "потоками", это не так. antlr4 взял мой тестовый файл игры 5457518 и попытался загрузить весь файл размером 1,7 ГБ в гигантскую строку, а затем проанализировать ее, что привело к сбою из-за нехватки памяти. Таким образом, я выкинул и сейчас пробую му / чарли.
Ну вроде у меня похожая проблема. Несмотря на то, что и moo, и nearley предоставляют методы, которые имеют так называемый "кусок" в качестве параметра, moo, в частности, не понимает, что он находится в конце своей строки, и может получить больше при следующем moo.feed.
Моя тестовая программа, например, пытается отправить это в moo по два байта за раз: [Abcde "bc def"]
. Он выплевываетLBRACKET
правильно Но потом выплевывает A
как символ. Если я сделаюmoo.reset(next_two)
, затем выплевывает bc
как второй символ.
Итак, мой вопрос: как именно вы, мастер лексического анализа / синтаксического анализа, это делаете? Стоит мне вернуться на antlr4? Должен ли я использовать moo/nearley по-другому? Есть ли лучший лексер / парсер? Я действительно не хочу писать свой собственный с нуля, но я действительно начинаю задаваться вопросом, есть ли другой способ.