rfcc39
Grammaire :
[A] item -> array
[B] item -> tokentype : string : properties
[C] array -> { itemnb : ( item : ){itemnb} }
[D] itemnb -> int
[E] tokentype -> ident
[F] ident -> * string
[G] ident -> int
[H] string -> charnb : char{itemnb}
[I] charnb -> int
[J] properties -> propnb : ( prop : ){propnb}
[K] prop -> ident : string
[L] propnb -> int
NB : Les éléments terminaux de la grammaire ne sont pas repris.
[A][B] Le texte correspondant aux données sérialisées contient un item. Un item peut être un token ou un tableau contenant d'autres items (niveau n'imbrications illimité).
[C][D] Un tableau contient des items, précédés de leur nombre.
[B][E] Un token contient son type sous la forme d'un identificateur, son texte brut et la liste de ses propriétés.
[F][G] Un identificateur apparait soit sous la forme de son numéro s'il est déjà apparu avant, soit sous la forme d'un astérisque suivi de son texte brut si c'est sa première occurence (il prend alors comme numéro le nombre d'identificateurs apparus avant lui).
[H][I] Un texte brut est composé de sa longueur, suivi de ses caractères.
[J][L] Un liste de propriétés contient des propriétés, précédées de leur nombre.
[K] Une propriété est composée de son nom sous forme d'identificateur et de sa valeur sous forme de texte brut.