Die Boost C++ Bibliotheken

Kapitel 11. Boost.Spirit

Inhaltsverzeichnis

In diesem Kapitel lernen Sie die Bibliothek Boost.Spirit kennen. Sie verwenden Boost.Spirit, wenn Sie Parser entwickeln möchten, um textbasierte Formate zu lesen. So können Sie mit Boost.Spirit zum Beispiel Parser entwickeln, um Konfigurationsdateien zu laden. Für binäre Formate bietet sich Boost.Spirit eingeschränkt an.

Boost.Spirit vereinfacht die Entwicklung von Parsern, weil Sie das Format, das Sie lesen möchten, in Form von Regeln angeben. Regeln definieren, wie das zu lesende Format aussieht – Boost.Spirit erledigt den Rest. Sie können Boost.Spirit mit regulären Ausdrücken vergleichen, mit denen Sie nach Mustern suchen können, ohne Code entwickeln zu müssen, wie die Suche im Detail auszuführen ist.

Boost.Spirit erwartet, dass Regeln in der Parsing Expression Grammar ausgedrückt werden – kurz PEG. Die PEG ist verwandt mit der Erweiterten Backus-Naur-Form – kurz EBNF. Auch wenn Sie mit diesen Sprachen nicht vetraut sind, sollten die Beispiele in diesem Kapitel genügen, um Ihnen einen Einstieg in die Entwicklung von Parsern mit Boost.Spirit zu verschaffen.

Boost.Spirit liegt in zwei Versionen vor. Die erste Version ist als Spirit.Classic bekannt und sollte nicht mehr verwendet werden. Die aktuelle Version 2.5.2 ist die, die Sie in diesem Kapitel kennenlernen werden.

Seit der zweiten Version kann Boost.Spirit nicht nur zur Entwicklung von Parsern verwendet werden, sondern auch zur Entwicklung von Generatoren. Während Parser textbasierte Formate lesen, können Generatoren verwendet werden, um textbasierte Formate zu schreiben. Der Teil von Boost.Spirit, der für die Entwicklung von Parsern verwendet wird, wird als Spirit.Qi bezeichnet. Spirit.Karma ist der Teil der Bibliothek, der die Entwicklung von Generatoren ermöglicht. Diese Einteilung spiegelt sich in den Namensräumen wieder: Boost.Spirit definiert Klassen und Funktionen grundsätzlich in boost::spirit. Klassen und Funktionen speziell für die Entwicklung von Parsern finden sich im Namensraum boost::spirit::qi. boost::spirit::karma wiederum ist der Namensraum für Klassen und Funktionen zur Entwicklung von Generatoren.

Neben Spirit.Qi und Spirit.Karma bietet die Bibliothek mit Spirit.Lex auch Klassen und Funktionen zur Entwicklung von Lexern an.

Dieses Kapitel führt Sie in die Entwicklung von Parsern ein. So werden in den Beispielen vorwiegend Klassen und Funktionen aus den Namensräumen boost::spirit und boost::spirit::qi verwendet. Dazu reicht es, die Headerdatei boost/spirit/include/qi.hpp einzubinden.

Möchten Sie keine Master-Headerdatei wie boost/spirit/include/qi.hpp einbinden, können Sie auf Headerdateien in boost/spirit/include/ einzeln verweisen. Wichtig ist, dass Sie ausschließlich auf Headerdateien in diesem Verzeichnis zugreifen. boost/spirit/include/ ist die Schnittstelle nach außen. Headerdateien in anderen Verzeichnissen können sich in neuen Boost.Spirit-Versionen ändern, ohne dass diese Änderungen dokumentiert werden.