9193c51b8f03914da13c7ea70b5d4badb2600e74
[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 ws ^"/" e
12 Es          ::= e %% (w**)
13 es          ::= e %% (w**)
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            |     "["  (range*) "]" => "range"
36            |     "[~" (range*) "]" => "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 w       !::= " "
57            | "//" ([~\n]*) "\n"
58            | "\n"
59            | "\r"
60 an       ::= [a-zA-Z0-9_]
61 word     ::= an++                           => "sify"
62 quoted   ::= "\"" (([~\"\\] | escaped)*) "\"" => "sify"
63 escaped  ::= "\\n" => "\n"
64            | "\\r" => "\r"
65            | "\\" [~nr]
66
67