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

Parser Directive for Attribute Commit/Rollback (hold[])

Boost , Spirit 2.5.2 , Parser Directives

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
Description

Директива<hold[]>помогает управлять атрибутами, в основном для альтернативных парсеров. Он представляет собой новый экземпляр атрибута для встроенного парсера. Значение этого экземпляра атрибута копируется на внешний атрибут, если встроенный парсер преуспевает, и он отбрасывается в противном случае. Альтернативные парсеры обычно не откатывают изменения, внесенные во внешний атрибут неудачной альтернативой. Включение этих альтернатив в директиву<hold[]>гарантирует, что только последующая альтернатива может модифицировать атрибут.

Header
// forwards to <boost/spirit/home/qi/directive/hold.hpp>
#include <boost/spirit/include/qi_hold.hpp>

См. такжеВключите структуру.

Namespace

Имя

<boost::spirit::hold// alias: boost::spirit::qi::hold>

Model of

Notation

a

<Parser>.

Expression Semantics

Семантика выражения определяется только там, где она отличается от или не определена в<UnaryParser>.

выражение

Семантика

<hold[a]>

Создайте новый экземпляр атрибута при разборе<a>, копируя результат на внешний атрибут только после<a>успеха.

Attributes

См.Составные обозначения атрибутов.

выражение

атрибут

<hold[a]>

a: A --> hold[a]: A
a: Unused --> hold[a]: Unused

[Note]Note

Директива<hold[]>использует<swap()>для реализации семантики отката/коммита для атрибута. По этой причине тип атрибута должен использоваться с<boost::swap>(необходимо либо определить правильную перегрузку для<swap(attribute_type&,attribute_type&)>, либо раскрыть функцию члена<attribute_type::swap(attribute_type&)>).

Complexity

Сложность определяется сложностью предмета парсера<a>.

Example
[Note]Note

Тестовый ремень для примера (примеров) ниже представлен в разделеОсновные примеры.

Некоторые используют декларации:

using boost::spirit::qi::hold;
using boost::spirit::qi::int_;
using boost::spirit::qi::attr;

Использование<hold[]>здесь гарантирует, что изменения в атрибуте, вызванные (неудавшейся) первой альтернативой, не будут видны после полного разбора.

std::vector<int> v;
test_phrase_parser_attr("123",
      hold[int_ >> ':' >> int_] | int_ >> attr(0), v);
std::cout << v[0] << "," << v[1] << std::endl;    // will output: >123,0<


PrevUpHomeNext

Статья Parser Directive for Attribute Commit/Rollback (hold[]) раздела Spirit 2.5.2 Parser Directives может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Parser Directives ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:53:08/0.0089318752288818/1