Come ottenere la libreria YAML nella lingua C ++?
Una libreria comparabile per C ++ che può produrre e leggere i file YAML è chiamata YAML-CPP. Le coppie di valore chiave sono il fondamento di Yaml. Questi includono raccolte, array associativi (mappe, dizionari), scalari (numeri interi, galleggianti, stringhe e booli) e nodi, che sono elenchi contenenti molti tasti: coppie di valori. Inoltre, Yaml supporta la creazione di alias e riferimenti. L'emettitore C ++ e il parser YAML che aderisce allo Yaml 1.2 La specifica è chiamata YAML-CPP. Cmake viene utilizzato da YAML-CPP per facilitare l'edificio multipiattaforma. Installa Cmake First (Risorse -> Download) per continuare.
I passaggi di base nella costruzione sono: Assicurati di aggiungere la cartella Bin per CMake sul tuo percorso se si sceglie di non utilizzare l'installazione disponibile per la piattaforma. Immettere la directory di origine; Crea una cartella Build, quindi avvia Cmake. La cartella Yaml-CPP \ sorgente \ cmake \ yaml-cpp deve essere impostata su destinazione dopo essere stata costruita o copiata su un percorso preferito. Cominciamo salvando un semplice file Yaml con i prodotti Nome.Yaml, quindi può essere letto in seguito usando gli script C ++. Il nostro prodotto.Il file YAML contiene le seguenti informazioni:
Esempio di file di analisi YAML in un programma C ++ utilizzando il modulo YAML-CPP
Per la lettura e l'output di Yaml, questo script utilizza la libreria LIBYAML. Un illustrazione del codice YAML di analisi è fornita qui. Una serie di eventi sono prodotti dal parser da un flusso di byte di input. Sulla base dello "stile dei dati", dividiamo gli eventi interessanti. Imposta alcuni file di intestazione per accedere alla funzionalità di implementazione del codice C ++ e YAML-CPP.
Prima di tutto, l'affermazione #Include indica al compilatore di includere i dati di STDIO in quella posizione specifica. Usiamo varie funzioni in c/c ++ come cout, put () e printf (). Queste procedure non sono quelle che il programmatore ha definito. All'interno della libreria linguistica, questi moduli sono già definiti. Il prossimo è lo yaml.File di intestazione H, che proviene dal pacchetto YAML-CPP; Possiamo accedere agli eventi YAML-CPP. Quindi, l'asserzione.File della libreria H in cui le considerazioni del programma possono essere verificate utilizzando la macro Assert trovata in Assert della libreria standard.H File di intestazione, che produrrà un messaggio di avviso se l'Assunzione non è corretta. Quindi, il nodo file di intestazione YAML-CPP.H e parser.h per eseguire le funzionalità di lettura in c++. Ora abbiamo la funzione principale di questo codice. Discutiamo brevemente di ciò che abbiamo fatto nel nostro codice principale.
All'interno della funzione Int Main (), abbiamo dichiarato una funzione, che include un file che ha assegnato il puntatore del file da aprire. Quindi, da Yaml_Parser_t, abbiamo definito l'oggetto parser. Yaml_parser è l'architettura parser in c++. Ha solo membri interni. La famiglia di Yaml Parser_Functions viene utilizzata per gestire la struttura. Poi arriva Yaml_Document, che è la struttura per il documento da analizzare. Yaml_node_t è la struttura del tipo di nodo che prende la variabile del nodo puntatore. Successivamente, abbiamo inizializzato la variabile con il valore 1, che in seguito iterate durante il loop. Il file viene aperto invocando il metodo Fopen all'interno del file variabile e abbiamo superato i "prodotti.File Yaml ”all'interno del metodo Fopen nella modalità di lettura.
La variabile del file viene quindi passata all'interno del metodo assert come input per l'operazione di asserzione. Ancora una volta, abbiamo utilizzato il metodo Assert. Ma questa volta, abbiamo superato la funzione Yaml_Parser_Initialize per inizializzare il parser di oggetti vuoti. L'ingresso del file è impostato con la funzione YAML_PARSER_SET_INPUT_FILE, che prende il riferimento dell'oggetto PASSE e l'oggetto file aperto per la lettura. Per creare una serie di documenti che compongono il flusso di input, abbiamo chiamato la funzione Yaml_Parser_Load. Se non esiste alcun nodo radice nel documento generato, è stato raggiunto il completamento del documento.
Ora, abbiamo un po 'di implementazione di loop che itera su ciascun nodo all'interno del documento. All'interno della sezione Loop, abbiamo un nodo variabile inizializzato con la funzione yaml_document_get_node. Questa funzione prende il riferimento del documento e il valore dell'indice del nodo i. La funzione ha restituito il nodo del documento se si trova nell'intervallo del nodo. L'iterazione si interrompe se il nodo non viene trovato. Quindi, abbiamo nidificato IF IF in cui nella prima istruzione, abbiamo un tipo di nodo uguale a YAML_SCALAR_NODE. Nel nido, if, abbiamo presunto che una stringa rappresenti la chiave. Alla fine, abbiamo liberato la memoria dalla funzione Yaml_Parser_Delete e chiuso il file.
Il precedente codice parser ha generato il seguente output, che è nello stile del formato C ++.
Conclusione
Qui stiamo chiudendo l'articolo. Abbiamo generalmente descritto l'analisi dei file YAML nel linguaggio C ++. Tutto quello che dobbiamo fare è semplicemente scaricare il modulo YAML-CPP nel nostro progetto CMake e quindi utilizzare YAML.H File di intestazione all'interno del nostro programma. Abbiamo coperto un esempio in cui abbiamo distribuito tutte le possibili funzioni e i loro membri forniti dal modulo YAML-CPP per analizzare il file YAML in C++.