tyson 0.1.0

Typed Simple Object Notation
Documentation
WHITESPACE = _{ " " | "\t" | "\r" | "\n" }

char = _{
    !("|" | "\\") ~ ANY
    | "\\" ~ ("|" | "\\" | "/" | "b" | "f" | "n" | "r" | "t")
    | "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
}

prefix = @{ ( LETTER | NUMBER | "&" | "#" | "@" | "^" | "." )+ }

value = @{ char* }

separator = _{ ";" | "," }

primitive = ${ ( prefix ~ ( "|" ~ value ~ "|" )? ) | ( ( prefix )? ~  "|" ~ value ~ "|"  ) }

pair = { primitive ~ ":" ~ item }

map_value = _{ "{" ~ "}" | "{" ~ pair ~ (separator ~ pair)* ~ (separator)? ~ "}" }

map = { prefix ~ map_value | map_value }

vector_item = _{ "[" ~ "]" | "[" ~ primitive ~ (separator ~ primitive)* ~ (separator)? ~ "]" }

vector = { prefix ~ vector_item | vector_item }

item = _{ map | vector | primitive }

document = { SOI ~ pair ~ ( separator ~ pair )* ~ (separator)? ~ EOI }