use >> and << for indent/dedent
[sbp.git] / tests / meta.g
index b1552f1..f06eb2f 100644 (file)
@@ -1,3 +1,4 @@
+//funkanomitron
 s             = ws Grammar ws
 
 Grammar::     = Declaration +/ ws
@@ -14,7 +15,7 @@ NonTerminal   = NonTerminal:: Word            ws  "=" ws RHS
               |               Word  "*"       ws ^"=" ws RHS
               |               Word  "*/" Word ws ^"=" ws RHS
        
-RHS::         = ("|":: Sequence +/ (ws "|" ws)) +/ (ws ">" ws)
+RHS::         = ("|":: Sequence +/ (ws "|" ws)) +/ (ws (">" -> ~">") ws)
 
 Elements::    = e*/ws
 
@@ -25,6 +26,7 @@ PreSequence   = Elements
 
 Sequence      = PreSequence
               | Sequence ^"&"  Elements /ws
+              | ^"~~"  Elements /ws
               | Sequence ^"&~" Elements /ws
 
 e             =                                   e ^"!"
@@ -44,24 +46,32 @@ 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