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

Preface

Boost , Spirit 2.5.2 , Spirit 2.5.2

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

и #8220;Примерами конструкций, отвечающих большинству критериев «доброты» (легко понимаемых, гибких, эффективных), является рекурсивно-спусковой парсер, который является традиционным процедурным кодом. Другим примером является STL, которая представляет собой общую библиотеку контейнеров и алгоритмов, в зависимости от традиционного процедурного кода и параметрического полиморфизма.& #8221;— Бьярн Страуструп

History

80s

В середине 80-х Джоэл написал свой первый калькулятор в Паскале. Он был поражен тем, как взаимно рекурсивный набор функций может моделировать грамматические спецификации. Со временем навыки, которые он приобрел из этого академического опыта, стали очень практичными, поскольку ему было поручено провести некоторый анализ. Например, всякий раз, когда ему требовалось выполнить какую-либо форму двоичного или текстового ввода/вывода, он пытался подойти к каждой задаче несколько формально, написав грамматику, используя синтаксические диаграммы, похожие на Паскаль, а затем соответствующий парсер рекурсивного спуска. Этот процесс работал очень хорошо.

90s

Появление Интернета и Всемирной паутины увеличило потребность в разборе в тысячу раз. В какой-то момент Джоэлу пришлось написать HTML-парсер для веб-браузера. Используя формальные спецификации W3C, он легко написал рекурсивный HTML-парсер. С влиянием Интернета спецификации RFC были изобилующими. SGML, HTML, XML, адреса электронной почты и даже эти, казалось бы, тривиальные URL-адреса были формально указаны с использованием небольших грамматических спецификаций в стиле EBNF. У Джоэла было больше возможностей для анализа, и он хотел использовать инструмент, похожий на более крупные генераторы парсера, такие как YACC и ANTLR, где парсер создается автоматически из грамматической спецификации.

Этот идеальный инструмент сможет анализировать все, от адресов электронной почты и командных строк до языков XML и сценариев. Масштабируемость была главной целью. Инструмент мог бы сделать это без большой нагрузки на разработку, что было невозможно с вышеупомянутыми парсерными генераторами. Результатом стал Дух.

Spirit был личным проектом, который был задуман, когда Джоэл участвовал в R&D в Японии. Вдохновленный составными и интерпретирующими узорами GoF, он понял, что может моделировать рекурсивно-спусковой парсер с иерархически-объектной композицией примитивов (терминалов) и композитов (продукций). Оригинальная версия была реализована с полиморфными классами времени выполнения. Парсер генерировался во время выполнения путем подачи в строках правил производства, таких как:

"prod ::= {'A' | 'B'} 'C';"

Компиляционная функция компилировала парсер, динамически создавая иерархию объектов и связывая смысловые действия на лету. Очень ранний текст можно найти здесь:Додух.

2001 to 2006

Версия 1.0-1.8 была полным переписыванием оригинального парсера Spirit с использованием шаблонов экспрессии и статического полиморфизма, вдохновленного работами Тодда ВелдхуизенаExpression Templates, C++ Report, June 1995. Первоначально статично-духовная версия предназначалась только для замены ядра оригинального динамического-духа. Динамический Дух нуждался в парсере, чтобы реализовать себя в любом случае. Оригинал использовал ручной кодированный парсер рекурсивного спуска для анализа строк спецификации входной грамматики. Именно в это время Хартмут Кайзер присоединился к духовному развитию.

После своего первого дебюта с открытым исходным кодом в мае 2001 года, статичный Дух стал успешным. Примерно в ноябре 2001 года сайт Spirit имел процентиль активности 98%, что сделало его инструментом парсера номер один в Source Forge в то время. Неплохо для нишевого проекта вроде библиотеки парсера. «Статическая» часть Духа была забыта, и статический Дух просто стал Духом. Библиотека быстро развивалась, приобретая более динамичные функции.

В октябре 2002 года Дух был официально принят вBoost. Boost - это рецензируемая открытая совместная разработка вокруг коллекции бесплатных библиотек C++ с открытым исходным кодом, охватывающих широкий спектр доменов. Библиотеки Boost стали широко известны как отраслевой стандарт качества проектирования и реализации, надежности и многоразового использования.

2007

На протяжении многих лет, особенно после того, как Дух был принят в Укрепление, Дух служил своей цели весьма достойно.Классический дух(варианты до 2,0) сосредоточен на анализе трансдукции, где входная строка просто переводится на выходную строку. Многие парсеры попадают в трансдукционный тип. Когда пришло время добавить атрибуты в библиотеку парсера, это было сделано довольно быстро, с целью 100% обратной совместимости с Classic Spirit. В результате у некоторых парсеров есть атрибуты, у некоторых нет.

Spirit V2 — это еще одна крупная перезапись. Грамматика Духа V2 полностью приписана (см.Грамматика атрибута), что означает, что все компоненты парсера имеют атрибуты. Чтобы сделать это эффективно и элегантно, пришлось использовать несколько инфраструктурных библиотек. Некоторые из них не существовали, некоторые были совершенно новыми, когда Дух дебютировал, а некоторые нуждались в работе.Boost.Mplявляется важной библиотекой инфраструктуры, но недостаточно для реализации Spirit V2. Еще одна библиотека должна была быть написана:Boost.Fusion. Fusion находится между MPL и STL — между временем компиляции и временем выполнения — отображая типы значений. Сплав является прямым потомком как MPL, так иBoost.Tuples. В настоящее время Fusion является полноценной библиотекойBoost.Феникстакже должен был быть усилен для поддержки Духа V2. В результатеBoost.Phoenix. И последнее, но не менее важное: Spirit V2 использует библиотекуExpression Templatesпод названиемBoost.Proto.

Несмотря на то, что он развился и созрел, чтобы стать многомодульной библиотекой, Spirit по-прежнему используется для задач микро-парсинга, а также языков сценариев. Как и C++, вы платите только за те функции, которые вам нужны. Сила Духа исходит из его модульности и расширяемости. Вместо того, чтобы дать вам кувалду, он дает вам правильные ингредиенты, чтобы легко создать кувалду.

New Ideas: Spirit V2

Незадолго до начала разработки Spirit V2 Хартмут наткнулся на библиотекуStringTemplate, которая является частью структуры парсера ANTLR.Представленные в этой библиотеке концепции приводят Хартмута к следующему шагу в эволюции Духа. Парсинг и генерация тесно связаны с формальной нотацией или грамматикой. Грамматика описывает как вход, так и выход, и, следовательно, библиотека парсера должна иметь выход, управляемый грамматикой. Эта двойственность выражается в Духе библиотекой парсераДуха.Qiи библиотекой генератораДуха. Кармас использованием той же компонентной инфраструктуры.

Идея создания библиотеки лексеров, хорошо интегрированной с парсерами Духа, не нова. Это обсуждалось почти с тех пор, как дебютировал Classic-Spirit (pre V2). Было предпринято несколько попыток интегрировать существующие библиотеки лексеров и фреймворки с Spirit и послужило доказательством концепции и удобства использования (например, см.Wave): Библиотека препроцессоров C/C++ иSLexПолностью динамический лексер C++, реализованный с помощью Spirit. На основе этого опыта мы добавилиSpirit.Lex: Полностью интегрированная библиотека лексеров в микс, позволяющая пользователю использовать силу регулярных выражений для сопоставления токенов, устраняя давление со стороны компонентов парсера, упрощая грамматику парсера. Опять же, модульная структура Spirit позволила нам повторно использовать ту же базовую библиотеку компонентов, что и для библиотек парсера и генератора.

How to use this manual

Каждый крупный раздел (есть 3:Ци,КармаиЛекс) примерно делится на 3 части:

  1. Учебники: Пошаговое руководство с сильно аннотированным кодом. Они предназначены для максимально быстрого ознакомления пользователя с библиотекой. Цель состоит в том, чтобы повысить уверенность пользователя в использовании библиотеки с помощью многочисленных примеров и подробных инструкций. Примеры говорят о томах, а у нас есть тома примеров!
  2. Аннотации: Резюме высокого уровня по ключевым темам. Цель состоит в том, чтобы дать пользователю представление о библиотеке на высоком уровне, ключевые концепции, фон и теории.
  3. Ссылка: подробная формальная техническая ссылка. Мы начинаем с быстрой ссылки - простой в использовании таблицы, которая отображается в правильной ссылке. Собственно ссылка начинается с понятий C++, за которыми следуют модели понятий.

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

Table 1. Icons

икона

Имя

значение

note

Примечание

В целом полезная информация (за исключением того, что не вписывается в поток текста)

tip

Совет

Предложения о том, как что-то сделать (особенно то, что не очевидно)

important

Важно

Важная записка о чем-то, на что следует обратить особое внимание

caution

Осторожность

Будьте особенно осторожны с этим — это может быть не то, что вы ожидаете, и может привести к плохим результатам

.

alert

Опасность

Это может вызвать серьезные проблемы, если игнорировать

.

Эта документация автоматически генерируется инструментом документации Boost QuickBook. Быстро! Книгу можно найти вИнструменты повышения.

Support

Пожалуйста, направьте все вопросы в список рассылки Spirit. Вы можете подписаться наОбщий список духов. Список рассылки имеет архив с возможностью поиска. Поисковая ссылка на этот архив приведена на домашней страницеSpirit. Вы также можете читать и отправлять сообщения в список рассылки через новостной портал Spirit General NNTP(благодаряGmane). Группа новостей отражает список рассылки. Вот ссылка на архивы:http://news.gmane.org/gmane.comp.parsers.spirit. general.



Цитата из http://www.stringtemplate.org/: Это движок шаблона Java (с портами для C# и Python) для генерации исходного кода, веб-страниц, электронных писем или любого другого отформатированного текстового вывода.


PrevUpHomeNext

Статья Preface раздела Spirit 2.5.2 Spirit 2.5.2 может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Spirit 2.5.2 ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:07:04/0.010129928588867/0