s ::= w* Grammar w* => "gram"
+ws !::= w*
+grammar ::= R+/ws => "grammar"
Grammar ::= R+ => "grammar"
-R ::= word ^"::=" Class+/gt
- | word ^"!::=" Class+/gt
+R ::= word ^"::=" Alternatives
+ | word ^"!::=" Alternatives
ec ::= [~\]\\\-\~] | escaped
-Class ::= Rewrite +/ bar => "alternatives"
+Alternatives ::= EquiAlt +/ ">"
+EquiAlt ::= Conjuncts +/ "|" => "alternatives"
-Rewrite ::= Rewritex
- | Rewritex ^"&" E+
- | Rewritex ^"&~" E+
+Sequence ::= E+ ^"/" E
+ > E+
-Rewritex ::= E+ => "rewrite"
- | E+ ^"=>" word
- | E+ ^"=>" quoted
- | E+ "=>" "()" => "wrap"
+Conjuncts ::= rewrite
+ | rewrite ^"&" Sequence
+ | rewrite ^"&~" Sequence
+
+rewrite ::= Sequence /ws => "rewrite"
+ | Sequence ^"=>" word /ws
+ | Sequence ^"=>" quoted /ws
+ | Sequence "=>" "()" /ws => "wrap"
range ::= ec => "range0" | ec ^"-" ec => "range0"
-gt !::= ">"
-bar !::= "|"
E ::= word => "nonTerminalY"
| [(][)] => "epsilon"
- | ^"{" Class+/gt "}"
+ | ^"{" Alternatives "}"
| "[" [\~]? range* "]" => "range"
| E ^"*/" E
| E ^"+/" E
| (E ^"++" > E ^"+")
| "(" word ^")"
- > ^"(" Class+/gt ")"
+ > ^"(" Alternatives ")"
w !::= " "
| "//" [~\n]* "\n"