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

Sequential Or Parser (a || b)

Boost , Spirit 2.5.2 , Parser Operators

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

Последовательный или оператор, a || b, матчи a или b или a, затем b. То есть, если и a, и b матч, он должен быть в последовательности; это эквивалентно a > -b b>>>>>>:

a || b || ...
Header
// forwards to <boost/spirit/home/qi/operator/sequential_or.hpp>
#include <boost/spirit/include/qi_sequential_or.hpp>

Также см. Include Structure.

Model of

Notation

a, b

A Parser

Expression Semantics

Semantics of an expression is defined only where it differs from, or is not defined in NaryParser.

Выражение

Семантика

a || b

Матч a или b в последовательности. эквивалент a >> -b | b

Attributes

См. Compound Attribute Notation.

Выражение

Attribute

a || b

a: A, b: B --> (a || b): tuple<optional<A>, optional<B> >
a: A, b: Unused --> (a || b): optional<A>
a: Unused, b: B --> (a || b): optional<B>
a: Unused, b: Unused --> (a || b): Unused
a: A, b: A --> (a || b): vector<optional<A> >

[Note]Note

Последовательный или парсер ведет себя по свойствам атрибута очень похоже на простой последовательности парсер (a > b) в том смысле, что он раскрывает атрибуты своих элементов отдельно. Например, если вы прикрепите семантическое действие ко всему последовательному - или:

(int_ || int_)[print_pair(_1, _2)]

функциональный объект print_pair будет использован с атрибутом первого int_ (boost::<int>) в качестве первого параметра и атрибута второго int_ (boost.

Complexity

Общая сложность последовательного или парсера определяется суммой сложностей его элементов. Сложность последовательного - или самого себя - O(N), где N - число элементов в последовательности.

Example
[Note]Note

Испытательный узел для примера (примеров) ниже представлен в разделе Basics examples.

Некоторые используют заявления:

using boost::spirit::qi::int_;

Правильное распределение числа с необязательными дробными цифрами:

test_parser("123.456", int_ || ('.' >> int_));  // full
test_parser("123", int_ || ('.' >> int_));      // just the whole number
test_parser(".456", int_ || ('.' >> int_));     // just the fraction

Наивное, но неправильное решение попыталось бы сделать это с помощью опционов (например:

int_ >> -('.' >> int_)  // will not match ".456"
-int_ >> ('.' >> int_)  // will not match "123"
-int_ >> -('.' >> int_) // will match empty strings! Ooops.

PrevUpHomeNext

Статья Sequential Or Parser (a || b) раздела Spirit 2.5.2 Parser Operators может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

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