重要性順番で設計目標を並んでる.
{}[],;"!# \となる
[と]で配列を囲む{と}で連想配列を囲む,でエレメントを分割する:で要素と値を分割する"で文字列を囲む#でコメントを始める!でデータ型を宣言する:でデータ型宣言を終わらせる\でエスケープを表す(文字列だけ)^([i|u|f](8|16|32|64)|a(rr)?|b(ool|in)?|o(bj)?|s(tr)?|null)$[{"はそのまま配列,連想配列,文字列<ton_stream> ::= <ton> ( ( "\n---\n" <ton> )* )?
<ton> ::= <white_space> <ton_value> <white_space>
<ton_value> ::= ( <type_identifer> )? <ton_bare_value>
<type_identifer> ::= <type_identifer_mark> ( <type_identifer_char> )* <type_identifer_ending>
<type_identifer_mark> ::= "!"
<type_identifer_ending> ::= " " | <type_separator>
<type_separator> ::= ( ":" | <non_break_white_space> ) ( <non_break_white_space> )*
<ton_bare_value> ::= <null_value> | <boolean_value> | <numeric_value> | <string> | <array> | <object>
<boolean_value> ::= <true_value> | <false_value>
<white_space> ::= ( <non_break_white_space> | <comment> | <line_break> )*
<line_break> ::= "\n" | "\r" ( "\n" )?
<null_value> ::= "null"
<true_value> ::= "true"
<false_value> ::= "false"
<non_break_white_space> ::= ( " " | "\t" )*
<string> ::= <quoted_string> | <unquoted_string>
<array_begin> ::= <white_space> "[" <white_space>
<array_end> ::= <white_space> "]" <white_space>
<object_begin> ::= <white_space> "{" <white_space>
<object_end> ::= <white_space> "}" <white_space>
<value_seperator> ::= <white_space> "," <white_space>
<name_seperator> ::= <white_space> ":" <white_space>
<array> ::= <array_begin> ( <ton_value> ( <value_seperator> <ton_value> )* )? <array_end>
<object_member> ::= <string> <name_seperator> <ton_value>
<object> ::= <object_begin> ( <object_member> ( <value_seperator> <object_member> )* )? <object_end>
<comment_mark> ::= "#"
<comment> ::= <comment_mark> ( <non_break_char> )+ <line_break>
<numerical_sign> ::= "-" | "+"
<numerical_frac> ::= "." ( <number_char> )+
<numerical_exp> ::= ( "e" | "E" ) ( <numerical_sign> )? <integer>
<numeric_value> ::= ( <numerical_sign> )? ( <numerical_frac> | ( <integer> ( <numerical_frac> )? ) ) ( <numerical_exp> )?
<integer> ::= ( <number_char> )+
<number_char> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<string_escape> ::= "\\" ( "\"" | "\\" | "/" | "b" | "n" | "r" | "t"
| ( "u" <hex_digit> <hex_digit> <hex_digit> <hex_digit> ) | ( "x" <hex_digit> <hex_digit>) )
<unquoted_string> ::= ( <unquoted_string_char> | <string_escape> )+
<quoted_string> ::= "\"" ( <quoted_string_char> | <string_escape> )* "\""
<type_identifer_char> ::= <ascii_letter> | <number_char> | <ascii_non_space_ctl> | <non_ascii> | "-" | "."
<unquoted_string_char> ::= <ascii_letter> | <number_char> | <ascii_non_space_ctl> | <non_ascii> | <ascii_non_tbon_mark> | "+" | "\r" | "\n" | "\t" | " "
<quoted_string_char> ::= <unquoted_string_char> | "[" | "]" | "{" | "}" | "," | ":" | "!" | "-" | "."
<non_break_char> ::= <type_identifer_char> | <ascii_non_tbon_mark> | <non_break_white_space>
| "[" | "]" | "{" | "}" | "," | ":" | "!"
<url_safe_char> ::= <ascii_letter> | <number_char> | "-" | "_" | "." | "~"
<ascii_letter> ::= <ascii_lower_letter> | <ascii_upper_letter>
<ascii_non_space_ctl> ::= "\x00" | "\x01" | "\x02" | "\x03" | "\x04" | "\x05" | "\x06" | "\x07"
| "\x08" | "\x0b" | "\x0c" | "\x0e" | "\x0f"
| "\x10" | "\x11" | "\x12" | "\x13" | "\x14" | "\x15" | "\x16" | "\x17"
| "\x18" | "\x19" | "\x1a" | "\x1b" | "\x1c" | "\x1d" | "\x1e" | "\x1f"
| "\x7F"
<hex_digit> ::= <number_char> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"
<ascii_non_tbon_mark> ::= "$" | "%" | "&" | "'" | "(" | ")" | "*" | "<" | "=" | ">" | "?" | "@" | "^" | "`" | "|" | "_" | "~" | "/" | ";"
<ascii_lower_letter> ::= "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m"
| "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
<ascii_upper_letter> ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M"
| "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
<non_ascii> ::= "\x80" | "\x81" | "\x82" | "\x83" | "\x84" | "\x85" | "\x86" | "\x87" | "\x88" | "\x89" | "\x8a" | "\x8b" | "\x8c" | "\x8d" | "\x8e" | "\x8f"
| "\x90" | "\x91" | "\x92" | "\x93" | "\x94" | "\x95" | "\x96" | "\x97" | "\x98" | "\x99" | "\x9a" | "\x9b" | "\x9c" | "\x9d" | "\x9e" | "\x9f"
| "\xa0" | "\xa1" | "\xa2" | "\xa3" | "\xa4" | "\xa5" | "\xa6" | "\xa7" | "\xa8" | "\xa9" | "\xaa" | "\xab" | "\xac" | "\xad" | "\xae" | "\xaf"
| "\xb0" | "\xb1" | "\xb2" | "\xb3" | "\xb4" | "\xb5" | "\xb6" | "\xb7" | "\xb8" | "\xb9" | "\xba" | "\xbb" | "\xbc" | "\xbd" | "\xbe" | "\xbf"
| "\xc0" | "\xc1" | "\xc2" | "\xc3" | "\xc4" | "\xc5" | "\xc6" | "\xc7" | "\xc8" | "\xc9" | "\xca" | "\xcb" | "\xcc" | "\xcd" | "\xce" | "\xcf"
| "\xd0" | "\xd1" | "\xd2" | "\xd3" | "\xd4" | "\xd5" | "\xd6" | "\xd7" | "\xd8" | "\xd9" | "\xda" | "\xdb" | "\xdc" | "\xdd" | "\xde" | "\xdf"
| "\xe0" | "\xe1" | "\xe2" | "\xe3" | "\xe4" | "\xe5" | "\xe6" | "\xe7" | "\xe8" | "\xe9" | "\xea" | "\xeb" | "\xec" | "\xed" | "\xee" | "\xef"
| "\xf0" | "\xf1" | "\xf2" | "\xf3" | "\xf4" | "\xf5" | "\xf6" | "\xf7" | "\xf8" | "\xf9" | "\xfa" | "\xfb" | "\xfc" | "\xfd" | "\xfe" | "\xff"