d5a70b36bb8942a931bf7a10f35a2a81b6f835f1
[sbp.git] / src / edu / berkeley / sbp / misc / MetaGrammar.java
1 package edu.berkeley.sbp.misc;
2 import edu.berkeley.sbp.util.*;
3 import edu.berkeley.sbp.*;
4 import java.util.*;
5 import java.io.*;
6
7 public class MetaGrammar extends ReflectiveWalker {
8
9     public static Union make() throws Exception {
10         return ((MetaGrammar)new MetaGrammar().walk(meta)).done();
11     }
12     public String toString() {
13         StringBuffer ret = new StringBuffer();
14         for(Union u : nt.values()) u.toString(ret);
15         return ret.toString();
16     }
17
18     // FIXME
19     private static HashSet<Element> dropAll = new HashSet<Element>();
20
21     // Statics //////////////////////////////////////////////////////////////////////////////
22
23     private static final Union SELF = new Union("()");
24
25     public static Union epsilon = new Union("()");
26     static { epsilon.add(Sequence.empty); }
27
28     ////////////////////////////////////////////////////////////////////////////////
29
30     private Union g;
31     private HashMap<String,Union> nt;
32     private int anon = 0;
33     private String startSymbol;
34     private boolean strings;
35
36     private Element  set(Range.Set r) { if (strings) throw new Error(); return CharToken.set(r); }
37     private Element  string(String s) { return strings ? StringToken.string(s) : CharToken.string(s); }
38     private Atom     leftBrace()      { return strings ? StringToken.leftBrace : CharToken.leftBrace; }
39     private Atom     rightBrace()     { return strings ? StringToken.rightBrace : CharToken.rightBrace; }
40
41     public MetaGrammar() { this("s", false); }
42     public MetaGrammar(String s) { this(s, false); }
43     public MetaGrammar(String s, boolean strings) { this.strings = strings; done(s); }
44     public Union done() { return done("s"); }
45     public Union done(String str) {
46         Union ret = g;
47         g = new Union(str);
48         startSymbol = str;
49         nt = new HashMap<String,Union>();
50         dropAll = new HashSet<Element>();
51         nt.put(str, g);
52         return ret;
53     }
54
55
56     // MetaGrammar //////////////////////////////////////////////////////////////////////////////
57
58     public PreSequence _amp_(PreSequence p, Object[] o)        { return p.and(new PreSequence(o, null).buildSequence(null, true, false, true)); }
59     public PreSequence _amp__tilde_(PreSequence p, Object[] o) { return p.not(new PreSequence(o, null).buildSequence(null, true, false, true)); }
60     public Object      _star_(Element r)                                              { return Repeat.many0(r); }
61     public Element     epsilon(Object o, Object b)                                    { return epsilon; }
62     public Element     _rightparen_(Object e)                                         { return SELF; }
63     public Element     _bang_(Element r)                                              { return r; }
64     public Object      _caret_(String s)                                              { return new MyLift(s); }
65     public Object      _leftparen__rightparen_(Object o)                              { return epsilon; }
66     public Union       nonTerminal(String s)                                          { return nonTerminal(s, null, false, false); }
67     public Union       _colon__colon__equals_(String s, PreSequence[][] p)            { return nonTerminal(s, p, false, false); }
68     public Union       _bang__colon__colon__equals_(String s, PreSequence[][] p)      { return nonTerminal(s, p, false, true); }
69     public Union       _colon__colon__equals_(boolean q, String s, PreSequence[][] p) { return nonTerminal(s, p, false, q); }
70     public Object      _leftparen_(PreSequence[][] p)                                 { return nonTerminal("anon"+(anon++), p, false, false); }
71     public Union       nonTerminal(String str, PreSequence[][] s, boolean synthetic, boolean dropAll) {
72         Union n = str.equals(startSymbol) ? g : nt.get(str);
73         if (n == null) nt.put(str, n = new Union(str, synthetic));
74         if (dropAll) this.dropAll.add(n);
75         if (s==null) return n;
76         HashSet<Sequence> seqs = new HashSet<Sequence>();
77         for(int i=0; i<s.length; i++) {
78             if (s[i]==null) continue;
79             HashSet<Sequence> temp = new HashSet<Sequence>();
80             for(PreSequence pre : s[i]) {
81                 pre.not.addAll(seqs);
82                 Sequence seq = pre.buildSequence(n, false, dropAll, false);
83                 temp.add(seq);
84                 n.add(seq);
85             }
86             seqs.addAll(temp);
87         }
88         return n;
89     }
90
91     public Object   _backslash__leftbrace_(String s)      { return SELF; }
92     public Object   _leftbrace_(PreSequence p) {
93         return nonTerminal("braced"+(anon++),
94                            new PreSequence[][] {
95                                new PreSequence[] {
96                                    new PreSequence(new Element[] { leftBrace(),
97                                                                    p.buildUnion(),
98                                                                    rightBrace() })
99                                }
100                            },
101                            false,
102                            false);
103     }
104
105     public Object   _plus_(final Element r)                    { return Repeat.many1(r); }
106     public PreSequence rewrite(Object[] o)                     { return new PreSequence(o, null); }
107
108     public PreSequence seqx(PreSequence p, String tag) { return _equals__greater_(p, tag); }
109     public PreSequence _equals__greater_(PreSequence p, String tag) {
110         p.tag = tag;
111         return p;
112     }
113
114     public PreSequence ps(Object[] o) { return new PreSequence(o); }
115     public PreSequence _slash_(PreSequence p, Object sep) { return p.sparse(sep); }
116
117     public Object _plus__slash_(final Element r, Element s) { return Repeat.many1(r, s); }
118     public Object _star__slash_(final Element r, Element s) { return Repeat.many0(r, s); }
119     public Object _star__star_(final Element r) { return Repeat.maximal(Repeat.many0(r)); }
120     public Object _plus__plus_(final Element r) { return Repeat.maximal(Repeat.many1(r)); }
121     public Element _question_(final Element r) { return Repeat.maybe(r); }
122     public MetaGrammar gram(Object o, MetaGrammar g, Object o2) { return g; }
123     public MetaGrammar  grammar(Object[] o) { return this; }
124     public MetaGrammar grammar(Object o, Union[] u, Object x) { return this; }
125     public char    _backslash_n() { return '\n'; }
126     public char    _backslash_r() { return '\r'; }
127     public Object    literal(String s) { return new MyDrop(string(s)); }
128     public Range     _minus_(char a, char b) { return new Range(a, b); }
129     public Range     range(char a)         { return new Range(a, a); }
130     public Element   _leftbracket_       (Range[] rr) { return ranges(true, rr); }
131     public Element   _leftbracket__tilde_(Range[] rr) { return ranges(false,  rr); }
132     public Element   ranges(boolean positive, Range[] rr) {
133         Range.Set ret = positive ? new Range.Set() : new Range.Set(new Range(true, true));
134         if (rr != null)
135             for(Range r : rr)
136                 if (positive) ret.add(r);
137                 else          ret.remove(r);
138         return set(ret);
139     }
140
141     public class MyLift {
142         public final String s;
143         public MyLift(String s) { this.s = s; }
144     }
145     public class MyDrop {
146         public final Object o;
147         public MyDrop(Object o) { this.o = o; }
148     }
149
150     public class PreSequence {
151         public final HashSet<Sequence> and  = new HashSet<Sequence>();
152         public final HashSet<Sequence> not  = new HashSet<Sequence>();
153         public /*final*/ String tag;
154         public final Object[] o;
155
156         public PreSequence sparse(Object e) {
157             Object[] ret;
158             if (o.length <= 1) ret = o;
159             else {
160                 ret = new Object[o.length * 2 - 1];
161                 for(int i=0; i<o.length; i++) {
162                     Object oi = o[i];
163                     ret[i*2]   = oi;
164                     if (i*2+1<ret.length) ret[i*2+1] = new MyDrop(e);
165                 }
166             }
167             PreSequence p = new PreSequence(ret, tag);
168             p.not.addAll(not);
169             p.and.addAll(and);
170             return p;
171         }
172
173         public PreSequence not(Sequence s) { not.add(s); return this; }
174         public PreSequence and(Sequence s) { and.add(s); return this; }
175
176         public PreSequence(Object o) { this(new Object[] { o }, null); }
177         public PreSequence(Object[] o) { this(o, null); }
178         public PreSequence(Object[] o, String tag) { this.o = o; this.tag = tag; }
179
180         public Union    buildUnion() {
181             Union u = new Union("???");
182             u.add(buildSequence(u));
183             return u;
184         }
185         public Sequence buildSequence(Union u) { return buildSequence(u, false, false, false); }
186         public Sequence buildSequence(Union u, boolean lame, boolean dropAll, boolean keeper) {
187             for(Sequence s : and) u.add(s);
188             for(Sequence s : not) u.add(s);
189             HashSet<Sequence> set = new HashSet<Sequence>();
190             Element[] o2 = o==null ? new Element[0] : new Element[o.length];
191             int nonDrop = 0;
192             boolean[] drops = null;
193             if (o != null) {
194                 drops = new boolean[o.length];
195                 int j = 0;
196                 for(int i=0; i<o.length; i++) {
197                     Object oi = o[i];
198                     if (oi instanceof MyDrop)      { oi = ((MyDrop)oi).o; drops[j] = true; }
199
200                     if (oi==SELF)                    o2[j] = u.new Subset("(("+u+"))", set);
201                     else if (oi instanceof MyLift) { o2[j] = string(tag = ((MyLift)oi).s); drops[j] = o.length>1; }
202                     else                             o2[j] = (Element)oi;
203
204                     if (MetaGrammar.dropAll.contains(o2[j])) drops[j] = true;
205                     nonDrop += drops[j] ? 0 : 1;
206                     o2[j] = o2[j];
207                     j++;
208                 }
209             }
210             Element[] expansion = o2;
211             Sequence ret = dropAll || lame || keeper ? Sequence.drop(expansion, and, not, lame) : null;
212             if (ret==null && tag!=null) ret = Sequence.rewritingSequence(tag, expansion, drops, and, not);
213             if (ret==null) {
214                 int idx = -1;
215                 for(int i=0; i<expansion.length; i++) {
216                     if (!drops[i]) idx = i;
217                     else expansion[i] = expansion[i];
218                 }
219                 ret = idx==-1 ? Sequence.drop(expansion, and, not, false) : Sequence.singleton(expansion, idx, and, not);
220             }
221             set.add(ret);
222             return ret;
223         }
224     }
225
226     public static void main(String[] args) throws Exception {
227         if (args.length != 2) {
228             System.err.println("usage: java " + MetaGrammar.class.getName() + " grammarfile.g com.yourdomain.package.ClassName");
229             System.exit(-1);
230         }
231
232         String className   = args[1].substring(args[1].lastIndexOf('.')+1);
233         String packageName = args[1].substring(0, args[1].lastIndexOf('.'));
234         String fileName    = packageName.replace('.', '/') + "/" + className + ".java";
235
236         BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
237         StringBuffer out = new StringBuffer();
238
239         boolean skip = false;
240         for(String s = br.readLine(); s != null; s = br.readLine()) {
241             if (s.indexOf("DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED") != -1 && s.indexOf("\"")==-1) skip = true;
242             if (s.indexOf("DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED") != -1 && s.indexOf("\"")==-1) break;
243             if (!skip) out.append(s+"\n");
244         }
245
246         out.append("\n        // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
247         new Parser(MetaGrammar.make(), CharToken.top()).parse1(new CharToken.Stream(new InputStreamReader(new FileInputStream(args[0])))).toJava(out);
248         out.append("\n        // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
249
250         for(String s = br.readLine(); s != null; s = br.readLine()) out.append(s+"\n");
251         br.close();
252
253         OutputStream os = new FileOutputStream(fileName);
254         PrintWriter p = new PrintWriter(new OutputStreamWriter(os));
255         p.println(out.toString());
256         p.flush();
257         os.close();
258     }
259
260     public static final Tree meta =
261
262
263
264
265
266
267
268
269
270
271
272         // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED
273 new Tree(null, "gram", new Tree[] { new Tree(null, null, new Tree[] { }),
274         new Tree(null, "grammar", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { })}),
275         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
276         new Tree(null, "s", new Tree[] { })})}),
277         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
278         new Tree(null, "r", new Tree[] { }),
279         new Tree(null, "a", new Tree[] { }),
280         new Tree(null, "m", new Tree[] { }),
281         new Tree(null, "m", new Tree[] { }),
282         new Tree(null, "a", new Tree[] { }),
283         new Tree(null, "r", new Tree[] { })})}),
284         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
285         new Tree(null, "s", new Tree[] { })})})})}),
286         new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
287         new Tree(null, "r", new Tree[] { }),
288         new Tree(null, "a", new Tree[] { }),
289         new Tree(null, "m", new Tree[] { })})})})})}),
290         new Tree(null, "!::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
291         new Tree(null, "s", new Tree[] { })}),
292         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "**", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { })})})})})})})})}),
293         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
294         new Tree(null, "r", new Tree[] { }),
295         new Tree(null, "a", new Tree[] { }),
296         new Tree(null, "m", new Tree[] { }),
297         new Tree(null, "m", new Tree[] { }),
298         new Tree(null, "a", new Tree[] { }),
299         new Tree(null, "r", new Tree[] { })}),
300         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+/", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { })})}),
301         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
302         new Tree(null, "s", new Tree[] { })})})})})}),
303         new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
304         new Tree(null, "r", new Tree[] { }),
305         new Tree(null, "a", new Tree[] { }),
306         new Tree(null, "m", new Tree[] { }),
307         new Tree(null, "m", new Tree[] { }),
308         new Tree(null, "a", new Tree[] { }),
309         new Tree(null, "r", new Tree[] { })})})})})}),
310         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { })}),
311         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
312         new Tree(null, "o", new Tree[] { }),
313         new Tree(null, "r", new Tree[] { }),
314         new Tree(null, "d", new Tree[] { })})}),
315         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ":", new Tree[] { }),
316         new Tree(null, ":", new Tree[] { }),
317         new Tree(null, "=", new Tree[] { })})}),
318         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
319         new Tree(null, "l", new Tree[] { }),
320         new Tree(null, "t", new Tree[] { }),
321         new Tree(null, "e", new Tree[] { }),
322         new Tree(null, "r", new Tree[] { }),
323         new Tree(null, "n", new Tree[] { }),
324         new Tree(null, "a", new Tree[] { }),
325         new Tree(null, "t", new Tree[] { }),
326         new Tree(null, "i", new Tree[] { }),
327         new Tree(null, "v", new Tree[] { }),
328         new Tree(null, "e", new Tree[] { }),
329         new Tree(null, "s", new Tree[] { })})})})}),
330         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
331         new Tree(null, "s", new Tree[] { })})})}),
332         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
333         new Tree(null, "o", new Tree[] { }),
334         new Tree(null, "r", new Tree[] { }),
335         new Tree(null, "d", new Tree[] { })})}),
336         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "!", new Tree[] { }),
337         new Tree(null, ":", new Tree[] { }),
338         new Tree(null, ":", new Tree[] { }),
339         new Tree(null, "=", new Tree[] { })})}),
340         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
341         new Tree(null, "l", new Tree[] { }),
342         new Tree(null, "t", new Tree[] { }),
343         new Tree(null, "e", new Tree[] { }),
344         new Tree(null, "r", new Tree[] { }),
345         new Tree(null, "n", new Tree[] { }),
346         new Tree(null, "a", new Tree[] { }),
347         new Tree(null, "t", new Tree[] { }),
348         new Tree(null, "i", new Tree[] { }),
349         new Tree(null, "v", new Tree[] { }),
350         new Tree(null, "e", new Tree[] { }),
351         new Tree(null, "s", new Tree[] { })})})})}),
352         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
353         new Tree(null, "s", new Tree[] { })})})})})})}),
354         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
355         new Tree(null, "l", new Tree[] { }),
356         new Tree(null, "t", new Tree[] { }),
357         new Tree(null, "e", new Tree[] { }),
358         new Tree(null, "r", new Tree[] { }),
359         new Tree(null, "n", new Tree[] { }),
360         new Tree(null, "a", new Tree[] { }),
361         new Tree(null, "t", new Tree[] { }),
362         new Tree(null, "i", new Tree[] { }),
363         new Tree(null, "v", new Tree[] { }),
364         new Tree(null, "e", new Tree[] { }),
365         new Tree(null, "s", new Tree[] { })}),
366         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+/", new Tree[] { new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+/", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "c", new Tree[] { }),
367         new Tree(null, "o", new Tree[] { }),
368         new Tree(null, "n", new Tree[] { }),
369         new Tree(null, "j", new Tree[] { }),
370         new Tree(null, "u", new Tree[] { }),
371         new Tree(null, "n", new Tree[] { }),
372         new Tree(null, "c", new Tree[] { }),
373         new Tree(null, "t", new Tree[] { }),
374         new Tree(null, "s", new Tree[] { })})}),
375         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
376         new Tree(null, "s", new Tree[] { })})}),
377         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "|", new Tree[] { })})}),
378         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
379         new Tree(null, "s", new Tree[] { })})})})})})})})})})})})})}),
380         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
381         new Tree(null, "s", new Tree[] { })})}),
382         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ">", new Tree[] { })})}),
383         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
384         new Tree(null, "s", new Tree[] { })})})})})})})})})})})})})}),
385         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "c", new Tree[] { }),
386         new Tree(null, "o", new Tree[] { }),
387         new Tree(null, "n", new Tree[] { }),
388         new Tree(null, "j", new Tree[] { }),
389         new Tree(null, "u", new Tree[] { }),
390         new Tree(null, "n", new Tree[] { }),
391         new Tree(null, "c", new Tree[] { }),
392         new Tree(null, "t", new Tree[] { }),
393         new Tree(null, "s", new Tree[] { })}),
394         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
395         new Tree(null, "e", new Tree[] { }),
396         new Tree(null, "q", new Tree[] { }),
397         new Tree(null, "u", new Tree[] { }),
398         new Tree(null, "e", new Tree[] { }),
399         new Tree(null, "n", new Tree[] { }),
400         new Tree(null, "c", new Tree[] { }),
401         new Tree(null, "e", new Tree[] { })})})})}),
402         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
403         new Tree(null, "e", new Tree[] { }),
404         new Tree(null, "q", new Tree[] { }),
405         new Tree(null, "u", new Tree[] { }),
406         new Tree(null, "e", new Tree[] { }),
407         new Tree(null, "n", new Tree[] { }),
408         new Tree(null, "c", new Tree[] { }),
409         new Tree(null, "e", new Tree[] { })})}),
410         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "&", new Tree[] { })})}),
411         new Tree(null, "*/", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
412         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
413         new Tree(null, "s", new Tree[] { })})})})})}),
414         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
415         new Tree(null, "s", new Tree[] { })})})}),
416         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
417         new Tree(null, "e", new Tree[] { }),
418         new Tree(null, "q", new Tree[] { }),
419         new Tree(null, "u", new Tree[] { }),
420         new Tree(null, "e", new Tree[] { }),
421         new Tree(null, "n", new Tree[] { }),
422         new Tree(null, "c", new Tree[] { }),
423         new Tree(null, "e", new Tree[] { })})}),
424         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "&", new Tree[] { }),
425         new Tree(null, "~", new Tree[] { })})}),
426         new Tree(null, "*/", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
427         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
428         new Tree(null, "s", new Tree[] { })})})})})}),
429         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
430         new Tree(null, "s", new Tree[] { })})})})})})}),
431         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
432         new Tree(null, "s", new Tree[] { })}),
433         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*/", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
434         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
435         new Tree(null, "s", new Tree[] { })})})})})})})})})})}),
436         new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
437         new Tree(null, "s", new Tree[] { })})})})})}),
438         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
439         new Tree(null, "s", new Tree[] { }),
440         new Tree(null, "x", new Tree[] { })}),
441         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
442         new Tree(null, "s", new Tree[] { })})})})})}),
443         new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
444         new Tree(null, "s", new Tree[] { })})}),
445         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
446         new Tree(null, "s", new Tree[] { })})}),
447         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "/", new Tree[] { })})}),
448         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})})})})}),
449         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
450         new Tree(null, "e", new Tree[] { }),
451         new Tree(null, "q", new Tree[] { }),
452         new Tree(null, "u", new Tree[] { }),
453         new Tree(null, "e", new Tree[] { }),
454         new Tree(null, "n", new Tree[] { }),
455         new Tree(null, "c", new Tree[] { }),
456         new Tree(null, "e", new Tree[] { })}),
457         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
458         new Tree(null, "s", new Tree[] { }),
459         new Tree(null, "x", new Tree[] { })})})})}),
460         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
461         new Tree(null, "s", new Tree[] { }),
462         new Tree(null, "x", new Tree[] { })})}),
463         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=", new Tree[] { }),
464         new Tree(null, ">", new Tree[] { })})}),
465         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
466         new Tree(null, "o", new Tree[] { }),
467         new Tree(null, "r", new Tree[] { }),
468         new Tree(null, "d", new Tree[] { })})})})}),
469         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "q", new Tree[] { }),
470         new Tree(null, "u", new Tree[] { }),
471         new Tree(null, "o", new Tree[] { }),
472         new Tree(null, "t", new Tree[] { }),
473         new Tree(null, "e", new Tree[] { }),
474         new Tree(null, "d", new Tree[] { })})})})})})})})})}),
475         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
476         new Tree(null, "s", new Tree[] { })})})})})})}),
477         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
478         new Tree(null, "c", new Tree[] { })}),
479         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "[~", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "-", new Tree[] { })}),
480         new Tree(null, "range", new Tree[] { new Tree(null, "]", new Tree[] { })}),
481         new Tree(null, "range", new Tree[] { new Tree(null, "\\", new Tree[] { })}),
482         new Tree(null, "range", new Tree[] { new Tree(null, "~", new Tree[] { })})})})})}),
483         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
484         new Tree(null, "s", new Tree[] { }),
485         new Tree(null, "c", new Tree[] { }),
486         new Tree(null, "a", new Tree[] { }),
487         new Tree(null, "p", new Tree[] { }),
488         new Tree(null, "e", new Tree[] { }),
489         new Tree(null, "d", new Tree[] { })})})})})})})}),
490         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }),
491         new Tree(null, "a", new Tree[] { }),
492         new Tree(null, "n", new Tree[] { }),
493         new Tree(null, "g", new Tree[] { }),
494         new Tree(null, "e", new Tree[] { })}),
495         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
496         new Tree(null, "c", new Tree[] { })})})})}),
497         new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }),
498         new Tree(null, "a", new Tree[] { }),
499         new Tree(null, "n", new Tree[] { }),
500         new Tree(null, "g", new Tree[] { }),
501         new Tree(null, "e", new Tree[] { })})}),
502         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
503         new Tree(null, "c", new Tree[] { })})}),
504         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "-", new Tree[] { })})}),
505         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
506         new Tree(null, "c", new Tree[] { })})})})})})})}),
507         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })}),
508         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
509         new Tree(null, "o", new Tree[] { }),
510         new Tree(null, "r", new Tree[] { }),
511         new Tree(null, "d", new Tree[] { })})})})}),
512         new Tree(null, null, new Tree[] { new Tree(null, "n", new Tree[] { }),
513         new Tree(null, "o", new Tree[] { }),
514         new Tree(null, "n", new Tree[] { }),
515         new Tree(null, "T", new Tree[] { }),
516         new Tree(null, "e", new Tree[] { }),
517         new Tree(null, "r", new Tree[] { }),
518         new Tree(null, "m", new Tree[] { }),
519         new Tree(null, "i", new Tree[] { }),
520         new Tree(null, "n", new Tree[] { }),
521         new Tree(null, "a", new Tree[] { }),
522         new Tree(null, "l", new Tree[] { })})}),
523         new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "q", new Tree[] { }),
524         new Tree(null, "u", new Tree[] { }),
525         new Tree(null, "o", new Tree[] { }),
526         new Tree(null, "t", new Tree[] { }),
527         new Tree(null, "e", new Tree[] { }),
528         new Tree(null, "d", new Tree[] { })})})})}),
529         new Tree(null, null, new Tree[] { new Tree(null, "l", new Tree[] { }),
530         new Tree(null, "i", new Tree[] { }),
531         new Tree(null, "t", new Tree[] { }),
532         new Tree(null, "e", new Tree[] { }),
533         new Tree(null, "r", new Tree[] { }),
534         new Tree(null, "a", new Tree[] { }),
535         new Tree(null, "l", new Tree[] { })})}),
536         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { }),
537         new Tree(null, ")", new Tree[] { })})})})}),
538         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "{", new Tree[] { })})}),
539         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
540         new Tree(null, "e", new Tree[] { }),
541         new Tree(null, "q", new Tree[] { }),
542         new Tree(null, "u", new Tree[] { }),
543         new Tree(null, "e", new Tree[] { }),
544         new Tree(null, "n", new Tree[] { }),
545         new Tree(null, "c", new Tree[] { }),
546         new Tree(null, "e", new Tree[] { })})}),
547         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "}", new Tree[] { })})})})}),
548         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
549         new Tree(null, "s", new Tree[] { })})})}),
550         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "[", new Tree[] { })})}),
551         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }),
552         new Tree(null, "a", new Tree[] { }),
553         new Tree(null, "n", new Tree[] { }),
554         new Tree(null, "g", new Tree[] { }),
555         new Tree(null, "e", new Tree[] { })})})})})})})})}),
556         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "]", new Tree[] { })})})})}),
557         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "[", new Tree[] { }),
558         new Tree(null, "~", new Tree[] { })})}),
559         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }),
560         new Tree(null, "a", new Tree[] { }),
561         new Tree(null, "n", new Tree[] { }),
562         new Tree(null, "g", new Tree[] { }),
563         new Tree(null, "e", new Tree[] { })})})})})})})})}),
564         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "]", new Tree[] { })})})})}),
565         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { })})}),
566         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "q", new Tree[] { }),
567         new Tree(null, "u", new Tree[] { }),
568         new Tree(null, "o", new Tree[] { }),
569         new Tree(null, "t", new Tree[] { }),
570         new Tree(null, "e", new Tree[] { }),
571         new Tree(null, "d", new Tree[] { })})})})}),
572         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
573         new Tree(null, "s", new Tree[] { })})})}),
574         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "!", new Tree[] { })})}),
575         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
576         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
577         new Tree(null, "s", new Tree[] { })})})}),
578         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
579         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
580         new Tree(null, "s", new Tree[] { })})}),
581         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { }),
582         new Tree(null, "*", new Tree[] { })})})})})}),
583         new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
584         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
585         new Tree(null, "s", new Tree[] { })})}),
586         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { })})})})})})})})})}),
587         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
588         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { }),
589         new Tree(null, "/", new Tree[] { })})}),
590         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
591         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
592         new Tree(null, "s", new Tree[] { })})})}),
593         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
594         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
595         new Tree(null, "s", new Tree[] { })})}),
596         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { }),
597         new Tree(null, "+", new Tree[] { })})})})})}),
598         new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
599         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
600         new Tree(null, "s", new Tree[] { })})}),
601         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { })})})})})})})})})}),
602         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
603         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { }),
604         new Tree(null, "/", new Tree[] { })})}),
605         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
606         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
607         new Tree(null, "s", new Tree[] { })})})}),
608         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
609         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "?", new Tree[] { })})})})}),
610         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
611         new Tree(null, "s", new Tree[] { })})})}),
612         new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { })})}),
613         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
614         new Tree(null, "o", new Tree[] { }),
615         new Tree(null, "r", new Tree[] { }),
616         new Tree(null, "d", new Tree[] { })})}),
617         new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ")", new Tree[] { })})})})}),
618         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
619         new Tree(null, "s", new Tree[] { })})})})}),
620         new Tree(null, null, new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { })})}),
621         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
622         new Tree(null, "l", new Tree[] { }),
623         new Tree(null, "t", new Tree[] { }),
624         new Tree(null, "e", new Tree[] { }),
625         new Tree(null, "r", new Tree[] { }),
626         new Tree(null, "n", new Tree[] { }),
627         new Tree(null, "a", new Tree[] { }),
628         new Tree(null, "t", new Tree[] { }),
629         new Tree(null, "i", new Tree[] { }),
630         new Tree(null, "v", new Tree[] { }),
631         new Tree(null, "e", new Tree[] { }),
632         new Tree(null, "s", new Tree[] { })})}),
633         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ")", new Tree[] { })})})})}),
634         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
635         new Tree(null, "s", new Tree[] { })})})})})})}),
636         new Tree(null, "!::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { })}),
637         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, " ", new Tree[] { })})})})}),
638         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "/", new Tree[] { }),
639         new Tree(null, "/", new Tree[] { })})}),
640         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { new Tree(null, "[~", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "\n", new Tree[] { })})})})})})})})})}),
641         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})})})}),
642         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})})})}),
643         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\r", new Tree[] { })})})})})})})}),
644         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
645         new Tree(null, "o", new Tree[] { }),
646         new Tree(null, "r", new Tree[] { }),
647         new Tree(null, "d", new Tree[] { })}),
648         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "++", new Tree[] { new Tree(null, "[", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "-", new Tree[] { new Tree(null, "a", new Tree[] { }),
649         new Tree(null, "z", new Tree[] { })}),
650         new Tree(null, "-", new Tree[] { new Tree(null, "A", new Tree[] { }),
651         new Tree(null, "Z", new Tree[] { })}),
652         new Tree(null, "-", new Tree[] { new Tree(null, "0", new Tree[] { }),
653         new Tree(null, "9", new Tree[] { })}),
654         new Tree(null, "range", new Tree[] { new Tree(null, "_", new Tree[] { })})})})})})})})})}),
655         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "q", new Tree[] { }),
656         new Tree(null, "u", new Tree[] { }),
657         new Tree(null, "o", new Tree[] { }),
658         new Tree(null, "t", new Tree[] { }),
659         new Tree(null, "e", new Tree[] { }),
660         new Tree(null, "d", new Tree[] { })}),
661         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\"", new Tree[] { })})}),
662         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "[~", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "\"", new Tree[] { })}),
663         new Tree(null, "range", new Tree[] { new Tree(null, "\\", new Tree[] { })})})})})}),
664         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
665         new Tree(null, "s", new Tree[] { }),
666         new Tree(null, "c", new Tree[] { }),
667         new Tree(null, "a", new Tree[] { }),
668         new Tree(null, "p", new Tree[] { }),
669         new Tree(null, "e", new Tree[] { }),
670         new Tree(null, "d", new Tree[] { })})})})})})})})})})})})})}),
671         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\"", new Tree[] { })})})})}),
672         new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\"", new Tree[] { }),
673         new Tree(null, "\"", new Tree[] { })})})})}),
674         new Tree(null, "", new Tree[] { })})})})}),
675         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
676         new Tree(null, "s", new Tree[] { }),
677         new Tree(null, "c", new Tree[] { }),
678         new Tree(null, "a", new Tree[] { }),
679         new Tree(null, "p", new Tree[] { }),
680         new Tree(null, "e", new Tree[] { }),
681         new Tree(null, "d", new Tree[] { })}),
682         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\\", new Tree[] { }),
683         new Tree(null, "n", new Tree[] { })})})})}),
684         new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})}),
685         new Tree(null, "=>", new Tree[] { new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\\", new Tree[] { }),
686         new Tree(null, "r", new Tree[] { })})})})}),
687         new Tree(null, null, new Tree[] { new Tree(null, "\r", new Tree[] { })})}),
688         new Tree(null, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\\", new Tree[] { })})}),
689         new Tree(null, "[~", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "n", new Tree[] { })}),
690         new Tree(null, "range", new Tree[] { new Tree(null, "r", new Tree[] { })})})})})})})})})})}),
691         new Tree(null, null, new Tree[] { })})
692         // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED
693         ;
694 }
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731