(* Syntax conventions is significant: component declarations, groups, properties, and closing delimiters are line-oriented. [ X ] means optional X. { X } means zero or more X. A | B means either A or B. *) (* Core layout and values *) ::= "\n" | "\r\n" ::= { } ::= { " " | "\t" } ::= " " { " " | "\t" } | "\t" { " " | "\t" } ::= { " " | "\t" } ::= ::= { } ::= ::= | | | | | | ::= | ::= | | ::= { } ::= "A".."Z" | "a".."z" | "0".."9" | "_" ::= | "." | "-" ::= "\"" { | } "\"" ::= "```" { | } "```" ::= "@" { } ::= "true" | "false" ::= [ "-" ] { } [ "." { } ] ::= ::= ::= | ::= "[" [ { } | { } ] "]" ::= "[" [ { } | { } ] "]" ::= "[" [ { } | { } ] "]" ::= "[" [ { } | { } ] "]" ::= "[" [ { } | { } ] "]" ::= "//" { } | "/*" { | } "*/" ::= "0".."9" ::= "\\" ( "\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t" | "u" ) ::= | "A".."F" | "a".."f" ::= (* Component index *) ::= | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |