Ich versuche, einen YAML-formatierten Konfigurationsdateiparser mit C und libyaml zu codieren. Meine Internetsuchen brachten mir kein Glück, eine anständige und vollständige Dokumentation der API mit einer Bedienungsanleitung zu finden. Ein Tutorial von Andrew Poelstra here beschreibt nicht die dokumentbasierte [mit der Verwendung von yaml_parser_load()
] Parsing-Methode, die mir viel logischer und gerechtfertigt als die Token-basierte und die ereignisbasierte Methoden aussieht.C libyaml Dokument-basierte Analyse
Also bleibe ich derzeit bei den doxygen-generierten Dokumenten von yaml.h, und es lässt mich wirklich verwirrt, wie ich tatsächlich etwas parse, nachdem ich ein Dokument in einen Parser geladen habe. Genauer gesagt bekomme ich nicht den Stack sprechen wir in den Definitionen der yaml_document_s
und yaml_node_s
Strukturen.
Ein Beispiel aus yaml_node_s.data.mapping
:
struct {
/** The stack of mapping pairs (key, value). */
struct {
/** The beginning of the stack. */
yaml_node_pair_t *start;
/** The end of the stack. */
yaml_node_pair_t *end;
/** The top of the stack. */
yaml_node_pair_t *top;
} pairs;
/** The mapping style. */
yaml_mapping_style_t style;
} mapping;
Ich habe herausgefunden, dass *start
(in meinem Fall) auf ein Array von yaml_node_pair_t
‚s, von denen jeder ein Paar von key
und value
ganzen Zahlen enthält, die sind die Indizes, mit denen die entsprechenden Knoten über die Funktion yaml_document_get_node()
akquiriert werden können. Die Bedeutung der Zeiger *end
und *top
und wie ich Grenzen bestimmen und ein Mapping mit ihnen iterieren kann, bleibt mir ein Rätsel, da *end
nicht die endgültigen Knotenpaar-Indizes enthält.
Ich würde mich freuen, wenn mir jemand zumindest den Stapel Bedeutung hier erläutert, oder besser noch, mir eine gute Dokumentation und Beispiele zur Verfügung gestellt hat. Danke im Voraus.
Ich kenne die API nicht in Frage, aber die 'struct' Definition, die Sie präsentieren, sieht wie ein Stapel aus, der über einer verknüpften Liste gebaut wird. 'start' und' end' würden auf den ersten bzw. letzten Knoten in der Liste zeigen, während 'top' entweder auf den Knoten oben auf dem Stapel oder auf die erste offene Position darüber zeigen würde. Diese Art von Datenstruktur würde einen Stapel aufnehmen, dessen Elemente (jeweils ein Schlüssel/Wert-Paar) nicht notwendigerweise alle zugewiesenen Elemente der Liste belegen; Man könnte dies wählen, um die Anzahl der Zuweisungen zu reduzieren und freizugeben, indem die Wiederverwendung von Knoten erlaubt wird. –