checkpoint
[sbp.git] / tests / meta.g
1 s         ::=  ws grammar ws                  => "gram"
2 ws       !::=  w**
3 grammar   ::=  r $$ ws => "grammar"
4 r         ::=  word  ^"::=" alternatives /ws
5             |  word ^"!::=" alternatives /ws
6
7 alternatives  ::=  equiAlt   $$ (ws ">" ws)
8 equiAlt       ::=  conjuncts $$ (ws "|" ws)          => "alternatives"
9
10 sequence    ::= Es
11               > Es ^"/" e  /ws
12 Es          ::= e+
13 es          ::= e %% ws
14
15 ss ::= es | es ^"/" e /ws
16
17 conjuncts   ::=  rewrite
18               |  rewrite ^"&"  e%%ws   /ws
19               |  rewrite ^"&~" e%%ws   /ws
20
21 rewrite  ::=  sequence                  /ws        => "rewrite"
22            |  sequence ^"=>" word       /ws
23            |  sequence ^"=>" quoted     /ws
24            |  sequence  "=>" "()"       /ws        => "wrap"
25
26 ec       ::= [~\-\]\\\~]
27            | escaped
28
29 range    ::= ec          => "range0"
30            | ec ^"-" ec  => "range1"
31
32 e        ::= word                             => "nonTerminalY"
33            |    [(][)] => "epsilon"
34            |    ^"{" alternatives "}"   /ws
35            |     "["  ranges "]"        => "range"
36            |     "[~" ranges "]"        => "rangex"
37            |  e ^"%%" e                 /ws
38            |  e ^"$$" e                 /ws
39            |  e ^"?"                    /ws
40            |  e ^"~/~"                  /ws
41
42            |  e ^"-"  e                 /ws
43
44            |    ^"!" e                  /ws
45            |     "^" quoted             /ws => "care"
46            |    ^"`" e                  /ws
47            |  e ^"#"                    /ws
48            |  quoted                        => "literal"
49
50            |  (e ws ^"**" > e ws ^"*")
51            |  (e ws ^"++" > e ws ^"+")
52
53            |     "(" word ^")"          /ws
54            >    ^"(" alternatives ")"   /ws
55
56 ranges ::= range*
57
58 w       !::= " "
59            | "//" [~\n]* "\n"
60            | "\n"
61            | "\r"
62 an       ::= [a-zA-Z0-9_]
63 word     ::= an++                           => "sify"
64 quoted   ::= "\"" ([~\"\\] | escaped)* "\"" => "sify"
65 escaped  ::= "\\n" => "\n"
66            | "\\r" => "\r"
67            | "\\" [~nr]
68
69