![]() |
![]() ![]() ![]() ![]() |
![]() |
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 ::
реклама |