3 Grammar = NonTerminal +/ ws
5 NonTerminal = Word "=" RHS /ws
7 // use 'a'-'z' or 'a-z' instead of [a-z]?
9 // #include (with renaming?)
10 // ANTLR uses ! and ^ suffixes
12 RHS = (Sequence +/ (!ws "|" !ws)) +/ (!ws ">" !ws)
16 PreSequence = ps:: Elements
17 | (Quoted|Word) ^"::" PreSequence /ws
18 > PreSequence ^"/" e /ws
19 | PreSequence ^"->" e /ws
21 Sequence = psx:: PreSequence
22 | Sequence ^"&" Elements /ws
23 | Sequence ^"&~" Elements /ws
31 e = (Quoted|Word) ^":" e
32 > NonTerminalReference
35 | ^"{" PreSequence "}" /ws
53 NonTerminalReference = Word
56 Quoted = "\"" ((~[\"\\] | escaped)+) "\""
58 escaped = "\n":: "\\n"
64 | "()":: w** "//" (~[\n])* "\n" ws