![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Not-Predicate Parser (!a)Boost , Spirit 2.5.2 , Parser Operators
|
выражение |
Семантика |
---|---|
< | Если предикат< |
См.Составные обозначения атрибутов.
выражение |
атрибут |
---|---|
< | < |
Сложность определяется сложностью предиката<
a
>.
![]() | Note |
---|---|
Тестовый ремень для примера (примеров) ниже представлен в разделеОсновные примеры. |
Некоторые используют декларации:
using boost::spirit::ascii::char_; using boost::spirit::ascii::alpha; using boost::spirit::qi::lit; using boost::spirit::qi::symbols;
Вот альтернатива идиоме<*(r-x)>>x
>с использованием не-предиката. Это анализирует список символов, оканчивающихся на «;»:
test_parser("abcdef;", *(!lit(';') >> char_) >> ';');
Следующий парсер гарантирует, что мы сопоставляем отдельные ключевые слова (хранимые в таблице символов). Для этого мы следим за тем, чтобы ключевое слово не соответствовало альфе или подчеркиванию:
symbols<char, int> keywords; keywords = "begin", "end", "for"; // This should fail: test_parser("beginner", keywords >> !(alpha | '_')); // This is ok: test_parser("end ", keywords >> !(alpha | '_'), false); // This is ok: test_parser("for()", keywords >> !(alpha | '_'), false);
Статья Not-Predicate Parser (!a) раздела Spirit 2.5.2 Parser Operators может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Parser Operators ::
реклама |