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

Preface

Boost , ,

Preface


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

Bjarne Stroustrup

История

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

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

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

Результатом стал Дух. Spirit был личным проектом, который был задуман, когда я занимался R&D в Японии. Вдохновленный составными и интерпретаторными шаблонами GoF, я понял, что могу смоделировать рекурсивный парсер с иерархически-объектной композицией примитивов (терминалов) и композитов (продукций). Оригинальная версия была реализована с полиморфными классами времени выполнения. Парсер генерируется во время выполнения путем подачи в строках правил производства, таких как "prod ::= {‘A’ | ‘B’} ‘C’;" Функция компиляции компилировала парсер, динамически создавая иерархию объектов и связывая семантические действия на лету. Очень ранний текст можно найти здесь .

Версия, которую мы имеем сейчас, является полным переписыванием оригинального парсера Spirit с использованием шаблонов экспрессии и статического полиморфизма, вдохновленного работами Тодда Велдхузена (« Шаблоны экспрессии», C++ Report, июнь 1995 года). Первоначально версия static-Spirit предназначалась только для замены ядра оригинала dynamic-Spirit. Динамический дух нуждался в парсере, чтобы реализовать себя. Оригинал использовал ручной кодированный парсер рекурсивного спуска для анализа строк спецификации входной грамматики.

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

Как использовать это руководство

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

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

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

Иконки
Note Information provided is moderately important and should be noted by the reader.
Alert Information provided is of utmost importance.
Detail Information provided is auxiliary but will give the reader a deeper insight into a specific topic. May be skipped.
Tip A potentially useful and helpful piece of information.

Поддержка

Пожалуйста, направьте все вопросы в список рассылки Spirit. Вы можете подписаться на рассылку здесь. Список рассылки имеет архив с возможностью поиска. Поисковая ссылка на этот архив приведена на домашней странице Spirit. Вы также можете читать и отправлять сообщения в список рассылки через новостной портал NNTP (спасибо www.gmane.org). Группа новостей отражает список рассылки. Вот две ссылки на архивы: через gmane, через geocrawler.

Моя дорогая дочь Феникс
 

Жоэль де Гусман
Сентябрь 2002



 

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




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



:: Главная :: ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 16:41:30/0.029896020889282/1