checkpoint
[sbp.git] / tests / meta.g
1 s         ::=  w* Grammar w*                  => "gram"
2 Grammar   ::=  R+ => "grammar"
3 R         ::=  word  ^"::=" Sequence
4             |  word ^"!::=" Sequence
5
6 ec        ::=  [~\]\\\-\~] | escaped
7
8 Sequence  ::=  Class   +/ ">"
9 Class     ::=  Rewrite +/ "|"                 => "alternatives"
10
11 Rewrite   ::=  Rewritex
12             |  Rewritex ^"&"  E+
13             |  Rewritex ^"&~" E+
14
15 Rewritex  ::=  E+                             => "rewrite"
16             |  E+ ^"=>" word
17             |  E+ ^"=>" quoted
18             |  E+  "=>" "()"                  => "wrap"
19
20 range    ::= ec => "range0" | ec ^"-" ec      => "range0"
21 E        ::= word                             => "nonTerminalY"
22            |    [(][)] => "epsilon"
23            |    ^"{" Sequence "}"
24            |     "[" [\~]?  range* "]"        => "range"
25            |  E ^"*/" E
26            |  E ^"+/" E
27            |  E ^"?"
28            |  E ^"~/~"
29
30            |  E ^"-"  E
31
32            |    ^"!" E
33            |     "^" quoted => "care"
34            |    ^"`" E
35            |  E ^"#"
36            |  quoted                        => "literal"
37
38            |  (E ^"**" > E ^"*")
39            |  (E ^"++" > E ^"+")
40
41            |     "(" word ^")"
42            >    ^"(" Sequence ")"
43
44 w       !::= " "
45            | "//" [~\n]* "\n"
46            | "\n"
47            | "\r"
48 an       ::= [a-zA-Z0-9_]
49 word     ::= an++                           => "sify"
50 quoted   ::= "\"" ([~\"\\] | escaped)* "\"" => "sify"
51 escaped  ::= "\\n" => "\n"
52            | "\\r" => "\r"
53            | "\\" [~nr]