eliminated Parser.Table.Top
[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 StringWalker {
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     public /*private*/ static HashSet<Element> dropAll = new HashSet<Element>();
19
20     // Statics //////////////////////////////////////////////////////////////////////////////
21
22     private static final Union SELF = new Union("()");
23
24     ////////////////////////////////////////////////////////////////////////////////
25
26     private Union g;
27     private HashMap<String,Union> nt;
28     private int anon = 0;
29     private String startSymbol;
30     private boolean strings;
31
32     private Element  set(Range.Set r) { if (strings) throw new Error(); return CharToken.set(r); }
33     private Element  string(String s) { return strings ? StringToken.string(s) : CharToken.string(s); }
34     private Atom     leftBrace()      { return strings ? StringToken.leftBrace : CharToken.leftBrace; }
35     private Atom     rightBrace()     { return strings ? StringToken.rightBrace : CharToken.rightBrace; }
36
37     public MetaGrammar() { this("s", false); }
38     public MetaGrammar(String s) { this(s, false); }
39     public MetaGrammar(String s, boolean strings) { this.strings = strings; done(s); }
40     public Union done() { return done("s"); }
41     public Union done(String str) {
42         Union ret = g;
43         g = new Union(str);
44         startSymbol = str;
45         nt = new HashMap<String,Union>();
46         dropAll = new HashSet<Element>();
47         dropAll.add(leftBrace());
48         dropAll.add(rightBrace());
49         nt.put(str, g);
50         return ret;
51     }
52
53
54     // MetaGrammar //////////////////////////////////////////////////////////////////////////////
55
56     public Union       nonTerminal(String str) { return nonTerminal(str, null, false, false); }
57     public Union       nonTerminal(String str, PreSequence[][] s, boolean synthetic, boolean dropAll) {
58         Union n = str.equals(startSymbol) ? g : nt.get(str);
59         if (n == null) nt.put(str, n = new Union(str, synthetic));
60         if (dropAll) this.dropAll.add(n);
61         if (s==null) return n;
62         HashSet<Sequence> seqs = new HashSet<Sequence>();
63         for(int i=0; i<s.length; i++) {
64             if (s[i]==null) continue;
65             HashSet<Sequence> temp = new HashSet<Sequence>();
66             for(PreSequence pre : s[i]) {
67                 pre.not.addAll(seqs);
68                 Sequence seq = pre.buildSequence(n, false, dropAll);
69                 temp.add(seq);
70                 n.add(seq);
71             }
72             seqs.addAll(temp);
73         }
74         return n;
75     }
76
77     public String string(Iterable<Tree<String>> children) {
78         String ret = "";
79         for(Tree<String> t : children) ret += string(t);
80         return ret;
81     }
82     public String string(Tree<String> tree) {
83         String ret = "";
84         if (tree.head()!=null) ret += tree.head();
85         ret += string(tree.children());
86         return ret;
87     }
88
89     public Object walk(Tree<String> tree) {
90         String head = tree.head();
91         if (tree.numChildren()==0) return super.walk(tree);
92         if      ("\\n".equals(head)) return new Character('\n');
93         else if ("\\r".equals(head)) return new Character('\r');
94         else if ("grammar".equals(head)) { for(Tree<String> t : tree.children()) walk(t); return this; }
95         else if ("*".equals(head))  return Repeat.many0((Element)walk(tree.child(0)));
96         else if ("+".equals(head))  return Repeat.many1((Element)walk(tree.child(0)));
97         else if ("+/".equals(head)) return Repeat.many1((Element)walk(tree.child(0)), (Element)walk(tree.child(1)));
98         else if ("*/".equals(head)) return Repeat.many0((Element)walk(tree.child(0)), (Element)walk(tree.child(1)));
99         else if ("**".equals(head)) return Repeat.maximal0((Element)walk(tree.child(0)));
100         else if ("++".equals(head)) return Repeat.maximal1((Element)walk(tree.child(0)));
101         else if ("?".equals(head))  return Repeat.maybe((Element)walk(tree.child(0)));
102         else if ("&".equals(head))
103             return ((PreSequence)walk(tree,0)).and(new PreSequence((Element[])Reflection.lub((Object[])walk(tree, 1)), null).buildSequence(null, true, false));
104         else if ("&~".equals(head))
105             return ((PreSequence)walk(tree,0)).not(new PreSequence((Element[])Reflection.lub((Object[])walk(tree, 1)), null).buildSequence(null, true, false));
106         else if ("epsilon".equals(head)) return Union.epsilon;
107         else if ("()".equals(head)) return Union.epsilon;
108         else if (")".equals(head)) return SELF;
109         else if ("nonTerminal".equals(head)) return nonTerminal(string(tree.child(0)), null, false, false);
110         else if ("::=".equals(head)) return nonTerminal(string(tree.child(0)), (PreSequence[][])walk(tree, 1), false, false);
111         else if ("!::=".equals(head)) return nonTerminal(string(tree.child(0)), (PreSequence[][])walk(tree, 1), false, true);
112         else if ("(".equals(head)) return nonTerminal("anon"+(anon++), (PreSequence[][])walk(tree, 0), false, false);
113         else if ("literal".equals(head)) { Element ret = string(string(tree.child(0))); dropAll.add(ret); return ret; }
114         else if ("-".equals(head)) return new Range(walk(tree, 0).toString().charAt(0), walk(tree,1).toString().charAt(0));
115         else if ("range".equals(head)) return new Range(walk(tree, 0).toString().charAt(0), walk(tree,0).toString().charAt(0));
116         else if ("gram".equals(head)) return walk(tree, 1);
117         else if ("=>".equals(head)) { PreSequence p = (PreSequence)walk(tree, 0); p.tag = string(tree.child(1)); return p; }
118         else if ("psy".equals(head)) return (PreSequence)walk(tree, 0);
119         else if ("psyl".equals(head)) throw new Error("not supported");
120         else if ("psyr".equals(head)) { PreSequence p = (PreSequence)walk(tree, 0); p.noFollow = (Element)walk(tree, 1); return p; }
121         else if ("psylr".equals(head)) throw new Error("not supported");
122         else if ("/".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1));
123         else if ("~".equals(head))
124             return new Atom.Invert(new Atom.Infer((Element)walk(tree, 0)));
125         else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree, 0));
126         else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree, 0));
127         else if ("qprod".equals(head)) {
128             String s = string(tree.child(0));
129             return new PreSequence(new Element[] { string(s) }, s, new boolean[] { true });
130         } else if ("ps2".equals(head)) {
131             Object[] o1 = (Object[])walk(tree, 0);
132             String s = string(tree.child(1));
133             Object[] o2 = (Object[])walk(tree, 2);
134             if (o1==null) o1 = new Object[0];
135             if (o2==null) o2 = new Object[0];
136             Object[] o3 = new Object[o1.length + o2.length + 1];
137             System.arraycopy(o1, 0, o3, 0, o1.length);
138             o3[o1.length] = string(s);
139             System.arraycopy(o2, 0, o3, o1.length+1, o2.length);
140             PreSequence ret = new PreSequence(o3, s);
141             ret.drops[o1.length] = o3.length>1;
142             return ret;
143         } else if ("[".equals(head) || "[~".equals(head)) {
144             boolean positive = "[".equals(head);
145             Range[] rr = (Range[])walk(tree, 0);
146             Range.Set ret = positive ? new Range.Set() : new Range.Set(new Range(true, true));
147             if (rr != null)
148                 for(Range r : rr)
149                     if (positive) ret.add(r);
150                     else          ret.remove(r);
151             return set(ret);
152         }
153         else return super.walk(tree);
154     }
155
156
157     public Object walk(String tag, Object[] argo) {
158         if (argo.length==0) return super.walk(tag, argo);
159         if (argo==null) return tag;
160         if (tag==null || "".equals(tag)) return argo;
161         return super.walk(tag, argo);
162     }
163
164     //////////////////////////////////////////////////////////////////////////////
165
166     public class PreSequence {
167         public Element noFollow = null;
168         public final HashSet<Sequence> and  = new HashSet<Sequence>();
169         public final HashSet<Sequence> not  = new HashSet<Sequence>();
170         public /*final*/ String tag;
171         public final Object[] o;
172
173         public PreSequence sparse(Object e) {
174             Object[] ret;
175             boolean[] drops;
176             if (o.length <= 1) {
177                 ret = o;
178                 drops = new boolean[this.drops.length];
179                 System.arraycopy(this.drops, 0, drops, 0, this.drops.length);
180             } else {
181                 ret = new Object[o.length * 2 - 1];
182                 drops = new boolean[o.length * 2 - 1];
183                 for(int i=0; i<o.length; i++) {
184                     Object oi = o[i];
185                     ret[i*2]   = oi;
186                     drops[i*2] = this.drops[i];
187                     if (i*2+1<ret.length) {
188                         ret[i*2+1] = e;
189                         drops[i*2+1] = true;
190                     }
191                 }
192             }
193             PreSequence p = new PreSequence(ret, tag, drops);
194             p.not.addAll(not);
195             p.and.addAll(and);
196             return p;
197         }
198
199         public PreSequence not(Sequence s) { not.add(s); return this; }
200         public PreSequence and(Sequence s) { and.add(s); return this; }
201
202         boolean[] drops = null;
203         public PreSequence(Object o) { this(new Object[] { o }, null); }
204         public PreSequence(Object[] o) { this(o, null); }
205         public PreSequence(Object[] o, String tag) { this(o, tag, null); }
206         public PreSequence(Object[] o, String tag, boolean[] drops) {
207             this.o = o;
208             this.tag = tag;
209             this.drops = drops==null ? new boolean[o.length] : drops;
210         }
211
212         public Union    buildUnion() {
213             Union u = new Union("???");
214             u.add(buildSequence(u));
215             return u;
216         }
217         public Sequence buildSequence(Union u) { return buildSequence(u, false, false); }
218         public Sequence buildSequence(Union u, boolean lame, boolean dropAll) {
219             for(Sequence s : and) u.add(s);
220             for(Sequence s : not) u.add(s);
221             HashSet<Sequence> set = new HashSet<Sequence>();
222             Element[] o2 = o==null ? new Element[0] : new Element[o.length];
223             int nonDrop = 0;
224             if (o != null) {
225                 int j = 0;
226                 for(int i=0; i<o.length; i++) {
227                     Object oi = o[i];
228                     if (oi==SELF)                    o2[j] = u.new Subset("(("+u+"))", set);
229                     else                             o2[j] = (Element)oi;
230
231                     if (MetaGrammar.dropAll.contains(o2[j])) drops[j] = true;
232                     nonDrop += drops[j] ? 0 : 1;
233                     o2[j] = o2[j];
234                     j++;
235                 }
236             }
237             Element[] expansion = o2;
238             Sequence ret = null;
239             if (dropAll || lame) ret = Sequence.drop(expansion, and, not, lame);
240             else if (tag!=null) ret = Sequence.rewritingSequence(tag, expansion, drops, and, not);
241             else {
242                 int idx = -1;
243                 for(int i=0; i<expansion.length; i++)
244                     if (!drops[i])
245                         if (idx==-1) idx = i;
246                         else throw new Error("multiple non-dropped elements in sequence: " + Sequence.drop(expansion,null,null,false));
247                 if (idx != -1) ret = Sequence.singleton(expansion, idx, and, not);
248                 else           ret = Sequence.drop(expansion, and, not, false);
249             }
250             set.add(ret);
251             if (this.noFollow != null) ret.noFollow = this.noFollow;
252             return ret;
253         }
254     }
255
256     public static void main(String[] args) throws Exception {
257         if (args.length != 2) {
258             System.err.println("usage: java " + MetaGrammar.class.getName() + " grammarfile.g com.yourdomain.package.ClassName");
259             System.exit(-1);
260         }
261
262         String className   = args[1].substring(args[1].lastIndexOf('.')+1);
263         String packageName = args[1].substring(0, args[1].lastIndexOf('.'));
264         String fileName    = packageName.replace('.', '/') + "/" + className + ".java";
265
266         BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
267         StringBuffer out = new StringBuffer();
268
269         boolean skip = false;
270         for(String s = br.readLine(); s != null; s = br.readLine()) {
271             if (s.indexOf("DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED") != -1 && s.indexOf("\"")==-1) skip = true;
272             if (s.indexOf("DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED") != -1 && s.indexOf("\"")==-1) break;
273             if (!skip) out.append(s+"\n");
274         }
275
276         out.append("\n        // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
277         new CharToken.CharToStringParser(MetaGrammar.make()).parse1(new CharToken.Stream(new InputStreamReader(new FileInputStream(args[0])))).toJava(out);
278         out.append("\n        // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
279
280         for(String s = br.readLine(); s != null; s = br.readLine()) out.append(s+"\n");
281         br.close();
282
283         OutputStream os = new FileOutputStream(fileName);
284         PrintWriter p = new PrintWriter(new OutputStreamWriter(os));
285         p.println(out.toString());
286         p.flush();
287         os.close();
288     }
289
290     public static final Tree meta =
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334         // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED
335 new Tree(null, "gram", new Tree[] { new Tree(null, null, new Tree[] { }),
336         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[] { })}),
337         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
338         new Tree(null, "s", new Tree[] { })})}),
339         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
340         new Tree(null, "r", new Tree[] { }),
341         new Tree(null, "a", new Tree[] { }),
342         new Tree(null, "m", new Tree[] { }),
343         new Tree(null, "m", new Tree[] { }),
344         new Tree(null, "a", new Tree[] { }),
345         new Tree(null, "r", new Tree[] { })})}),
346         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
347         new Tree(null, "s", new Tree[] { })})})})})}),
348         new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
349         new Tree(null, "r", new Tree[] { }),
350         new Tree(null, "a", new Tree[] { }),
351         new Tree(null, "m", new Tree[] { })})})})})}),
352         new Tree(null, "!::=", 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, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { })})})})})})}),
355         new Tree(null, "psy", 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[] { })})})}),
356         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "/", new Tree[] { }),
357         new Tree(null, "/", new Tree[] { })})}),
358         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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, "[", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "\n", new Tree[] { })})})})})})})})})})})}),
359         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})}),
360         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
361         new Tree(null, "s", new Tree[] { })})})})})})})})}),
362         new Tree(null, "!::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
363         new Tree(null, "p", new Tree[] { })}),
364         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { })})})})})})})})})}),
365         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
366         new Tree(null, "r", new Tree[] { }),
367         new Tree(null, "a", new Tree[] { }),
368         new Tree(null, "m", new Tree[] { }),
369         new Tree(null, "m", new Tree[] { }),
370         new Tree(null, "a", new Tree[] { }),
371         new Tree(null, "r", new Tree[] { })}),
372         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { })})}),
373         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
374         new Tree(null, "s", new Tree[] { })})})})})})}),
375         new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
376         new Tree(null, "r", new Tree[] { }),
377         new Tree(null, "a", new Tree[] { }),
378         new Tree(null, "m", new Tree[] { }),
379         new Tree(null, "m", new Tree[] { }),
380         new Tree(null, "a", new Tree[] { }),
381         new Tree(null, "r", new Tree[] { })})})})})}),
382         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { })}),
383         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { }),
384         new Tree(null, "o", new Tree[] { }),
385         new Tree(null, "r", new Tree[] { }),
386         new Tree(null, "d", new Tree[] { })})})}),
387         new Tree(null, null, new Tree[] { new Tree(null, ":", new Tree[] { }),
388         new Tree(null, ":", new Tree[] { }),
389         new Tree(null, "=", new Tree[] { })}),
390         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
391         new Tree(null, "l", new Tree[] { }),
392         new Tree(null, "t", new Tree[] { }),
393         new Tree(null, "e", new Tree[] { }),
394         new Tree(null, "r", new Tree[] { }),
395         new Tree(null, "n", new Tree[] { }),
396         new Tree(null, "a", new Tree[] { }),
397         new Tree(null, "t", new Tree[] { }),
398         new Tree(null, "i", new Tree[] { }),
399         new Tree(null, "v", new Tree[] { }),
400         new Tree(null, "e", new Tree[] { }),
401         new Tree(null, "s", new Tree[] { })})})})}),
402         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
403         new Tree(null, "s", new Tree[] { })})})})}),
404         new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { }),
405         new Tree(null, "o", new Tree[] { }),
406         new Tree(null, "r", new Tree[] { }),
407         new Tree(null, "d", new Tree[] { })})})}),
408         new Tree(null, null, new Tree[] { new Tree(null, "!", new Tree[] { }),
409         new Tree(null, ":", new Tree[] { }),
410         new Tree(null, ":", new Tree[] { }),
411         new Tree(null, "=", new Tree[] { })}),
412         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
413         new Tree(null, "l", new Tree[] { }),
414         new Tree(null, "t", new Tree[] { }),
415         new Tree(null, "e", new Tree[] { }),
416         new Tree(null, "r", new Tree[] { }),
417         new Tree(null, "n", new Tree[] { }),
418         new Tree(null, "a", new Tree[] { }),
419         new Tree(null, "t", new Tree[] { }),
420         new Tree(null, "i", new Tree[] { }),
421         new Tree(null, "v", new Tree[] { }),
422         new Tree(null, "e", new Tree[] { }),
423         new Tree(null, "s", new Tree[] { })})})})}),
424         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
425         new Tree(null, "s", new Tree[] { })})})})})})})}),
426         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
427         new Tree(null, "l", new Tree[] { }),
428         new Tree(null, "t", new Tree[] { }),
429         new Tree(null, "e", new Tree[] { }),
430         new Tree(null, "r", new Tree[] { }),
431         new Tree(null, "n", new Tree[] { }),
432         new Tree(null, "a", new Tree[] { }),
433         new Tree(null, "t", new Tree[] { }),
434         new Tree(null, "i", new Tree[] { }),
435         new Tree(null, "v", new Tree[] { }),
436         new Tree(null, "e", new Tree[] { }),
437         new Tree(null, "s", new Tree[] { })}),
438         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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, "psy", 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[] { }),
439         new Tree(null, "o", new Tree[] { }),
440         new Tree(null, "n", new Tree[] { }),
441         new Tree(null, "j", new Tree[] { }),
442         new Tree(null, "u", new Tree[] { }),
443         new Tree(null, "n", new Tree[] { }),
444         new Tree(null, "c", new Tree[] { }),
445         new Tree(null, "t", new Tree[] { }),
446         new Tree(null, "s", new Tree[] { })})}),
447         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { }),
448         new Tree(null, "s", new Tree[] { })})}),
449         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "|", new Tree[] { })})}),
450         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
451         new Tree(null, "s", new Tree[] { })})})})})})})})})})})})})})})}),
452         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { }),
453         new Tree(null, "s", new Tree[] { })})}),
454         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ">", new Tree[] { })})}),
455         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
456         new Tree(null, "s", new Tree[] { })})})})})})})})})})})})})})})}),
457         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "c", new Tree[] { }),
458         new Tree(null, "o", new Tree[] { }),
459         new Tree(null, "n", new Tree[] { }),
460         new Tree(null, "j", new Tree[] { }),
461         new Tree(null, "u", new Tree[] { }),
462         new Tree(null, "n", new Tree[] { }),
463         new Tree(null, "c", new Tree[] { }),
464         new Tree(null, "t", new Tree[] { }),
465         new Tree(null, "s", new Tree[] { })}),
466         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { }),
467         new Tree(null, "e", new Tree[] { }),
468         new Tree(null, "q", new Tree[] { }),
469         new Tree(null, "u", new Tree[] { }),
470         new Tree(null, "e", new Tree[] { }),
471         new Tree(null, "n", new Tree[] { }),
472         new Tree(null, "c", new Tree[] { }),
473         new Tree(null, "e", new Tree[] { })})})})})}),
474         new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { }),
475         new Tree(null, "e", new Tree[] { }),
476         new Tree(null, "q", new Tree[] { }),
477         new Tree(null, "u", new Tree[] { }),
478         new Tree(null, "e", new Tree[] { }),
479         new Tree(null, "n", new Tree[] { }),
480         new Tree(null, "c", new Tree[] { }),
481         new Tree(null, "e", new Tree[] { })})})}),
482         new Tree(null, null, new Tree[] { new Tree(null, "&", new Tree[] { })}),
483         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[] { })})}),
484         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
485         new Tree(null, "s", new Tree[] { })})})})})}),
486         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
487         new Tree(null, "s", new Tree[] { })})})})}),
488         new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { }),
489         new Tree(null, "e", new Tree[] { }),
490         new Tree(null, "q", new Tree[] { }),
491         new Tree(null, "u", new Tree[] { }),
492         new Tree(null, "e", new Tree[] { }),
493         new Tree(null, "n", new Tree[] { }),
494         new Tree(null, "c", new Tree[] { }),
495         new Tree(null, "e", new Tree[] { })})})}),
496         new Tree(null, null, new Tree[] { new Tree(null, "&", new Tree[] { }),
497         new Tree(null, "~", new Tree[] { })}),
498         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[] { })})}),
499         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
500         new Tree(null, "s", new Tree[] { })})})})})}),
501         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
502         new Tree(null, "s", new Tree[] { })})})})})})})}),
503         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
504         new Tree(null, "s", new Tree[] { })}),
505         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { })})}),
506         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
507         new Tree(null, "s", new Tree[] { })})})})})})}),
508         new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
509         new Tree(null, "s", new Tree[] { })})}),
510         new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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, "psy", 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[] { })})}),
511         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
512         new Tree(null, "s", new Tree[] { })})})}),
513         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
514         new Tree(null, "s", new Tree[] { })})})})})})})})})}),
515         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { })})}),
516         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "q", new Tree[] { }),
517         new Tree(null, "u", new Tree[] { }),
518         new Tree(null, "o", new Tree[] { }),
519         new Tree(null, "t", new Tree[] { }),
520         new Tree(null, "e", new Tree[] { }),
521         new Tree(null, "d", new Tree[] { })})}),
522         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, "psy", 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[] { }),
523         new Tree(null, "s", new Tree[] { })})}),
524         new Tree(null, "+/", new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}),
525         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
526         new Tree(null, "s", new Tree[] { })})})})})})})})})})})})})}),
527         new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
528         new Tree(null, "s", new Tree[] { }),
529         new Tree(null, "2", new Tree[] { })})})})})}),
530         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
531         new Tree(null, "s", new Tree[] { }),
532         new Tree(null, "y", new Tree[] { })}),
533         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { }),
534         new Tree(null, "s", new Tree[] { })})})})})}),
535         new Tree(null, "psy", new Tree[] { new Tree(null, "ps2", 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[] { }),
536         new Tree(null, "s", new Tree[] { })})}),
537         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
538         new Tree(null, "p", new Tree[] { })})})}),
539         new Tree(null, null, new Tree[] { new Tree(null, "/", new Tree[] { })}),
540         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
541         new Tree(null, "s", new Tree[] { })})}),
542         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})})})})})}),
543         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
544         new Tree(null, "s", new Tree[] { }),
545         new Tree(null, "x", new Tree[] { })}),
546         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
547         new Tree(null, "s", new Tree[] { }),
548         new Tree(null, "y", new Tree[] { })})})})})}),
549         new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
550         new Tree(null, "s", new Tree[] { }),
551         new Tree(null, "y", new Tree[] { })})}),
552         new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { })})}),
553         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "<", new Tree[] { }),
554         new Tree(null, "-", new Tree[] { })})}),
555         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
556         new Tree(null, "s", new Tree[] { }),
557         new Tree(null, "y", new Tree[] { })})})})}),
558         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
559         new Tree(null, "s", new Tree[] { })})})})}),
560         new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
561         new Tree(null, "s", new Tree[] { }),
562         new Tree(null, "y", new Tree[] { }),
563         new Tree(null, "l", new Tree[] { })})}),
564         new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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, "p", new Tree[] { }),
565         new Tree(null, "s", new Tree[] { }),
566         new Tree(null, "y", new Tree[] { })})}),
567         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "-", new Tree[] { }),
568         new Tree(null, ">", new Tree[] { })})}),
569         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
570         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
571         new Tree(null, "s", new Tree[] { })})})})}),
572         new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
573         new Tree(null, "s", new Tree[] { }),
574         new Tree(null, "y", new Tree[] { }),
575         new Tree(null, "r", new Tree[] { })})}),
576         new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { })})}),
577         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "<", new Tree[] { }),
578         new Tree(null, "-", new Tree[] { })})}),
579         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
580         new Tree(null, "s", new Tree[] { }),
581         new Tree(null, "y", new Tree[] { })})}),
582         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "-", new Tree[] { }),
583         new Tree(null, ">", new Tree[] { })})}),
584         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
585         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
586         new Tree(null, "s", new Tree[] { })})})})}),
587         new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }),
588         new Tree(null, "s", new Tree[] { }),
589         new Tree(null, "y", new Tree[] { }),
590         new Tree(null, "l", new Tree[] { }),
591         new Tree(null, "r", new Tree[] { })})})})})}),
592         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
593         new Tree(null, "e", new Tree[] { }),
594         new Tree(null, "q", new Tree[] { }),
595         new Tree(null, "u", new Tree[] { }),
596         new Tree(null, "e", new Tree[] { }),
597         new Tree(null, "n", new Tree[] { }),
598         new Tree(null, "c", new Tree[] { }),
599         new Tree(null, "e", new Tree[] { })}),
600         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
601         new Tree(null, "u", new Tree[] { }),
602         new Tree(null, "o", new Tree[] { }),
603         new Tree(null, "t", new Tree[] { }),
604         new Tree(null, "e", new Tree[] { }),
605         new Tree(null, "d", new Tree[] { })})})})})}),
606         new Tree(null, null, new Tree[] { new Tree(null, "q", new Tree[] { }),
607         new Tree(null, "p", new Tree[] { }),
608         new Tree(null, "r", new Tree[] { }),
609         new Tree(null, "o", new Tree[] { }),
610         new Tree(null, "d", new Tree[] { })})})}),
611         new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { }),
612         new Tree(null, "s", new Tree[] { }),
613         new Tree(null, "x", new Tree[] { })})})})})}),
614         new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { }),
615         new Tree(null, "s", new Tree[] { }),
616         new Tree(null, "x", new Tree[] { })})})}),
617         new Tree(null, null, new Tree[] { new Tree(null, "=", new Tree[] { }),
618         new Tree(null, ">", new Tree[] { })}),
619         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, "psy", 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[] { }),
620         new Tree(null, "o", new Tree[] { }),
621         new Tree(null, "r", new Tree[] { }),
622         new Tree(null, "d", new Tree[] { })})})})})}),
623         new Tree(null, "psy", 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[] { }),
624         new Tree(null, "u", new Tree[] { }),
625         new Tree(null, "o", new Tree[] { }),
626         new Tree(null, "t", new Tree[] { }),
627         new Tree(null, "e", new Tree[] { }),
628         new Tree(null, "d", new Tree[] { })})})})})})})})})})}),
629         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
630         new Tree(null, "s", new Tree[] { })})})})})})})}),
631         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
632         new Tree(null, "c", new Tree[] { })}),
633         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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, "-", new Tree[] { })}),
634         new Tree(null, "range", new Tree[] { new Tree(null, "]", new Tree[] { })}),
635         new Tree(null, "range", new Tree[] { new Tree(null, "\\", new Tree[] { })})})})})})})}),
636         new Tree(null, "psy", 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[] { }),
637         new Tree(null, "s", new Tree[] { }),
638         new Tree(null, "c", new Tree[] { }),
639         new Tree(null, "a", new Tree[] { }),
640         new Tree(null, "p", new Tree[] { }),
641         new Tree(null, "e", new Tree[] { }),
642         new Tree(null, "d", new Tree[] { })})})})})})})})}),
643         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }),
644         new Tree(null, "a", new Tree[] { }),
645         new Tree(null, "n", new Tree[] { }),
646         new Tree(null, "g", new Tree[] { }),
647         new Tree(null, "e", new Tree[] { })}),
648         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
649         new Tree(null, "c", new Tree[] { })})})})})}),
650         new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }),
651         new Tree(null, "a", new Tree[] { }),
652         new Tree(null, "n", new Tree[] { }),
653         new Tree(null, "g", new Tree[] { }),
654         new Tree(null, "e", new Tree[] { })})}),
655         new Tree(null, "psy", new Tree[] { new Tree(null, "ps2", 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[] { }),
656         new Tree(null, "c", new Tree[] { })})})}),
657         new Tree(null, null, new Tree[] { new Tree(null, "-", new Tree[] { })}),
658         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
659         new Tree(null, "c", new Tree[] { })})})})})})})})}),
660         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })}),
661         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
662         new Tree(null, "o", new Tree[] { }),
663         new Tree(null, "r", new Tree[] { }),
664         new Tree(null, "d", new Tree[] { })})})})})}),
665         new Tree(null, null, new Tree[] { new Tree(null, "n", new Tree[] { }),
666         new Tree(null, "o", new Tree[] { }),
667         new Tree(null, "n", new Tree[] { }),
668         new Tree(null, "T", new Tree[] { }),
669         new Tree(null, "e", new Tree[] { }),
670         new Tree(null, "r", new Tree[] { }),
671         new Tree(null, "m", new Tree[] { }),
672         new Tree(null, "i", new Tree[] { }),
673         new Tree(null, "n", new Tree[] { }),
674         new Tree(null, "a", new Tree[] { }),
675         new Tree(null, "l", new Tree[] { })})}),
676         new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
677         new Tree(null, "u", new Tree[] { }),
678         new Tree(null, "o", new Tree[] { }),
679         new Tree(null, "t", 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, "l", new Tree[] { }),
683         new Tree(null, "i", new Tree[] { }),
684         new Tree(null, "t", new Tree[] { }),
685         new Tree(null, "e", new Tree[] { }),
686         new Tree(null, "r", new Tree[] { }),
687         new Tree(null, "a", new Tree[] { }),
688         new Tree(null, "l", new Tree[] { })})}),
689         new Tree(null, "psy", new Tree[] { new Tree(null, "ps2", new Tree[] { new Tree(null, null, new Tree[] { }),
690         new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { }),
691         new Tree(null, ")", new Tree[] { })}),
692         new Tree(null, null, new Tree[] { })})}),
693         new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", new Tree[] { new Tree(null, null, new Tree[] { }),
694         new Tree(null, null, new Tree[] { new Tree(null, "{", new Tree[] { })}),
695         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
696         new Tree(null, "e", new Tree[] { }),
697         new Tree(null, "q", new Tree[] { }),
698         new Tree(null, "u", new Tree[] { }),
699         new Tree(null, "e", new Tree[] { }),
700         new Tree(null, "n", new Tree[] { }),
701         new Tree(null, "c", new Tree[] { }),
702         new Tree(null, "e", new Tree[] { })})}),
703         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "}", new Tree[] { })})})})}),
704         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
705         new Tree(null, "s", new Tree[] { })})})})}),
706         new Tree(null, "psy", new Tree[] { new Tree(null, "ps2", new Tree[] { new Tree(null, null, new Tree[] { }),
707         new Tree(null, null, new Tree[] { new Tree(null, "[", new Tree[] { })}),
708         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[] { }),
709         new Tree(null, "a", new Tree[] { }),
710         new Tree(null, "n", new Tree[] { }),
711         new Tree(null, "g", new Tree[] { }),
712         new Tree(null, "e", new Tree[] { })})})}),
713         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "]", new Tree[] { })})})})})}),
714         new Tree(null, "psy", 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, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
715         new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { }),
716         new Tree(null, "+", new Tree[] { })}),
717         new Tree(null, null, new Tree[] { })}),
718         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
719         new Tree(null, "s", new Tree[] { })})})})})}),
720         new Tree(null, null, new Tree[] { new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
721         new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { })}),
722         new Tree(null, null, new Tree[] { })}),
723         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
724         new Tree(null, "s", new Tree[] { })})})})})})})})})})}),
725         new Tree(null, "psy", 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, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
726         new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { }),
727         new Tree(null, "+", new Tree[] { }),
728         new Tree(null, "/", new Tree[] { })}),
729         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
730         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
731         new Tree(null, "s", new Tree[] { })})})})})}),
732         new Tree(null, null, new Tree[] { new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
733         new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { }),
734         new Tree(null, "/", new Tree[] { })}),
735         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
736         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
737         new Tree(null, "s", new Tree[] { })})})})})})})})})})}),
738         new Tree(null, "psy", 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, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
739         new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { }),
740         new Tree(null, "*", new Tree[] { })}),
741         new Tree(null, null, new Tree[] { })}),
742         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
743         new Tree(null, "s", new Tree[] { })})})})})}),
744         new Tree(null, null, new Tree[] { new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
745         new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { })}),
746         new Tree(null, null, new Tree[] { })}),
747         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
748         new Tree(null, "s", new Tree[] { })})})})})})})})})})}),
749         new Tree(null, "psy", 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, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
750         new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { }),
751         new Tree(null, "*", new Tree[] { }),
752         new Tree(null, "/", new Tree[] { })}),
753         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
754         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
755         new Tree(null, "s", new Tree[] { })})})})})}),
756         new Tree(null, null, new Tree[] { new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
757         new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { }),
758         new Tree(null, "/", new Tree[] { })}),
759         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}),
760         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
761         new Tree(null, "s", new Tree[] { })})})})})})})})})})}),
762         new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})})}),
763         new Tree(null, null, new Tree[] { new Tree(null, "?", new Tree[] { })}),
764         new Tree(null, null, new Tree[] { })}),
765         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
766         new Tree(null, "s", new Tree[] { })})})})}),
767         new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", 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[] { })})}),
768         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
769         new Tree(null, "o", new Tree[] { }),
770         new Tree(null, "r", new Tree[] { }),
771         new Tree(null, "d", new Tree[] { })})})}),
772         new Tree(null, null, new Tree[] { new Tree(null, ")", new Tree[] { })}),
773         new Tree(null, null, new Tree[] { })}),
774         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
775         new Tree(null, "s", new Tree[] { })})})})})}),
776         new Tree(null, null, new Tree[] { new Tree(null, "psy", new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", new Tree[] { new Tree(null, null, new Tree[] { }),
777         new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { })}),
778         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
779         new Tree(null, "l", new Tree[] { }),
780         new Tree(null, "t", new Tree[] { }),
781         new Tree(null, "e", new Tree[] { }),
782         new Tree(null, "r", new Tree[] { }),
783         new Tree(null, "n", new Tree[] { }),
784         new Tree(null, "a", new Tree[] { }),
785         new Tree(null, "t", new Tree[] { }),
786         new Tree(null, "i", new Tree[] { }),
787         new Tree(null, "v", new Tree[] { }),
788         new Tree(null, "e", new Tree[] { }),
789         new Tree(null, "s", new Tree[] { })})}),
790         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ")", new Tree[] { })})})})}),
791         new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
792         new Tree(null, "s", new Tree[] { })})})})}),
793         new Tree(null, "psy", new Tree[] { new Tree(null, "ps2", new Tree[] { new Tree(null, null, new Tree[] { }),
794         new Tree(null, null, new Tree[] { new Tree(null, "~", new Tree[] { })}),
795         new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})})})})})}),
796         new Tree(null, "!::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { })}),
797         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "qprod", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, " ", new Tree[] { })})}),
798         new Tree(null, "qprod", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})}),
799         new Tree(null, "qprod", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\r", new Tree[] { })})})})})}),
800         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
801         new Tree(null, "o", new Tree[] { }),
802         new Tree(null, "r", new Tree[] { }),
803         new Tree(null, "d", new Tree[] { })}),
804         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { }),
805         new Tree(null, "z", new Tree[] { })}),
806         new Tree(null, "-", new Tree[] { new Tree(null, "A", new Tree[] { }),
807         new Tree(null, "Z", new Tree[] { })}),
808         new Tree(null, "-", new Tree[] { new Tree(null, "0", new Tree[] { }),
809         new Tree(null, "9", new Tree[] { })}),
810         new Tree(null, "range", new Tree[] { new Tree(null, "_", new Tree[] { })})})})})})})})})})}),
811         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "q", new Tree[] { }),
812         new Tree(null, "u", new Tree[] { }),
813         new Tree(null, "o", new Tree[] { }),
814         new Tree(null, "t", new Tree[] { }),
815         new Tree(null, "e", new Tree[] { }),
816         new Tree(null, "d", new Tree[] { })}),
817         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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[] { })})}),
818         new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "psy", 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, "psy", 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, "\"", new Tree[] { })}),
819         new Tree(null, "range", new Tree[] { new Tree(null, "\\", new Tree[] { })})})})})})})}),
820         new Tree(null, "psy", 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[] { }),
821         new Tree(null, "s", new Tree[] { }),
822         new Tree(null, "c", new Tree[] { }),
823         new Tree(null, "a", new Tree[] { }),
824         new Tree(null, "p", new Tree[] { }),
825         new Tree(null, "e", new Tree[] { }),
826         new Tree(null, "d", new Tree[] { })})})})})})})})})})})})})})})}),
827         new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\"", new Tree[] { })})})})})}),
828         new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
829         new Tree(null, "\"", new Tree[] { })})})})})}),
830         new Tree(null, "", new Tree[] { })})})})}),
831         new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
832         new Tree(null, "s", new Tree[] { }),
833         new Tree(null, "c", new Tree[] { }),
834         new Tree(null, "a", new Tree[] { }),
835         new Tree(null, "p", new Tree[] { }),
836         new Tree(null, "e", new Tree[] { }),
837         new Tree(null, "d", new Tree[] { })}),
838         new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
839         new Tree(null, "n", new Tree[] { })})})})})}),
840         new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})}),
841         new Tree(null, "=>", new Tree[] { new Tree(null, "psy", 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[] { }),
842         new Tree(null, "r", new Tree[] { })})})})})}),
843         new Tree(null, null, new Tree[] { new Tree(null, "\r", new Tree[] { })})}),
844         new Tree(null, "psy", 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[] { })})}),
845         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[] { })}),
846         new Tree(null, "range", new Tree[] { new Tree(null, "r", new Tree[] { })})})})})})})})})})})})}),
847         new Tree(null, null, new Tree[] { })})
848         // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED
849         ;
850 }
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919