Я использовал бизон и flex для генерации парсера C с использованием файла grammar.y. Он собирается правильно и так быстро через 10 секунд. Я изменил аргументы bison и flex, чтобы получить вывод C++, хотя он генерирует правильные результаты, но для компиляции и вывода результата CPP грамматики требуется около 1 минуты. Есть ли у кого-нибудь идеи для решения этой проблемы? Файл грамматики составляет около 6000 строк.Медленная компиляция бизонов и грамматики lex
ответ
Очень распространено, что компиляция C++ работает медленно, как меласса, в зависимости от сложности кода на C++. У компилятора C++ есть много работы, чтобы разобраться. Многое работает больше, чем компилятор C. У меня есть код на C++, который занимает несколько минут, и близко к гигабайту ОЗУ, чтобы прожевать.
С помощью генерируемого роботом анализатора LALR (1), который бизон извергает из набора правил 6000 строк, это не совсем неожиданный результат. Вероятно, вы могли бы ускорить процесс, отказавшись от опций оптимизации -O для файла грамматики, созданного robo, если производительность во время выполнения из анализатора не является критичной. Скорее всего, это ускорит ситуацию.
Вы также можете попробовать обновить свой компилятор. gcc улучшил свою производительность заметно, в последних выпусках, поэтому, если вы используете более старый gcc, вы можете увидеть улучшение.
Добро пожаловать на C++.
Сэм, я не программист на C++, но понимаю концепцию предварительно скомпилированных заголовков MSVC (прекомпилятор собирает все классы), поэтому, если он сохранит все определения типа/класса вне файла грамматики, не ускорит компиляция, поскольку сборка классов не изменяется? –
@PaulOgilvie: Весьма вероятно, что предварительно скомпилированные заголовки не будут иметь большого значения для компиляции Bison/Lex. –