#import "head.typ" as head : * #show: MyStyle = KMON Specification KMON (KM Object Notation) это множество объектов, удобных для использования в программах с динамической типизацией. Этот документ описывает этом ножество объектов и как их интегрпретировать, а так же определяет биекцию между множеством kmon и подмножеством строк, представляющих собой запись km-объкта. KMON является упрощённым аналогом JSON, использующимся в KM Project. KMON это официальное название типа объектов, однако в самом мире игры KM он известен как SON (Suckless Object Notation). KM-объект (объект типа kmon/KMobj) может быть одного из 5-и подтипов: null (пустой), int (число), str (строка), arr (массив), dict (словарь). При этом int хранит в себе целое число (со знаком), str хранит в себе строку байт (не обязательно корректную, это просто массив из октетов произвольной длины). Arr хранит массив км-объектов, Dict хранит словарь, где ключи: строки из алфавита, состоящего лишь из букв латинского алфавита, чисел и символов #text(fill:red)[`+` `/` `=` `-` `-`]; а значения словаря - другие км-объекты. Такие объекты, хранящиеся в другом км-объекти называются сыновьями родительского объекта. Принято хранить в числовом км-объекте число от $-2^63$ до $2^63+1$. Число записывается естесственным образом. null-объект записывается как литерал `null`. Строка `str` может записываться в формате `'{str}'`, здесь мы окружаем строку одинарной кавычкой. Такой способ записи может использоваться только если в строке нет символа одинарной кавычки. Произвольную строку можно записать вторым способом: `={len(str)}>{str}`, здесь мы перед строкой пишем знак равенства, указываем длину строки (в шестнадцатиричной системе счисления), оканчиваем размер знаком "больше" и записываем саму строку. Это два единственных "формальных" способа записи. Все имплементации десериализватора должны быть способны их прочитать. Есть ещё опциональная третья запись. `"str.sub('\', '\\').sub('"', '\"')"`. Здесь мы сперва экранируем в строке все двойные кавычки и обратные слэши, и обрамляем получившуюся строку в двойные кавычки. Это называется "человекочитаемый формат". Программа, посылающая км-объект в таком формате должна быть уверена, что получатель поддерживает человекочитаемый формат строк. Вокруг записи км-объекта можно ставить справа и слева пробелы, смысл от этого не будет меняться. Для записи массивов все его элементы разделяются запятыми, и полученная строка окружается квадратными скобками (слева левой, справа правой). Запись словаря похожа на запись массива тем, что запись словаря - это разделённый запятыми список пар (ключ, км-объект), окруженный фигурными скобками (слева левой, справа правой). Пара ключ, км объект состоит из 3-ёх частей (которые можно окружать и разделять пробелами): ключ "по формату словарного ключа", записанный напрямую, потом двоеточие, после него сам км-объект, значение в словаре по данному ключу. Ключи не должны повторяться.