Wie man die YAML -Bibliothek in die C ++ - Sprache bekommt?
Eine vergleichbare Bibliothek für C ++, die YAML-Dateien produzieren und lesen kann, heißt YAML-CPP. Schlüsselwertpaare sind die Grundlage von Yaml. Dazu gehören Kollektionen, assoziative Arrays (Karten, Wörterbücher), Skalare (Ganzzahlen, Schwimmer, Saiten und Bools) und Knoten, die Listen mit vielen Tasten enthalten: Wertpaare. Darüber hinaus unterstützt YAML die Schaffung von Aliase und Referenzen. Der C ++ - Emitter und Yaml -Parser, der sich an die YAML 1 hält.2 Spezifikation heißt YAML-CPP. CMake wird von YAML-CPP verwendet, um das plattformübergreifende Gebäude zu erleichtern. Installieren Sie CMake zuerst (Ressourcen -> Download), um fortzufahren.
Die grundlegenden Schritte in der Konstruktion sind: Stellen Sie sicher. Geben Sie das Quellverzeichnis ein; Erstellen Sie einen Build -Ordner und starten Sie dann CMake. Der Ordner Yaml-CPP \ Source \ cmake \ yaml-cpp muss nach dem Erstellen oder kopiert auf einen bevorzugten Pfad auf das Ziel gesetzt werden. Beginnen wir zunächst eine einfache YAML -Datei mit den Namensprodukten speichern.Yaml, so kann es später mit C ++ - Skripten gelesen werden. Unser Produkt.Die YAML -Datei enthält die folgenden Informationen:
Beispiel für das Parsen von YAML-Datei in einem C ++-Programm mithilfe des YAML-CPP-Moduls
Für das Lesen und Ausgang von YAML verwendet dieses Skript die Biyaml -Bibliothek. Hier wird eine Illustration des Parsens von Yaml -Code bereitgestellt. Eine Reihe von Ereignissen wird vom Parser aus einem Strom von Input -Bytes produziert. Basierend auf dem „Datenstil“ teilen wir die interessanten Ereignisse auf. Setzen wir einige Header-Dateien für den Zugriff auf die Funktionalität der Implementierung des C ++-Code und YAML-CPP ein.
Zunächst weist die Anweisung #include den Compiler an, die Daten von stdio an diesem bestimmten Ort einzuschließen. Wir verwenden verschiedene Funktionen in C/C ++ - wie Cout, Puts () und printf (). Diese Verfahren sind nicht diejenigen, die der Programmierer definiert hat. In der Sprachbibliothek sind diese Module bereits definiert. Der nächste ist der Yaml.H Header-Datei, die aus dem YAML-CPP-Paket stammt; Wir können auf die YAML-CPP-Ereignisse zugreifen. Dann die Behauptung.H Bibliotheksdatei, bei der die Überlegungen des Programms mit dem Assert -Makro überprüft werden können.H Header -Datei, die eine Warnmeldung erzeugt, wenn die Annahme falsch ist. Dann der YAML-CPP-Header-Dateienknoten.H und Parser.H für die Ausführung der Lesefunktionalitäten in C++. Jetzt haben wir die Hauptfunktion dieses Code. Lassen Sie uns kurz diskutieren, was wir in unserem Hauptcode getan haben.
In der INT -Hauptfunktion () haben wir eine Funktion deklariert, die eine Datei enthält, die den zu öffnenden Zeiger der Datei zugewiesen hat. Dann haben wir aus dem YAML_PARSER_T das Parser -Objekt definiert. Der yaml_parser ist die Parser -Architektur in C++. Es hat nur interne Mitglieder. Die Familie von YAML Parser_functions wird verwendet, um die Struktur zu verwalten. Dann kommt das yaml_document, das die Struktur für das Dokument ist, das analysiert werden soll. Die yaml_node_t ist die Struktur des Knotentyps, die die Zeigerknotenvariable nimmt. Danach haben wir die Variable mit dem Wert 1 initialisiert, der später während der gesamten Schleife iteriert. Die Datei wird geöffnet, indem die FOPEN -Methode in der variablen Datei aufgerufen wird, und wir haben die „Produkte übergeben.YAML ”-Datei in der FOPEN -Methode im Lesemodus.
Die Dateivariable wird dann in die Assert -Methode als Eingabe für den Assertion -Vorgang übergeben. Auch hier haben wir die Assert -Methode verwendet. Aber diesmal haben wir die Funktion yaml_parser_initialize übergeben, um den Parser des leeren Objekts zu initialisieren. Die Dateieingabe wird mit der Funktion yaml_parser_set_input_file festgelegt, die die Referenz für Parse -Objekte und das Dateiobjekt zum Lesen öffnen. Um eine Reihe von Dokumenten zu erstellen, aus denen der Eingabestream besteht, haben wir die Funktion yaml_parser_load bezeichnet. Wenn im generierten Dokument kein Stammknoten vorhanden ist, wurde die Fertigstellung des Dokuments erreicht.
Jetzt haben wir eine Weile Schleifenimplementierung, die über jeden Knoten im Dokument iteriert. Innerhalb des Abschnitts while -Schleifen haben wir einen mit der Funktion initiierten variablen Knoten mit der Funktion yaml_document_get_node. Diese Funktion übernimmt die Referenz des Dokuments und den Indexwert von Knoten I. Die Funktion gab den Knoten des Dokuments zurück, wenn er im Bereich des Knotens gefunden wird. Die Iteration bricht, wenn der Knoten nicht gefunden wird. Dann haben wir, wenn Aussagen in der ersten Anweisung einen Knotentyp entsprechen, der dem yaml_scalar_node entspricht. Im Nest haben wir davon ausgegangen, dass eine Zeichenfolge den Schlüssel darstellt. Am Ende haben wir den Speicher durch die Funktion yaml_parser_delete freigelassen und die Datei geschlossen.
Der vorherige Parser -Code generierte die folgende Ausgabe, die sich im C ++ - Formatstil befindet.
Abschluss
Hier schließen wir den Artikel. Wir haben im Allgemeinen die Analyse von YAML -Dateien in der C ++ - Sprache beschrieben. Alles, was wir tun müssen, ist einfach das YAML-CPP-Modul in unserem CMake-Projekt herunterzuladen und dann die YAML zu verwenden.H Header -Datei in unserem Programm. Wir haben ein Beispiel behandelt, in dem wir alle möglichen Funktionen und deren Mitglieder bereitgestellt haben, die vom YAML-CPP-Modul zur Analyse der YAML-Datei in C bereitgestellt wurden++.