Я работаю над компилятором, и я хотел бы улучшить его выступления. Я обнаружил, что около 50% времени тратится на разбор исходных файлов. Поскольку исходный файл довольно мал, и после этого я делаю довольно много преобразований, мне кажется, что это невозможно.
Мой парсер - парсер Boost Spirit с lexer (с lexer:: pos_iterator), и у меня есть грамматика среднего размера. Я разбираю источник в АСТ.
Моя проблема заключается в том, что я понятия не имею, что занимает больше всего времени при разборе: копии узлов AST, lexer, правил парсера или памяти.
Я не думаю, что это проблема ввода-вывода, поскольку я работаю над SSD и что я полностью читаю файл в начале, а затем использую только версию памяти.
Я пробовал использовать профилировщики, но методы, требующие времени, - это некоторые методы из Boost с именами длиной в сотни символов, и я точно не знаю, что они делают...
Итак, есть ли предпочтительный способ сравнить Boost Spirit Parser и его грамматику? Или существуют некоторые правила, которые можно использовать для проверки эффективности в некоторых конкретных точках?
Спасибо
Источники для заинтересованных: