-s = gram:: !ws Grammar ws
+s = ws gram:Grammar ws
Grammar = grammar:: NonTerminal +/ ws
NonTerminal = word !wp ^"=" !wp RHS
-RHS = (Conjuncts +/ (!ws "|" !ws)) +/ (!ws ">" !ws)
+RHS = (Sequence +/ (!ws "|" !ws)) +/ (!ws ">" !ws)
-Conjuncts = Sequence
- | Sequence ^"&" Elements /ws
- | Sequence ^"&~" Elements /ws
Elements = e*/ws
PreSequence = ps:: Elements
| PreSequence !wp ^"/" !ws e
| PreSequence ^"->" e /ws
| (Quoted|word) ^"::" PreSequence /ws
- | PreSequence ^"=>" ("[]"|"()"|word|Quoted) /ws
+
Sequence = psx:: PreSequence
+ | Sequence !ws ^"&" !ws Elements
+ | Sequence !ws ^"&~" !ws Elements
ec = ~[\-\]\\]
| escaped
| e ^"*/" e /ws
| ^"!" e /ws
| e ^"?" /ws
- | ^"^" Quoted /ws
-
- | "(" word ^")" /ws
+ | ^"^" Quoted
+ | "(" word ^")" /ws
> ^"(" RHS ")" /ws
| ^"~" e
+ > "^^":: "^" e
word = [a-zA-Z0-9_]++
Quoted = "\"" ((~[\"\\] | escaped)+) "\""