Я работаю над компилятором, и я хотел бы улучшить свои выступления. Я обнаружил, что около 50% времени тратится на разбор исходных файлов. Поскольку исходный файл довольно мал, и после этого я делаю довольно много преобразований, мне кажется, что это невозможно.Как сравнить Boost Spirit Parser?
Моего анализатор Дух анализатор подталкивание с лексером (с лексическим анализатором :: pos_iterator) и у меня есть грамматик среднего размера. Я разбираю источник в АСТ.
Моя проблема заключается в том, что я понятия не имею, что занимает больше всего времени при разборе: копии AST узлов, лексический, синтаксический анализатор правил или памяти.
Я не думаю, что это проблема ввода/вывода, так как я работаю на SSD, и что я читаю файл целиком в начале, а затем использовать только версию памяти.
Я попытался с помощью профайлеры, но методы, которые требуют времени некоторые методы из форсирования с именами сот символов длиной, и я не знаю точно, что они делают ...
Итак, есть предпочтительный способ сравнить бенчмарк и его грамматику? Или есть какие-то правила, которые могут быть использованы для проверки эффективности в некоторых конкретных точках?
Благодаря
Источники для тех, кто заинтересован:
Вот подправить по ApochiQ, кто использует Boost.Spirit как синтаксический анализатор для языка Epoch. Он значительно улучшил работу своего парсера между 10 и 11 выпусками и написал, что он сосредоточил на [здесь] (http://code.google.com/p/scribblings-by-apoch/wiki/OptimizingBoostSpirit). –
Бенчмаркинг НИЧЕГО обычно включает в себя запуск чего-либо через «тест кода», а затем анализ результатов. Если у вас сложная система, она часто помогает создавать «нулевой драйвер» или «нуль-интерфейс», так что вы можете, например, подать исходный файл и проанализировать его, не действуя на анализируемые результаты. –
@ MatthieuM. Да, я знаю эту статью. Я уже давно несколько советов этой великой статьи. Но я не знаю, какой совет следовать дальше. –