Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Spirit V2.1

Boost , Spirit 2.5.2 , What's New

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
What's changed in Spirit.Qi and Spirit.Karma from V2.0 (Boost V1.37.0) to V2.1 (Boost V1.41.0)
  • Spiritтеперь основан на новейшей версииBoost.Proto
  • <qi::phrase_parse>,<qi::phrase_format>теперь пост-скип по умолчанию.
  • <karma::generate_delimited>и<karma::format_delimited>теперь не делают предварительного разграничения по умолчанию.
  • Изменилась последовательность параметров<qi::phrase_parse>,<qi::phrase_match>,<karma::generate_delimited>и<match_delimited>. Атрибут теперь всегда последний параметр.
  • Добавлены новые перегрузки этих функций, позволяющие в явном виде указать постпропускное и предопределяющее поведение.
  • Добавлены функции многоатрибутного API
  • Удаленный<grammar_def<>>
  • Снятые функции<make_parser()>и<make_generator()>
  • Сняты<qi::none>и<karma::none>
  • Последовательности и списки теперь принимают стандартный контейнер в качестве своего атрибута.
  • Терминал для размещения струн теперь может принимать другие струны в качестве своего параметра (т.е. std::string).
  • Все терминалы, принимающие буквы, теперь принимают (ленивый) функциональный объект.
  • Все держатели для терминалов и директив (такие как<int_>,<double_>,<verbatim>и т. д.) были ранее определены только в пространстве имен<boost::spirit>. Теперь они дополнительно импортируются в пространства имен<spirit::qi>,<spirit::karma>и<spirit::lex>(если они поддерживаются соответствующей подбиблиотекой).
  • Терминальные заполнители<char_>и<string>больше не определены в пространстве имен<boost::spirit>, поскольку они были перемещены в пространства имен набора символов, что позволяет выполнять правильную обработку набора символов на основе используемого пространства имен (как<spirit::ascii>и т. Д.)
  • <uint>,<ushort>,<ulong>и<byte>терминальные держатели были переименованы в<uint_>,<ushort_>,<ulong_>и<byte_>.
  • <qi::skip[]>теперь включает внешний шкипер, если используется внутри<lexeme[]>
  • Добавлено<karma::maxwidth[]>директива (см.<maxwidth>)
  • Добавлено<karma::omit[]>, позволяющее потреблять атрибут генератора субъекта без выделения какого-либо выхода (см.<omit>).
  • Добавлен<karma::buffer[]>, позволяющий избежать нежелательного вывода, который должен быть сгенерирован в случае отказа генератора в середине последовательности (см.<buffer>).
  • <karma::delimit[]>теперь повторно включает внешний разграничитель, если используется внутри<verbatim[]>
  • Карма: добавленный и предикат (52) и непредикат (53) Оба теперь всегда потребляют атрибут.
  • Карма: измененная семантика<char_()>,<string()>,<int_()>и<double_()>: все эти генераторы теперь всегда обнажают атрибут. Если у них нет ассоциированного атрибута, они генерируют свой непосредственный буквальный атрибут. Если они имеют ассоциированный атрибут, генераторы сначала проверяют, равно ли значение атрибута непосредственному буквальному. Они терпят неудачу и не создают ничего, если они не равны. В противном случае они генерируют свои непосредственные буквальные значения. Более подробную информацию см., например,<int_>.
  • <karma::lit()>теперь может использоваться для генерации целых чисел и чисел с плавающей запятой
  • <qi::rule>и<karma::rule>теперь могут быть непосредственно инициализированы с помощью их конструктора копий. То есть это работает сейчас:<qi::rule<...> r= ...some parser...;>.
  • <qi::attr()>в качестве его атрибута выставляется его непосредственный параметр.
  • Добавлены булевы парсеры и генераторы<bool_>,<true_>,<false_>.
  • Добавлено<attr_cast<>>, что позволяет в грамматике ци и кармы преобразовывать тип атрибута.
  • Почти все генераторы кармы теперь принимают атрибуты<optional<>>и не смогут генерировать, если это не будет инициализировано.
  • Правила ци и кармы теперь автоматически определяют, применять ли семантику автоматического управления или нет (больше не нужно использовать<operator%=()>, даже если она все еще существует). Семантика автоматического управления применяется, если правая сторона не имеет семантических действий, прикрепленных к любому из элементов. Это работает для инициализации правил и назначения.
  • Правила ци и кармы теперь делают внутреннее преобразование атрибутов, основанное на точке настройки атрибутов<traits::transform_attribute>.
  • Все char_ parsers теперь всегда выставляют атрибут.<char_(...)>ранее не разоблачали атрибута<char_>. Если вам нужен буквальный парсер, не обнажающий никаких атрибутов<lit(...)>.
  • Типы qi::int_spec, qi::real_spec, Karma::int_spec и Karma real_spec больше не существуют. Они были заменены на qi::int_parser, qi::real_parser, Karma::int_generator и Karma::real_generator.
What's changed in Spirit.Lex from V2.0 (Boost V1.37.0) to V2.1 (Boost V1.41.0)

Вот список изменений вSpirit.Lexс версии 2.0.Spirit.Lex2.1 является полным переписываниемSpirit.Lexраспространяется с Boost V1.37. Как и все кодовые части библиотекиSpirit,Spirit.Lexможно использовать как самостоятельную часть.Spirit.Lexтеперь использует инфраструктуру, предоставленнуюSpiritверсии 2.1.

  • Класс lex::lexer_def был переименован в lex::lexer, в то время как оригинальный класс lex::lexer больше не существует. Это упрощает создание лексеров.
  • Класс lexer::lexer больше не имеет функции<def(Self&self)>, определения токенов могут быть добавлены к лексеру в любое время, обычно в конструкторе определяемого пользователем класса лексера:<
    template<typenameLexer>
    structexample_tokens:lex::lexer<Lexer>
    {
         example_tokens()
         {
             // your token definitions here
             this->self=...
         }
    };
    
    >
  • Новый класс лексеров теперь можно использовать напрямую. Функция<make_lexer()>была удалена.
  • Функции<lex::tokenize_and_parse()>и<lex::tokenize_and_phrase_parse()>были изменены, чтобы соответствовать последовательности параметров, реализованной функциями<qi::parse()>и<qi::phrase_parse()>. Оба принимают произвольное число аргументов атрибутов в качестве последних параметров. Этот список аргументов ограничен макросом<SPIRIT_ARGUMENTS_LIMIT>.
  • <lex::lexertl_lexer>и<lex::lexertl_token>классы были перемещены в<lex::lexertl>пространство имен, и имена были изменены на<lex::lexertl::lexer>,<lex::lexertl::token>. Это относится и к<lex::lexert_actor_lexer>, и к<static_lexertl_*>семейству типов.
  • Класс<lex::lexertl_token_set>был удален. Эта функция теперь доступна в классе lexer.
  • БиблиотекаSpirit.Lexбыла обновлена для использования новейшей версии библиотеки строительства лексеров Ben HansonsLexertl(обзор проекта находится на рассмотрении).
  • Конструктор шаблонов<lex::lexer<Lexer>>теперь использует дополнительный параметр, определяющий<match_flags>, который будет использоваться для генерации таблиц. В настоящее время доступны следующие флаги:<
    match_flags::match_default,        // no flags
    match_flags::match_not_dot_newline,// the regex '.' doesn't match newlines
    match_flags::match_icase           // all matching operations are case insensitive
    
    >Если конструктору не передается параметр, используется<match_flags::match_default>, т.е.<.>соответствует новым линиям и соответствие чувствительно к регистру.
  • Заполнители<char_()>и<string()>теперь могут использоваться для определения токенов и являются синонимами<token_def>.
  • Семантические действия Лексера теперь должны соответствовать измененному интерфейсу (подробнее см.Семантические действия Лексера).
  • Добавлены символы заполнителя, используемые изнутри семантических действий лексера при использовании Феникса:<lex::_start>,<lex::_end>,<lex::_eoi>,<lex::_state>,<lex::_val>и<lex::_pass>(подробнее см.Семантические действия Лексера).
  • Добавлены (ленивые) вспомогательные функции, используемые изнутри лексических семантических действий при использовании Феникса:<lex::more()>,<lex::less()>и<lex::lookahead()>(подробнее см.Лексерские семантические действия).
  • Удален<lex::omitted>в пользу<lex::omit>для унификации общего интерфейса.

PrevUpHomeNext

Статья Spirit V2.1 раздела Spirit 2.5.2 What's New может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: What's New ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:44:10/0.0080940723419189/1