Como faço para analisar um arquivo YAML em C++?

Como faço para analisar um arquivo YAML em C++?
Yaml, ou "Yaml não é markup idioma", é um acrônimo. “A serialização de dados amigáveis ​​ao ser humano” é o objetivo deste padrão para todas as linguagens de computadores. Isso significa que os arquivos YAML podem ser escritos em um formato legível por seres humanos e praticamente todo idioma possui ferramentas e pacotes que podem analisar arquivos YAML. Como toda a análise e erro de captura são feitas por uma biblioteca e não por linhas intermináveis ​​de código trabalhoso que você escreve, é uma abordagem um pouco mais formal para lidar com arquivos de argumento e arquivos de entrada para modelos. Se o Yaml.Sintaxe da Org é respeitada pelo material dentro de YAML e YML. A extensão YAML ou YML é sem sentido. Ambos oferecem a mesma estrutura e recursos de análise de linguagem de script. YAML é um formato de dados necessário criado para análise simples de máquinas e leitura de máquina. Enquanto JSON e XML são igualmente organizados, a YAML é detalhada. Veremos a leitura de arquivos YAML em C ++ neste artigo.

Como obter a biblioteca YAML na linguagem C ++?

Uma biblioteca comparável para C ++ que pode produzir e ler arquivos YAML é chamada YAML-CPP. Pares de valor-chave são a base do YAML. Isso inclui coleções, matrizes associativas (mapas, dicionários), escalares (números inteiros, carros alegóricos, cordas e bools) e nós, que são listas que contêm muitas chaves: pares de valor. Além disso, a YAML suporta a criação de aliases e referências. O emissor C ++ e o analisador YAML que adere ao YAML 1.2 Especificação é chamada YAML-CPP. CMake é usado pelo YAML-CPP para facilitar o edifício de plataforma cruzada. Instale o cmake primeiro (recursos -> download) para continuar.

As etapas básicas da construção são: Certifique-se de adicionar a pasta Bin para cmake ao seu caminho, se optar por não utilizar a instalação específica da plataforma disponível. Insira o diretório de origem; Faça uma pasta de construção e lance o cmake. A pasta YAML-CPP \ Source \ cmake \ yaml-cpp deve ser definida como destino depois de ser construída ou copiada para um caminho preferido. Vamos começar salvando um arquivo YAML simples com os produtos de nome.YAML, para que possa ser lido mais tarde usando scripts C ++. Nosso produto.O arquivo YAML contém as seguintes informações:

Exemplo de análise do arquivo YAML em um programa C ++ usando o módulo YAML-CPP

Para leitura e saída da YAML, este script utiliza a biblioteca da Líbia. Uma ilustração de análise do código YAML é fornecida aqui. Uma série de eventos é produzida pelo analisador a partir de um fluxo de bytes de entrada. Com base no "estilo de dados", dividimos os eventos interessantes. Vamos definir alguns arquivos de cabeçalho para acessar a funcionalidade de implementar o código C ++ e YAML-CPP.


Primeiro de tudo, a declaração #include instrui o compilador a incluir os dados do stdio naquele local específico. Usamos várias funções em C/C ++ como Cout, Puts () e Printf (). Esses procedimentos não são aqueles que o programador definiu. Dentro da biblioteca de idiomas, esses módulos já estão definidos. O próximo é o Yaml.arquivo de cabeçalho H, que é do pacote YAML-CPP; Podemos acessar os eventos YAML-CPP. Então, a afirmação.Arquivo da biblioteca H onde as considerações pelo programa podem ser verificadas usando a macro assert encontrada na afirmação da biblioteca padrão.H Arquivo de cabeçalho, que produzirá uma mensagem de aviso se a suposição estiver incorreta. Então, o nó de arquivos do cabeçalho YAML-CPP.h e analisador.h para realizar as funcionalidades de leitura em C++. Agora, temos a principal função deste código. Vamos discutir brevemente o que fizemos em nosso código principal.


Dentro da função principal do INT (), declaramos alguma função, que inclui um arquivo que atribuiu o ponteiro do arquivo a ser aberto. Então, do yaml_parser_t, definimos o objeto Parsers. O YAML_PARSER é a arquitetura do analisador em C++. Só tem membros internos. A família de Yaml Parser_functions é usada para gerenciar a estrutura. Então vem o yaml_document, que é a estrutura para o documento ser analisado. O YAML_NODE_T é a estrutura do tipo de nó que leva a variável do nó do ponteiro. Depois disso, inicializamos a variável com o valor 1, que posteriormente itera em todo o loop. O arquivo é aberto invocando o método FOPEN dentro do arquivo variável e passamos os “Produtos.Arquivo Yaml ”dentro do método FOPEN no modo de leitura.

A variável de arquivo é então passada dentro do método assert como uma entrada para a operação de asserção. Novamente, utilizamos o método assert. Mas desta vez, passamos pela função yaml_parser_initialize para inicializar o analisador de objeto vazio. A entrada do arquivo é definida com a função YAML_PARSER_SET_INPUT_FILE, que leva a referência do objeto Parse e o objeto de arquivo aberto para leitura. Para criar uma série de documentos que compõem o fluxo de entrada, chamamos a função YAML_PARSER_LOAD. Se não houver nó raiz no documento gerado, a conclusão do documento foi alcançada.


Agora, temos uma implementação de loop que itera sobre cada nó dentro do documento. Dentro da seção de loop while, temos um nó variável inicializado com a função yaml_document_get_node. Esta função leva a referência do documento e o valor do índice do nó I. A função retornou o nó do documento se for encontrado no intervalo do nó. A iteração quebra se o nó não for encontrado. Em seguida, aninhamos as declarações se na primeira declaração, temos o tipo de nó igual ao yaml_scalar_node. No ninho, se afirmamos, presumimos que uma corda representa a chave. No final, liberamos a memória pela função yaml_parser_delete e fechamos o arquivo.

O código do analisador anterior gerou a seguinte saída, que está no estilo de formato C ++.

Conclusão

Aqui, estamos fechando o artigo. Geralmente descrevemos a análise de arquivos YAML na linguagem C ++. Tudo o que precisamos fazer é apenas baixar o módulo YAML-CPP em nosso projeto CMake e depois utilizar o YAML.H Arquivo de cabeçalho dentro do nosso programa. Cobrimos um exemplo em que implantamos todas as funções possíveis e seus membros fornecidos pelo módulo YAML-CPP para analisar o arquivo YAML em C++.