Проект «YAML-парсер»

Реализовать парсер небольшого подмножества языка YAML.

YAML позволяет выражать вложенные структуры данных, включающие в себя числа, строки, массивы произвольного размера и хеши.

Пример 1. Массив из трех элементов: чисел 1, 2, 3.

--- 
- 1
- 2
- 3

Пример 2. Хеш из трех ключей со значениями.

--- 
vasya: 10
petya: 22
kolya: 20

Пример 3. Массив из строки и хеша.

--- 
- hello
- vasya: X
  petya: XXX
  kolya: XX
Требования
  1. Должна быть разработана структура данных, позволяющая представлять подобные структуры. Подсказка: struct с полем, хранящим тип (число/строка/массив/хеш), и union, хранящим соответствующие значения/указатели.
  2. Три базовых функции:
    • парсер (из файла или строки) с обработкой ошибок;
    • генератор (по имеющейся структуре данных создает YAML-представление);
    • очистка (удаляет структуру данных, освобождая всю память).