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