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

Preface

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 22. Boost.Metaparse

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

Metaparse - это библиотека парсеров времени компиляции. Metaparse предоставляет инструменты для написания парсеров, анализирующих содержимое строковых букв во время компиляции, что позволяет встраивать доменные языки (DSL) в C++ без изменения их исходного синтаксиса. (Обратите внимание, что фрагменты кода DSL будут написаны буквальными строками, поэтому их, возможно, придется избегать).

Предполагая, что для представления рациональных чисел в метапрограммировании шаблонов доступен следующий класс шаблонов:

template <class Num, class Denom>
struct rational;

Метапарс может быть использован для построения таких значений (обоснование класса шаблонов<rational>) из струнных букв. Вместо<rational<1,3>>можно написать<RATIONAL("1/3")>, который может быть обработан любым стандартным компилятором C++11. Это может быть реализовано с помощью Metaparse следующим образом:

using namespace boost::metaparse;
typedef
  sequence_apply2<
    rational,
    token<int_>,
    last_of<lit_c<'/'>, token<int_>>
  >
  rational_grammar;
typedef build_parser<entire_input<rational_grammar>> rational_parser;
#define RATIONAL(s) \
  (::rational_parser::apply<BOOST_METAPARSE_STRING(s)>::type::run())

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

Metaparse предназначен для использования авторами библиотек, чтобы их API соответствовали обычному обозначению проблемной области библиотеки.

Повышаю. Proto - это инструмент для создания шаблонов выражения. Шаблоны экспрессии могут использоваться для встраивания DSL путем переосмысления действительных выражений C++ в виде выражений, написанных в DSL для встраивания.

Этот метод имеет преимущества перед разбором содержания струнных букв (это подход Metaparse), которые:

  • В большинстве случаев быстрее
  • API-интерфейсы, использующие этот метод, могут «возникнуть» как процесс продвижения API библиотеки шаг за шагом. Переход на совершенно новый DSL (с собственным синтаксисом) является относительно большим шагом.

Использование шаблонов выражения для встраивания DSL имеет следующие недостатки:

  • Синтаксис встроенного DSL ограничен. Это должно быть действительное выражение C++. Для большинства библиотек людям, знакомым с исходным DSL, обычно необходимо изучить синтаксис библиотеки, чтобы понять фрагменты встроенного кода.

Proto помогает встраивать DSL на основе шаблонов выражения, в то время как Metaparse помогает встраивать DSL на основе разбора содержания строковых букв.

Spirit - это инструмент, который можно использовать для создания парсеров, анализирующих (среди прочих) содержание струнных букв во время выполнения, в то время как Metaparse - это инструмент, который можно использовать для анализа содержимого струнных букв во время компиляции.

Эта библиотека полезна для обеспечения API для библиотек C++, имеющих дело с проблемным доменом с собственной нотацией. Интерфейсы, построенные с помощью Metaparse, позволяют пользователям интерфейса использовать собственную нотацию домена, что облегчает написание и поддержание кода. Пользователям интерфейса не нужно изучать новую нотацию (пытаясь следовать за оригинальной проблемой домена), которую могут предоставить авторы библиотеки, ограниченные синтаксисом C++. Примером проблемных доменов являются регулярные выражения и SQL-запросы.

Метапарс также может быть полезен для создания библиотек, подтверждающих содержание строковых букв в момент компиляции, вместо того, чтобы делать это во время выполнения или не делать вообще. Это может помочь найти (и исправить) ошибки в коде на ранней стадии (во время компиляции). Примером проблемного домена является<printf>.

Парсеры, построенные с помощью Metaparse, обрабатывают содержание строковых букв с использованием шаблонных метапрограмм. Это влияет на библиотеку, используя Metaparse следующим образом:

  • Поддерживающий API, построенный с помощью Metaparse, должен понимать метапрограммирование шаблонов.
  • Содержание струнных букв будет (восстанавливаться) во время каждой компиляции. Это повлияет на потребление памяти компилятора и скорость компиляции.
  • Пользователи библиотеки получат отчеты об ошибках, поступающие от парсеров, в виде сообщений об ошибках шаблона их компилятора. (Обратите внимание, что Metaparse активно пытается улучшить их качество и предоставляетинструментыдля авторов парсера).

Metaparse основан на C++98. Исключение составляетBOOST_METAPARSE_STRING.макрос, который нуждается в C++11<constexpr>.

Компиляторы Metaparse активно (в среде CI) тестируются на:

  • GCC 4.6, 4.7, 4.8, 4.9
  • Кланг 3.4, 3.5, 3.6
  • Visual C++ 2015

Ожидается, что Metaparse будет работать над Visual C++ 2012 и 2010.


PrevUpHomeNext

Статья Preface раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 22. Boost.Metaparse может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 22. Boost.Metaparse ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 01:59:05/0.0044448375701904/0