Здравствуйте, z00n, Вы писали:
Z>Здравствуйте, VladD2, Вы писали:
VD>>Теперь о проблемах...
Z>Вот тут изложены идеи полутора десятков оптимизаций для packrat:
Z>Better Extensibility through Modular Syntax
Z>реализация (на Java): http://www.cs.nyu.edu/~rgrimm/xtc/xtc-core.zip
Z>Полученные парсеры работают примерно со скоростью ANTLR 2.7 потребляя в 2 раза больше памяти.
Это "Rats!"? В нем оптимизации сделаны несколько не с того конца. В нем думаю что можно не мемоизировать, а не о том, что нужно мемоизировать. А это, на мой взгляд, не верный подход.
Работу по нему я читал.
Z>Rats! по умолчанию он мемоизирует все
И это в корне не верно, на мой взгляд.
Z>(при этом расход памяти оптимизациями сокращен в 5-10 раз). Результатом вполне можно пользоватся: на мегабайт исходника нужно примерно 300 мег памяти.
Мне кажется это многовато. К тому же это неминуемо замедлит парсинг.
Z> Потом (при необходимости) можно провести ручную дооптимизацию: пометить правила, которые не нужно мемоизировать. Это, в общем, работает.
Согласен. Но есть не мало работ демонструющих, что часто без мемоизации разультат получается лучше. Если грамматика близка к LL(1), то мемоизация всего подряд (даже с оптимизациями) может только навредить. Возможно, что обратный подход дал бы больше толку.