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