Tagged with parsing
В этой заметке я продолжу рассказывать о библиотеке Boost::Spirit, предназначенной для написания на C++ различных парсеров. В прошлой заметке я описал базовые возможности Spirit, a в этой хочу затронуть несколько возможностей, которые по моему мнению практически необходимы в случае написания сколько-нибудь сложных парсеров. Итак, эти возможности:
Читать дальше »
Не так давно я писал об использовании библиотеки Boost::Regex для регулярных выражений в C++. В этой заметке, я опять затрону эту тему, только теперь рассмотрю другой компонент Boost, предназначенный для обработки регулярных выражений: Boost::Xpresive.
Итак, во-первых, чем же он отличается от Boost::Regex:
- Xpressive не требует линковки никаких дополнительных библиотек;
- Утверждается, что Xpressive в среднем работает быстрее;
- В Xpressive реглярные выражения могут описываться не только динамически (в виде строки, передаваемой в некую функцию), но и статически в виде C++ кода.
- Регулярные выражения Xpressive могут ссылаться друг на друга, образуя целые грамматики
Читать дальше »
В этой заметке я рассмотрю такую достаточно популярную тему, как использование регулярных выражений. Причем, рассматривать я буду применительно к C++ с использованием библиотеки Boost, которая содержит замечательные средства для их поддержки.
Используемый синтаксис реглярных выражений совпадает с широко известным PCRE (Perl-Compatible Regular Expressions).
Для использования библиотеки необходимо включить заголовочный файл boost/regex.hpp:
#include <boost/regex.hpp>
Читать дальше »
Иногда в проектах на C++, (у кого-то чаще, у кого-то реже) возникает задача разбора какого-либо структурированного текста. То есть по сути, создание парсера того или иного языка. Обычно, к этой задаче подходят одним из следующих способов:
- Написание парсера вручную, анализируя строку средствами C++, возможно, используя регулярные выражения.
- Генерация парсера с использованием соответствующих утилит, например, Antlr, lex/yacc и т.п.
Несколько иной подход предоставляется библиотекой Spirit в составе Boost. О нем я расскажу ниже.
Boost::Spirit – библиотека, предназначенная для описания текста грамматики вместе с семантическими действиями прямо в C++ коде. Грамматика буквально конструируется из примитивных парсеров путем использования соответствующим образом перегруженных операторов C++. Таким образом, описание грамматики выглядит достаточно близко к классическому описанию, как например БНФ.
Читать дальше »