Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Not-Predicate Parser (!a)

Boost , Spirit 2.5.2 , Parser Operators

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
Description

Синтаксические предикаты утверждают, что определенный условный синтаксис должен быть удовлетворен перед оценкой другого произведения. Подобно семантическим предикатам,<eps>, синтаксические предикаты не потребляют никаких входных данных. Непредикат,<!a>является отрицательным синтаксическим предикатом, который возвращает совпадение нулевой длины только в том случае, если его предикат не соответствует.

Header
// forwards to <boost/spirit/home/qi/operator/not_predicate.hpp>
#include <boost/spirit/include/qi_not_predicate.hpp>

См. такжеВключить структуру.

Model of

Notation

a

<Parser>

Expression Semantics

Семантика выражения определяется только там, где она отличается от или не определена в<UnaryParser>.

выражение

Семантика

<!a>

Если предикат<a>совпадает, провал. В противном случае верните матч нулевой длины.

Attributes

См.Составные обозначения атрибутов.

выражение

атрибут

<!a>

<unused_type>

Complexity

Сложность определяется сложностью предиката<a>.

Example
[Note]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);


PrevUpHomeNext

Статья Not-Predicate Parser (!a) раздела Spirit 2.5.2 Parser Operators может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Parser Operators ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 06:34:57/0.0038459300994873/0