Hvordan analyserer jeg en YAML -fil i C++?

Hvordan analyserer jeg en YAML -fil i C++?
Yaml, eller "Yaml Ain't Markup Language", er et forkortelse. "Menneskelig dataserialisering" er målet med denne standarden for alle dataspråk. Dette betyr at YAML -filer kan skrives i et format som er lesbart av mennesker og praktisk talt alle språk har verktøy og pakker som kan analysere YAML -filer. Siden all parsing og feilfangst gjøres av et bibliotek snarere enn med uendelige linjer med arbeidskrevende kode som du skriver, er det en litt mer formell tilnærming for å håndtere argumentfiler og inndatafiler for modeller. Om yaml.org syntaks blir fulgt av materialet i YAML og YML. YAML- eller YML -utvidelsen er meningsløs. Begge tilbyr samme struktur og skriptspråklige analysefunksjoner. YAML er et nødvendig dataformat opprettet for enkel maskin som parsing og maskinlesing. Mens JSON og XML er på lignende måte organisert, er Yaml Verbose. Vi vil se på å lese YAML -filer i C ++ i denne artikkelen.

Hvordan få YAML -biblioteket på C ++ -språket?

Et sammenlignbart bibliotek for C ++ som kan produsere og lese YAML-filer kalles YAML-CPP. Nøkkelverdipar er grunnlaget for Yaml. Disse inkluderer samlinger, assosiative matriser (kart, ordbøker), skalarer (heltall, flytere, strenger og bool) og noder, som er lister som inneholder mange nøkler: verdipar. I tillegg støtter YAML opprettelsen av aliaser og referanser. C ++ emitteren og YAML -parseren som holder seg til YAML 1.2 Spesifikasjon kalles YAML-CPP. CMake brukes av YAML-CPP for å lette bygning på tvers av plattformer. Installer CMake First (Resources -> Last ned) for å fortsette.

De grunnleggende trinnene i konstruksjonen er: Sørg for å legge til bin-mappen for CMake på din vei hvis du velger å ikke bruke den tilgjengelige plattformspesifikke installasjonen. Skriv inn kildekatalogen; Lag en byggemappe, og deretter starte CMake. Mappen YAML-CPP \ Source \ CMake \ YAML-CPP må settes til destinasjon etter å ha blitt bygget eller kopiert til en foretrukket bane. La oss starte med å lagre en vanlig YAML -fil med navnproduktene.Yaml, så det kan leses senere ved hjelp av C ++ skript. Vårt produkt.YAML -fil inneholder følgende informasjon:

Eksempel på analysering YAML-fil i et C ++ -program ved å bruke YAML-CPP-modulen

For YAML -lesing og outputing bruker dette skriptet Libyaml -biblioteket. En illustrasjon av parsing YAML -kode er gitt her. En serie hendelser er produsert av analyseren fra en strøm av inputbyte. Basert på "datastil" deler vi de interessante hendelsene. La oss angi noen overskriftsfiler for tilgang til funksjonaliteten i å implementere C ++ -koden og YAML-CPP.


Først av alt instruerer uttalelsen #include kompilatoren om å inkludere dataene til STDIO på det bestemte stedet. Vi bruker forskjellige funksjoner i C/C ++ som Cout, Puts () og Printf (). Disse prosedyrene er ikke de som programmereren har definert. Innenfor språkbiblioteket er disse modulene allerede definert. Den neste er yaml.H headerfil, som er fra YAML-CPP-pakken; Vi har tilgang til YAML-CPP-hendelsene. Deretter hevder.H bibliotekfil der hensynene fra programmet kan bekreftes ved hjelp av Assert Macro som finnes i standardbibliotekets påstander.H headerfil, som vil produsere en advarsel hvis antakelsen er feil. Deretter filer Yaml-CPP-overskriften.H og parser.h for å utføre lesefunksjonalitetene i C++. Nå har vi hovedfunksjonen til denne koden. La oss diskutere kort hva vi har gjort i hovedkoden vår.


Inne. Deretter, fra YAML_PARSER_T, har vi definert parser -objektet. YAML_PARSER er analyserarkitekturen i C++. Det har bare interne medlemmer. Familien til YAML Parser_Functions brukes til å administrere strukturen. Så kommer YAML_Document, som er strukturen for at dokumentet skal analyseres. YAML_NODE_T er nodetypestrukturen som tar pekernodevariabelen. Etter det initialiserte vi variabelen med verdien 1, som senere itererer gjennom løkken. Filen åpnes ved å påkalle FOPEN -metoden i variabelfilen, og vi har passert “Produktene.YAML ”-filen inne i FOPEN -metoden i lesemodus.

Filvariabelen sendes deretter inne i Asserce -metoden som en inngang for påstandsoperasjonen. Igjen har vi brukt påstandsmetoden. Men denne gangen har vi passert YAML_PARSER_INITIALIZE -funksjonen for å initialisere den tomme objektets parser. Filinngangen er satt med YAML_PARSER_SET_INPUT_FILE -funksjonen, som tar parse -objektreferansen og filobjektet åpent for lesing. For å lage en serie dokumenter som utgjør inngangsstrømmen, har vi kalt YAML_PARSER_LOAD -funksjonen. Hvis det ikke finnes noen rotnode i det genererte dokumentet, er dokumentet fullført.


Nå har vi en stundsløyfeimplementering som itererer over hver node inne i dokumentet. I løpet av stund -seksjonen har vi en variabel node initialisert med funksjonen YAML_DOCUMENT_GET_NODE. Denne funksjonen tar dokumentets referanse og indeksverdien til noden I. Funksjonen returnerte noden til dokumentet hvis det finnes i nodenområdet. Iterasjonen går i stykker hvis noden ikke er funnet. Deretter har vi nestet hvis utsagn der vi i den første uttalelsen har nodetype som er lik YAML_SCALAR_NODE. I reiret, hvis uttalelse, har vi antatt at en streng representerer nøkkelen. Til slutt frigjorde vi minnet av YAML_PARSER_DELETE -funksjonen og lukket filen.

Den forrige analysekoden genererte følgende utgang, som er i C ++ formatstil.

Konklusjon

Her lukker vi artikkelen. Vi har generelt beskrevet analysering av YAML -filer på C ++ -språket. Alt vi trenger å gjøre er å bare laste ned YAML-CPP-modulen i CMake-prosjektet vårt og deretter bruke YAML.h headerfil i programmet vårt. Vi har dekket et eksempel der vi har distribuert alle mulige funksjoner og deres medlemmer levert av YAML-CPP-modulen for å analysere YAML-filen i C++.