Интегрированная кодовая база Spirit V1.8.x с Spirit V2. Spirit V1.8.x теперь называетсяSpirit Classic.Даже если структура каталогов изменилась (заголовкиSpirit Classicтеперь перемещены в каталог ‘$BOOST_ROOT/boost/spirit/home/classic’), мы создали пересылающие заголовки, позволяющие компилировать существующие приложения без каких-либо изменений. Однако эти пересылающие заголовки амортизируются, что приведет к соответствующим предупреждениям, генерируемым для каждого из заголовков. Ожидается, что пересылающие заголовки будут удалены в будущем. Рекомендуемый способ использования Spirit Classic теперь включает файлы заголовков из каталога «$BOOST_ROOT/boost/spirit/include». Все файлыSpirit Classicтеперь имеют приставку «classic_». Например, включение
#include <boost/spirit/core/core.hpp>
теперь должно быть написано как:
#include <boost/spirit/include/classic_core.hpp>
Чтобы избежать конфликтов пространства имен с новой библиотекой Spirit V2, мы переместилиSpirit Classicвувеличение пространства имен::spirit::classic. Это изменение будет автоматически деактивировано всякий раз, когда используются устаревшие файлы. Это обеспечивает полную обратную совместимость для существующих приложений. Для получения более подробной информации об этом изменении, пожалуйста, обратитесь к документации.
1.8.6
Исправлена целочисленная ошибка переполнения, предотвращающая неспособность анализировать определенные большие целые числа. Об этой ошибке сообщил и исправил Майкл Андерсен Нексё
1.8.5
По причинам производительности лист_node_d/token_node_d были изменены на неявные лексемы, которые создают узлы листа в одном кадре. Старый токен_node_d все еще доступен и называется reduced_node_d.
Теперь можно фениксировать::bind (версия 1) символы::add.
1.8.4
Fixed no_actions bug, где no_action применяется рекурсивно.
Исправлен парсер regex_p для Boost >= V1.33.0
Реализован обходной путь для проблем пространства имен VC++ с файловыми_iterators Spirit
Исправлена ошибка в политике соответствия деревьев, которая предотвращала использование gen_pt/ast_node_d,сообщает Яша Ветцель.
Создан позиционный_iterator с использованием строк на основе wchar_t.
1.8.3
Исправление конфигурации для Sun C++ Стивом Кламажем (см.эта ссылка).
Fixed multi_pass_iterator для 64 платформ, где sizeof(int) != sizeof(ptr_type). Исправленная ошибка, препятствующая использованию замыканий с грамматикой с несколькими точками входа,сообщает Дэвид Пьер
Исправленная ошибка, которая предотвращала встраивание грамматики с несколькими точками входа,сообщает Дэвид Пьер
Добавлено '0' к набору действительных ускользающих символов для escape_ch_p.
Исправлена ошибка switch_p при использовании с фениксом::actor в качестве условного выражения.
__LINE__ macro теперь расширяется в BOOST_SPIRIT_ASSERT_EXCEPTION
Парсер символов использует нулевой символ внутри. Чеки были добавлены так, что:
tst.add утверждает, что строка содержит нулевой символ
tst.find не соответствует нулевым символам во входе
Fixed match_attr_traits.ipp позволяет пройти не-POD. Предыдущая версия, взятая в эллипсисе "...", не позволяет POD проходить.
Разрешить оценку в качестве условия для if_p parser.
Прикладные изменения в коде PT/AST, предложенные Стефаном Слапетой.
Исправлено несколько проблем с директивами древесных узлов AST (inner_node_d[], discard_first_node[], discard_last_node[] и infix_node_d[]).
1.8.2
Техническое обслуживание (почти то же самое, что 1.8.1 плюс несколько исправлений здесь и там)
Добавлены специализации для str_p и ch_p, чтобы разрешить str_p('c') и ch_p("c"), таким образом фиксируя некоторые не-жучки.
Фиксированный баг, где matchявляется вариантом.
Добавить Jamfile/Jamrules из CVS в Spirit-1.8.1/
Добавлен бустер-строитель. варенье от бустера до спирта-1.8.1/
многопоточность шаблона в libs/spirit/test/Jamfile
Добавлено правило бустер-заголовок-включить (от spirit-header-включить), указывающее на минибуст в libs/spirit/test/Jamfile
Исправлено несоответствие if_p
1.6.2
Выпуск Spirit 1.6.2 - это только исправление ошибок, никаких новых функций не было введено.
wchar_t дружественная реализация graph_p
Модифицированный escape_char_parser::parse() для использования статического парсера вместо правила. Это сделает его более удобным для использования на деревьях. Он также должен быть немного более эффективным.
Лицензия Boost Software 1.0.
Ошибка 322 поиска имен в базовом классе специализация находит тип
Обсуждение Limit_d bug
[цифры] Обработка для aC++
Исправлена ошибка в switch_p parser.
Исправлена проблема EOI в multi_pass
Добавить Jamfile/Jamrules из CVS в Spirit-1.6.1/
Добавлен бустер-строитель. варенье от бустера до спирта-1.6.1/
многопоточность шаблона в libs/spirit/test/Jamfile
Добавлено правило бустер-заголовок-включить (от spirit-header-включить), указывающее на минибуст в libs/spirit/test/Jamfile
1.8.1 (Released with Boost 1.32.0)
Выпуск Spirit 1.8.1 - это только исправление ошибок, никаких новых функций не было введено.
Spirit теперь требует как минимум увеличения 1.32.0
Снята поддержка старой библиотеки итераторов и
Перешел на использование новой библиотеки MPL
Spirit был перемещен для использования лицензии Boost Software License 1.0.
Исправлено несколько парсеров для более корректной поддержки пост-скипов.
Обсуждение No_node_d.
Исправлена ошибка в shortest_d[].
Исправлена ошибка в limit_d[].
Фиксированный метакод прохождения парсера.
Исправлено несколько ошибок в switch_p.
Исправлены проблемы генерации AST, в частности, с парсерами, связанными с петлями.
Исправлено несколько ошибок в multi_pass итераторе.
Исправлена проблема, когда используемый базовый итератор возвращает значение_тип, а не ссылку от оператора отсчета.
Проблема исправления Iterator_traits
Исправлена проблема EOI
Исправлена ошибка, при использовании с std: цин
Найдена ошибка в грамматике.ipp при BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE определяется
Переписанный safe_bool для использования CRTP - теперь работает также на MWCW, исправлено несколько ошибок с реализацией.
Исправлена и расширена отладочная диагностика, напечатанная кодом дерева разбора.
1.8.0 (Released with Boost 1.31.0; Includes unreleased 1.7.1)
Исправлена задача wchar_t в парсере regex_p.
удаленный код и обходные пути для старых компиляторов (VC6/7 и Borland)
Изменили лицензию на новую лицензию.
Модифицированный escape_char_parser::parse() для использования статического парсера вместо правила. Это сделает его более удобным для использования на деревьях. Он также должен быть немного более эффективным.
1.7.1 (Unreleased; becomes 1.8.0)
Добавлен полный набор заранее определенных актеров.
Перемещает rule_alias и stored_rule из ядра/нетерминала в динамический. Сделано как_parser общедоступным API в meta/as_parser.hpp
Отдельное ядро. Мета в собственный модуль
Модуль Refactored Utility Перенес некоторые файлы в утилиту. Парсеры
Добавлены динамические парсеры switch_p и select_p.
Поддержка нескольких сканеров для правил.
Параметры шаблона Scanner, Context и Tag могут быть указаны в любом порядке. Если параметр шаблона отсутствует, он будет предполагать по умолчанию. См. test/rule_tests.cpp.
Введена возможность указать из грамматики более одного правила начала.
Добавлена реализация итератора file_iterator на основе нового Boost iterator_adaptors (представлена Томасом Виттом).
[Переход на новый итератор_адапторы должен быть завершен сейчас.]
Добавлена реализация итератора фиксированной_size_queue на основе новых итераторов Boost.
wchar_t дружественная реализация graph_p
сделал копировального конструктора и оператора парсера_error_base общедоступным, чтобы очистить предупреждение VC7.1 C4673. Добавлена копи-конструктор и оператор назначения к parser_error для ясности намерения.
1.7.0
Назначение (струна) семантического действия теперь работает в VC6
Парсеры не должны быть конструируемыми по умолчанию
Упрощенная агрегация бинарных и унарных парсеров (более дружественный компилятор)
многочисленные улучшения примитивов и обходные пути для проблемных компиляторов
надлежащее дополнение (~) однопарсерных примитивов и наборов
Интуитивная обработка lexeme_d
Широкий_phrase_scanner_t печатать
Динамические улучшения парсера (лучше поддержка большего количества компиляторов)
полное перезаписывание файла_iterator (с помощью boost.iterator_adapters). Поддерживает карты памяти везде, где это возможно
многоканальные обновления (совместимость с большим количеством компиляторов (например, VC7) и более)
Улучшение position_iterator
Улучшенная поддержка феникса для большего количества компиляторов
Phoenix new_(...)
Обсуждение Lazy_p Parser
utility.distinct parser (недокументированный)
Улучшение работы операторов
confix_p оптимизация и улучшения
многочисленные Улучшение интеграции
Bug fixes (1.7.0 and 1.6.0)
Исправлено. Использование MSVC++6 (SP5), вызов действия назначения со значением строки на парсерах с помощью файлового_iterator не будет работать.
Фиксированный: использование назначения семантического действия в грамматике с помощью адаптера multi_pass iterator, применяемого к std::istream_iterator, привело к отказу компиляции под msvc 7.0.
Исправлено: Существует ошибка в "range_run::set (rangeconst&r)"функции в "boost\spirit\utility\impl\chset\range_run.ipp".
Исправлено: обработка ошибки отслеживания белого пространства (ast_parse/pt_parse)
Исправлена ошибка, касающаяся безопасности потока закрытий Phoenix/Spirit.
Добавлены недостающие файлы в miniboost
Авторское право и копия; 1998-2005 Джоэл де Гусман, Хартмут Кайзер На использование, модификацию и распространение распространяется лицензия Boost Software License, версия 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копию по адресу http://www.boost.org/LICENSE_1_0.txt)
Статья Spirit Change Log раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.