1 // use 'a'-'z' or 'a-z' instead of [a-z]?
3 // #include (with renaming?)
7 Grammar = NonTerminal +/ ws
9 NonTerminal = Word "=" RHS /ws
10 | Word "*" ws! ^"=" ws! RHS
11 | Word "*/" Word ws! ^"=" ws! RHS
13 RHS = (Sequence +/ (ws! "|" ws!)) +/ (ws! ">" ws!)
17 PreSequence = Elements
18 | (Quoted|Word) ^"::" PreSequence /ws
19 > PreSequence ^"/" e /ws
20 | PreSequence ^"->" e /ws
22 Sequence = psx:: PreSequence
23 | Sequence ^"&" Elements /ws
24 | Sequence ^"&~" Elements /ws
32 e = (Quoted|Word) ^":" e
33 > NonTerminalReference
36 | ^"{" PreSequence "}" /ws
52 NonTerminalReference = Word
55 Quoted = "\"" ((~[\"\\] | escaped)+) "\""
59 escaped = "\n":: "\\n"
65 | "()":: w** "//" (~[\n])* "\n" ws