我想使用C和libyaml編碼yaml格式的配置文件解析器。我的互聯網搜索沒有帶給我任何好運,找到一本體面和完整的API文檔和操作手冊。 Andrew Poelstra here的教程沒有描述基於文檔的[使用yaml_parser_load()
]解析方法,它比基於令牌和基於事件的方法更符合邏輯和正確。C libyaml基於文檔的解析
因此,目前我堅持從yaml.h doxygen生成的文檔,它真的讓我感到困惑,我在將文檔加載到解析器後如何實際解析某些內容。具體而言,我沒有得到哪個堆棧我們是否在yaml_document_s
和yaml_node_s
結構的定義中討論。
從yaml_node_s.data.mapping
一個例子:即*start
(在我的情況)指向的yaml_node_pair_t
的,其中的每一個數組包含一個對key
和value
整數,
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;
我已想出其是使用yaml_document_get_node()
函數可以獲得相應節點的指數。 *end
和*top
指針的含義以及如何確定邊界並使用它們迭代映射仍然是一個謎,因爲*end
不包含最終節點對索引。
如果有人向我澄清至少堆棧這裏的意思,或者甚至更好地爲我提供了一個很好的文檔和示例,我會非常高興。提前致謝。
我不知道有問題的API,但是您呈現的'struct'定義看起來像構建在鏈表頂部的堆棧。 'start'和'end'分別指向列表中的第一個和最後一個節點,而「top」指向堆棧頂部的節點或者第一個打開的位置。這種數據結構可以容納一個堆棧,其元素(每個鍵/值對)不一定佔用列表的所有分配元素;人們可以選擇這個來通過允許節點重用來減少分配和釋放的次數。 –