Comment analyser un fichier yaml en c++?

Comment analyser un fichier yaml en c++?
Yaml, ou «Yaml Ain't Bualip Language», est un acronyme. «La sérialisation des données respectueuse de l'homme» est l'objectif de cette norme pour toutes les langues informatiques. Cela signifie que les fichiers YAML peuvent être écrits dans un format lisible par les humains et que pratiquement chaque langue a des outils et des packages qui peuvent analyser les fichiers YAML. Étant donné que toutes les analyses d'analyse et d'erreur sont effectuées par une bibliothèque plutôt que par des lignes sans fin de code laborieux que vous écrivez, c'est une approche légèrement plus formelle pour gérer les fichiers d'arguments et les fichiers d'entrée pour les modèles. Si le yaml.La syntaxe org est respectée par le matériau de YAML et YML. L'extension YAML ou YML n'a pas de sens. Les deux offrent les mêmes capacités de structure et d'analyse des langues de script. YAML est un format de données requis créé pour l'analyse de machine simple et la lecture de la machine. Alors que JSON et XML sont organisés de manière similaire, Yaml est verbeux. Nous examinerons la lecture des fichiers YAML en C ++ dans cet article.

Comment obtenir la bibliothèque YAML dans la langue C ++?

Une bibliothèque comparable pour C ++ qui peut produire et lire les fichiers YAML est appelée YAML-CPP. Les paires de valeurs clés sont le fondement de Yaml. Il s'agit notamment de collections, de tableaux associatifs (cartes, dictionnaires), scalaires (entiers, flotteurs, chaînes et bools) et les nœuds, qui sont des listes contenant de nombreuses clés: paires de valeurs. De plus, YAML soutient la création d'alias et de références. L'émetteur C ++ et l'analyseur YAML qui adhère au YAML 1.2 La spécification est appelée YAML-CPP. CMake est utilisé par YAML-CPP pour faciliter le bâtiment multiplateforme. Installez CMake First (Ressources -> Télécharger) pour continuer.

Les étapes de base de la construction sont les suivantes: assurez-vous d'ajouter le dossier bin pour Cmake sur votre chemin si vous choisissez de ne pas utiliser l'installation spécifique à la plate-forme disponible. Entrez le répertoire source; Faites un dossier de construction, puis lancez Cmake. Le dossier yaml-cpp \ source \ cmake \ yaml-cpp doit être défini sur destination après avoir été construit ou copié sur un chemin préféré. Commençons par enregistrer un fichier YAML ordinaire avec les produits de noms.yaml, il peut donc être lu plus tard en utilisant des scripts C ++. Notre produit.Le fichier YAML contient les informations suivantes:

Exemple d'analyse du fichier YAML dans un programme C ++ en utilisant le module YAML-CPP

Pour la lecture et la sortie de YAML, ce script utilise la bibliothèque Libyaml. Une illustration du code YAML d'analyse est fournie ici. Une série d'événements est produite par l'analyseur à partir d'un flux d'octets d'entrée. Sur la base du «style de données», nous divisons les événements intéressants. Définissons quelques fichiers d'en-tête pour accéder aux fonctionnalités de l'implémentation du code C ++ et YAML-CPP.


Tout d'abord, la déclaration #include demande au compilateur d'inclure les données de STdio à cet emplacement spécifique. Nous utilisons diverses fonctions en C / C ++ comme cout, put () et printf (). Ces procédures ne sont pas celles que le programmeur a définis. Dans la bibliothèque de langues, ces modules sont déjà définis. Le suivant est le yaml.Fichier d'en-tête H, qui est du package YAML-CPP; Nous pouvons accéder aux événements YAML-CPP. Ensuite, l'affirmation.H Fichier de bibliothèque H où les considérations par le programme peuvent être vérifiées à l'aide de la macro ASSERT trouvée dans l'affirmation de la bibliothèque standard.Fichier d'en-tête H, qui produira un message d'avertissement si l'hypothèse est incorrecte. Ensuite, le nœud de fichiers d'en-tête YAML-CPP.H et analyseur.H pour effectuer les fonctionnalités de lecture en C++. Maintenant, nous avons la fonction principale de ce code. Discutons brièvement de ce que nous avons fait dans notre code principal.


À l'intérieur de la fonction principale int (), nous avons déclaré une fonction, qui comprend un fichier qui a attribué le pointeur du fichier à ouvrir. Ensuite, à partir du YAML_PARSER_T, nous avons défini l'objet Parser. Le YAML_PARSER est l'architecture d'analyse en C++. Il n'a que des membres internes. La famille de Yaml Parser_Functions est utilisée pour gérer la structure. Vient ensuite le yaml_document, qui est la structure du document à analyser. Le yaml_node_t est la structure de type de nœud qui prend la variable du nœud de pointeur. Après cela, nous avons initialisé la variable avec la valeur 1, qui itère plus tard dans la boucle. Le fichier est ouvert en invoquant la méthode FOPEN dans le fichier variable, et nous avons passé les «produits.Fichier Yaml »à l'intérieur de la méthode FOPEN en mode de lecture.

La variable de fichier est ensuite transmise à l'intérieur de la méthode Assert comme entrée pour l'opération d'affirmation. Encore une fois, nous avons utilisé la méthode d'affirmation. Mais cette fois, nous avons passé la fonction YAML_PARSER_INITIALIAZE pour initialiser l'analyseur d'objet vide. L'entrée de fichier est définie avec la fonction YAML_PARSER_SET_INPUT_FILE, qui prend la référence de l'objet Parse et l'objet de fichier ouvert pour la lecture. Pour créer une série de documents qui composent le flux d'entrée, nous avons appelé la fonction yaml_parser_load. Si aucun nœud racine n'existe dans le document généré, l'achèvement du document a été atteint.


Maintenant, nous avons une implémentation de boucle de temps qui itère sur chaque nœud à l'intérieur du document. Dans la section de boucle while, nous avons un nœud variable initialisé avec la fonction yaml_document_get_node. Cette fonction prend la référence du document et la valeur d'index du nœud I. La fonction a renvoyé le nœud du document s'il se trouve dans la plage du nœud. L'itération se casse si le nœud n'est pas trouvé. Ensuite, nous avons imbriqué les instructions où dans la première instruction, nous avons un type de nœud égal au YAML_SCALAR_NODE. Dans la déclaration de nid, si nous avons présumé qu'une chaîne représente la clé. En fin de compte, nous avons libéré la mémoire par la fonction yaml_parser_delete et fermé le fichier.

Le code d'analyseur précédent a généré la sortie suivante, qui se trouve dans le style de format C ++.

Conclusion

Ici, nous fermons l'article. Nous avons généralement décrit l'analyse des fichiers YAML dans la langue C ++. Tout ce que nous avons à faire est simplement de télécharger le module YAML-CPP dans notre projet CMake, puis d'utiliser le YAML.Fichier d'en-tête H dans notre programme. Nous avons couvert un exemple dans lequel nous avons déployé toutes les fonctions possibles et leurs membres fournis par le module YAML-CPP pour analyser le fichier YAML en C++.