Как использовать 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 по-другому? Есть ли лучший лексер / парсер? Я действительно не хочу писать свой собственный с нуля, но я действительно начинаю задаваться вопросом, есть ли другой способ.

0 ответов

Другие вопросы по тегам