![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Alternative Parser (a | b)Boost , Spirit 2.5.2 , Parser Operators
|
выражение |
Семантика |
---|---|
< | Матч< |
См.Составные обозначения атрибутов.
выражение |
атрибут |
---|---|
< | <a:A,b:B-->(a|b):variant<A,B> a:A,b:Unused-->(a|b):optional<A> a:A,b:B,c:Unused-->(a|b|c):optional<variant<A,B>> a:Unused,b:B-->(a|b):optional<B> a:Unused,b:Unused-->(a|b):Unused a:A,b:A-->(a|b):A> |
![]() | Note |
---|---|
Альтернативные парсеры не откатывают изменения, внесенные во внешний атрибут из-за неудачной альтернативы. Если вам нужно обеспечить, чтобы только последующая альтернатива изменила внешний атрибут, пожалуйста, используйте директиву< |
Общая сложность альтернативного парсера определяется суммой сложностей его элементов. Сложность самого альтернативного парсера — O(N), где N — число альтернатив.
![]() | Note |
---|---|
Тестовый ремень для примера (примеров) ниже представлен в разделеОсновные примеры. |
Некоторые используют декларации:
using boost::spirit::ascii::string; using boost::spirit::qi::int_; using boost::spirit::qi::_1; using boost::variant;
Простое использование:
test_parser("Hello", string("Hello") | int_); test_parser("123", string("Hello") | int_);
Извлекая вариант атрибута (используяBoost.Variant):
variant<std::string, int> attr; test_parser_attr("Hello", string("Hello") | int_, attr);
Это должно быть напечатано<"Hello"
>. Примечание: Есть лучшие способы извлечь ценность из варианта. См.Boost.Variantvisitation. Этот код предназначен исключительно для демонстрации.
if (boost::get<int>(&attr)) std::cout << boost::get<int>(attr) << std::endl; else std::cout << boost::get<std::string>(attr) << std::endl;
Извлечение атрибутов с помощью семантических действий с помощьюФеникса(это должно напечатать<123
>):
test_parser("123", (string("Hello") | int_)[std::cout << _1 << std::endl]);
Статья Alternative Parser (a | b) раздела Spirit 2.5.2 Parser Operators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Parser Operators ::
реклама |