opt: "optional"
inv: "inverted"
prop: "property"
any: "any_characters"
seps: "[]{}():.!?\""
1 "string" [..seps!"name" ":" w? t?"text"]
2 "node" [$"id" w! t!"name" w! @"rule""rule"]
3 "set" {t!"value" ..seps!"ref"}
4 "set_opt" {t?"value" ..seps!"ref"}
5 "opt" {"?"opt "!"!opt}
6 "number" ["$" ?"_""underscore" ?@"set"prop]
7 "text" ["t" {"?""allow_empty" "!"!"allow_empty"} ?@"set"prop]
8 "reference" ["@" t!"name" ?@"set"prop]
9 "sequence" ["[" w? s!.(w!) {@"rule""rule"} "]"]
10 "select" ["{" w? s!.(w!) {@"rule""rule"} "}"]
11 "separated_by" ["s" @"opt" ?".""allow_trail"
"(" w? @"rule""by" w? ")" w? "{" w? @"rule""rule" w? "}"]
12 "token" [?"!""not" @"set""text" ?[?"!"inv @"set"prop]]
13 "optional" ["?" @"rule""rule"]
14 "whitespace" ["w" @"opt"]
15 "until_any_or_whitespace" [".." @"set_opt"any @"opt" ?@"set"prop]
16 "until_any" ["..." @"set_opt"any @"opt" ?@"set"prop]
17 "repeat" ["r" @"opt" "(" @"rule""rule" ")"]
18 "lines" ["l(" w? @"rule""rule" w? ")"]
19 "rule" {
@"whitespace""whitespace"
@"until_any_or_whitespace""until_any_or_whitespace"
@"until_any""until_any"
@"lines""lines"
@"repeat""repeat"
@"number""number"
@"text""text"
@"reference""reference"
@"sequence""sequence"
@"select""select"
@"separated_by""separated_by"
@"token""token"
@"optional""optional"
}
20 "document" [l(@"string""string") l(@"node""node") w?]