![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Sequential Or Parser (a || b)Boost , Spirit 2.5.2 , Parser Operators
|
Выражение |
Семантика |
---|---|
| Матч |
См. Compound Attribute Notation.
Выражение |
Attribute |
---|---|
|
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 |
---|---|
Последовательный или парсер ведет себя по свойствам атрибута очень похоже на простой последовательности парсер ( (int_ || int_)[print_pair(_1, _2)] функциональный объект |
Общая сложность последовательного или парсера определяется суммой сложностей его элементов. Сложность последовательного - или самого себя - O(N), где N - число элементов в последовательности.
![]() | 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.
Статья Sequential Or Parser (a || b) раздела Spirit 2.5.2 Parser Operators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Parser Operators ::
реклама |