checkpoint
[sbp.git] / tests / meta.g
1 s         ::=  ws grammar ws                  => "gram"
2 ws       !::=  w**
3 wp       !::=  w++
4 grammar   ::=  r +/ ws                        => "grammar"
5
6 r         ::=  word  ^"::=" alternatives /ws
7             |  word ^"!::=" alternatives /ws
8
9 alternatives  ::=  (conjuncts +/ (ws "|" ws)) +/ (ws ">" ws)
10
11 conjuncts     ::=  sequence
12                 |  sequence ^"&"  e*/ws   /ws
13                 |  sequence ^"&~" e*/ws   /ws
14
15 ps          ::= e*/ws                              => "ps"
16               | (e+/ws ws)? "^" quoted (ws e+/ws)? => "ps2"
17 psx         ::= ps
18               | ps wp ^"/" ws e
19 sequence    ::= psx
20               | psx ^"=>" (word|quoted) /ws
21
22 ec       ::= [~\-\]\\\~]
23            | escaped
24
25 range    ::= ec          => "range"
26            | ec ^"-" ec
27
28 e        ::=  word                          => "nonTerminal"
29            |  quoted                        => "literal"
30            |    ^"()"
31            |    ^"{" sequence "}"       /ws
32            |    ^"["  range* "]"
33            |    ^"[~" range* "]"
34
35            |  (e ws ^"**" > e ws ^"*")
36            |  e ^"*/" e                 /ws
37            |  (e ws ^"++" > e ws ^"+")
38            |  e ^"+/" e                 /ws
39            |  e ^"?"                    /ws
40
41            |     "(" word         ^")"  /ws
42            >    ^"(" alternatives  ")"  /ws
43 w       !::= " "
44            | "//" ([~\n]*) "\n"
45            | "\n"
46            | "\r"
47 word     ::= [a-zA-Z0-9_]++
48 quoted   ::= "\"" (([~\"\\] | escaped)+) "\""
49            | "\"\"" => ""
50 escaped  ::= "\\n" => "\n"
51            | "\\r" => "\r"
52            | "\\" [~nr]
53
54