+//funkanomitron
s = ws Grammar ws
Grammar:: = Declaration +/ ws
| Word "*" ws ^"=" ws RHS
| Word "*/" Word ws ^"=" ws RHS
-RHS:: = ("|":: Sequence +/ (ws "|" ws)) +/ (ws ">" ws)
+RHS:: = ("|":: Sequence +/ (ws "|" ws)) +/ (ws (">" -> ~">") ws)
Elements:: = e*/ws
Sequence = PreSequence
| Sequence ^"&" Elements /ws
+ | ^"~~" Elements /ws
| Sequence ^"&~" Elements /ws
e = e ^"!"
| e ^"*/" e /ws
| e ^"?" /ws
| ^"^" Quoted
+ | ^"`" e
+ | ^"..."
| "(" Word ^")"
> ^"(" RHS ")" /ws
- | ^"~" e
+ | "~":: ("~" -> ~"~")! e
| ^"\\{"
| ^"\\}"
+ | ^">>"
+ | ^"<<"
-Word:: = [.a-zA-Z0-9_]++
+Word:: = [.a-zA-Z0-9_]++ &~ "."+
Quoted:: = "\"" (~[\"\\] | escaped)+ "\""
| "\"\""
Range:: = ec
| ec "-" ec
+ | "<<":: [<][<]
+ | ">>":: [>][>]
-ec = ~[\-\]\\]
+ec = ~[\-\]\\<>]
+ | [>] -> ~[>]
+ | [<] -> ~[<]
| escaped
escaped = "\n":: "\\n"
| "\r":: "\\r"
| "\\" ~[nr]
-ws! = [ \r\n]** ("//" ~[\n]* "\n" ws)?
-
+ws! = [ \r\n]**
+ | [ \r\n]** "//" ~[\n]* "\n" ws