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-ёх частей (которые можно окружать
и разделять пробелами): ключ "по формату словарного ключа", записанный напрямую,
потом двоеточие, после него сам км-объект, значение в словаре по данному ключу.