Жена:Новый Шиммер — это воск пола!
Муж:Нет, новый Шиммер - это начинка для десерта!
Жена:Это воск для пола!
Муж:Это десерт!
Жена:Это напольный воск, говорю вам!
Муж:Это десерт, корова!
Объявитель:Эй, эй, эй, успокойтесь, вы двое. Новый Шиммер — это воск для полаидесертная начинка!
xpressive - это продвинутая объектно-ориентированная библиотека шаблонов регулярных выражений для C++. Регулярные выражения могут быть написаны как строки, которые анализируются во время выполнения, или как шаблоны выражения, которые анализируются во время компиляции. Регулярные выражения могут относиться друг к другу и к себе рекурсивно, позволяя выстраивать из них произвольно сложные грамматики.
Если вам нужно манипулировать текстом на C++, у вас обычно есть два варианта: движок регулярного выражения или генератор парсера. Двигатели регулярных выражений (например,Boost.Regex) являются мощными и гибкими; шаблоны представлены в виде строк, которые могут быть указаны во время выполнения. Однако это означает, что синтаксические ошибки также не обнаруживаются до времени выполнения. Кроме того, регулярные выражения плохо подходят для сложных задач обработки текста, таких как сопоставление сбалансированных вложенных тегов. Эти задачи традиционно решались парсерными генераторами (такими какSpirit Parser Framework). Эти животные более мощные, но менее гибкие. Как правило, они не позволяют произвольно изменять правила грамматики на лету. Кроме того, у них нет исчерпывающей обратной семантики регулярных выражений, что может затруднить создание некоторых типов шаблонов.
xpressive объединяет эти два подхода и занимает уникальную нишу в мире обработки текста на C++. С помощью xpressive вы можете использовать его так же, как иBoost.Regex, представляя регулярные выражения в виде строк. Или вы можете использовать его так, как вы бы использовалиSpirit, записывая свои регексы как выражения C++, пользуясь всеми преимуществами встроенного языка, предназначенного для манипулирования текстом. Более того, вы можете смешать два, чтобы получить преимущества обоих, написав грамматики регулярного выражения, в которых некоторые из регулярных выражений статически связаны - жестко закодированы и синтаксис-проверены компилятором - и другие динамически связаны и указаны во время выполнения. Эти регулярные выражения могут относиться друг к другу рекурсивно, сопоставляя шаблоны в строках, которые обычные регулярные выражения не могут.
На дизайн интерфейса xpressive сильно повлияли библиотека Boost.RegexДжона Мэддокаи егопредложениедобавить регулярные выражения в Стандартную библиотеку. Я также черпал большое вдохновение из работы Джоэла де Гусмана «Парсеровская структура духа», которая послужила моделью для статического подавления. Другими источниками вдохновения являютсяPerl 6редизайн иGRETA. (Вы можете прочитать краткое изложение изменений, которые Perl 6 привнесет в культуру регексаздесь.)