Bison — это генератор синтаксических анализаторов общего назначения, преобразующий аннотированную контексто-свободную граматику в детерминированный LR- или обобщённый LR(GLR)-анализатор, задействующий таблицы анализатора LALR(1). Bison также умеет генерировать таблицы IELR(1) и канонические LR(1). Овладев Bison, можно использовать его для разработки разнообразных языковых анализаторов — от применяющихся в простых настольных калькуляторах до сложных языков программирования. Bison обратно совместим с Yacc: все корректно составленные Yacc-грамматики должны работать с Bison без изменений.
В детерминистический C++-каркас, lalr1.cc, привнесены масштабные изменения. Если включена поддержка вариантов и компилятор поддерживает C++11 и выше — типы только для перемещения теперь можно использовать для семантических значений. Поддержка C++98 не объявлена устаревшей. Огромное спасибо Френку Хекенбаху за проторенный его реализацией каркаса на C++17 путь к этому выпуску.
Значимые изменения в этом выпуске:
- Поддержка DJGPP, годами лишённого поддержки и тестирования, объявлена устаревшей. Если никто не гальванизирует этот труп — от него избавятся.
- Также:
- %printers должна использовать yyo вместо yyoutput для обозначения выходного потока.
- Основанные на вариантах символы в C++ должны использовать emplace() вместо build().
- В анализаторах на C++ parser::operator() теперь является синонимом для parser::parse.
- Документация:
- Добавлен новый раздел «Простой пример на С++» — руководство по написанию анализаторов на С++.
- В генерируемый код теперь добавляется комментарий, что пользователям не следует завязываться на недокументированные детали реализации, например, начинающиеся на YY_ макросы.
- Новые возможности:
- C++: поддержка семантики перемещения (lalr1.cc)
- C++: неявное перемещение правых значений (lalr1.cc)
- C++: неявное семантическое действие по умолчанию теперь всегда вызов.
- C++: переименование location.hh.
- C++: stack.hh и position.hh объявлены устаревшими.
- Исправлены:
- Проблемы с переносимостью на MinGW и VS2015.
- Проблемы с переносимостью в тестовом наборе.
- Проблемы с переносимостью и предупреждения с Flex.
>>> Подробности