Как использовать moo lexer (и nearley) с большими файлами - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь найти что-то, что будет анализировать очень большие файлы (файлы PGN, в основном). Я начал использовать antlr4, но хотя они утверждают, что их классы являются «потоками», это не так. antlr4 берет мой тестовый файл с игрой 5 457 518 и пытается загрузить весь файл 1.7G в гигантскую строку c, а затем проанализировать ее, что приводит к нехватке памяти cra sh. Таким образом, я выбросил это и теперь пытаюсь moo / nearley.

Хорошо, у меня есть подобная проблема, это кажется. Несмотря на то, что как moo, так и nearley предоставляют методы, имеющие в качестве параметра так называемый «чанк», moo, в частности, не понимает, что он находится в конце строки и может получить больше при следующем moo.feed.

Моя тестовая программа, например, пытается отправить это в moo по два байта за раз: [Abcde "bc def"]. Он выплевывает LBRACKET правильно, но затем выплевывает A как символ. Если я наберу moo.reset(next_two), то он будет выплевывать bc в качестве второго символа.

Итак, мой вопрос, как именно вы, мастер лексер / парсер, делаете это? Должен ли я go вернуться к antlr4? Должен ли я использовать moo / nearley по-другому? Есть ли лучший лексер / парсер? Я действительно не хочу писать свои собственные с нуля, но я действительно начинаю задумываться, есть ли другой способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...