X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=f93c53b14a8410487fb75012d3e188f923746b64;hp=3501ee60fcbd375a4055af6cbe87ec54594740ac;hb=7d1d5b9e2969e687cc07592f5a212681f8d26479;hpb=e2a835683bc6f2f873b17710ba85806720f88127 diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 3501ee6..f93c53b 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -1,252 +1,382 @@ package edu.berkeley.sbp.misc; import edu.berkeley.sbp.util.*; import edu.berkeley.sbp.*; +import edu.berkeley.sbp.chr.*; import java.util.*; import java.io.*; public class MetaGrammar extends StringWalker { - public static Union make() throws Exception { - return ((MetaGrammar)new MetaGrammar().walk(meta)).done(); - } - public String toString() { - StringBuffer ret = new StringBuffer(); - for(Union u : nt.values()) u.toString(ret); - return ret.toString(); - } - - private static HashSet dropAll = new HashSet(); - - // Statics ////////////////////////////////////////////////////////////////////////////// + public static Object repeatTag = null; - private static final Union SELF = new Union("()"); - - //////////////////////////////////////////////////////////////////////////////// + /** an atom which tracks the possible tokenset of some element, provided that element can only match single-token sequences */ + public static class Infer extends Atom { + private final Element e; + public Infer(Element e) { this.e = e; } + public Topology top() { return (Topology)toAtom(e); } + public String toString() { return e.toString(); } + } - private Union g; - private HashMap nt; - private int anon = 0; - private String startSymbol; - private boolean strings; + /** an atom which tracks the inverse of some other atom */ + public static class Invert extends Atom { + private final Atom a; + public Invert(Atom a) { this.a = a; } + public Topology top() { return a.complement(); } + public String toString() { return "~"+a; } + } - private Element set(Range.Set r) { if (strings) throw new Error(); return CharToken.set(r); } - private Element string(String s) { return strings ? StringToken.string(s) : CharToken.string(s); } - private Atom leftBrace() { return strings ? StringToken.leftBrace : CharToken.leftBrace; } - private Atom rightBrace() { return strings ? StringToken.rightBrace : CharToken.rightBrace; } + public static class Hack extends Atom { + private final Atom a; + static final Topology leftright = CharRange.rightBrace.union(CharRange.leftBrace); + public Hack(Atom a) { this.a = a; } + public Topology top() { return a.minus(leftright); } + public String toString() { return a.toString(); } + } - public MetaGrammar() { this("s", false); } - public MetaGrammar(String s) { this(s, false); } - public MetaGrammar(String s, boolean strings) { this.strings = strings; done(s); } - public Union done() { return done("s"); } - public Union done(String str) { - Union ret = g; - g = new Union(str); - startSymbol = str; - nt = new HashMap(); - dropAll = new HashSet(); - nt.put(str, g); - return ret; + public static Union make() throws Exception { return make(MetaGrammarTree.meta, "s"); } + public static Union make(Tree tree, String nt) throws Exception { + Meta.MetaGrammarFile mgf = new MetaGrammar.Meta.MetaGrammarFile(tree); + BuildContext bc = new BuildContext(mgf); + return mgf.get(nt).build(bc); } + //////////////////////////////////////////////////////////////////////////////// - // MetaGrammar ////////////////////////////////////////////////////////////////////////////// + private static boolean strings; + private static Element set(Range.Set r) { if (strings) throw new Error(); return CharRange.set(r); } + private static Element string(String s) { return strings ? StringInput.string(s) : CharRange.string(s); } - public Union nonTerminal(String str, PreSequence[][] s, boolean synthetic, boolean dropAll) { - Union n = str.equals(startSymbol) ? g : nt.get(str); - if (n == null) nt.put(str, n = new Union(str, synthetic)); - if (dropAll) this.dropAll.add(n); - if (s==null) return n; - HashSet seqs = new HashSet(); - for(int i=0; i temp = new HashSet(); - for(PreSequence pre : s[i]) { - pre.not.addAll(seqs); - Sequence seq = pre.buildSequence(n, false, dropAll); - temp.add(seq); - n.add(seq); - } - seqs.addAll(temp); - } - return n; - } + private MetaGrammar() { } - public String string(Iterable> children) { + public static String string(Iterable> children) { String ret = ""; for(Tree t : children) ret += string(t); return ret; } - public String string(Tree tree) { + public static String string(Tree tree) { String ret = ""; if (tree.head()!=null) ret += tree.head(); ret += string(tree.children()); return ret; } - public Object walk(Tree tree) { - String head = tree.head(); - if (tree.numChildren()==0) return super.walk(tree); - if ("\\n".equals(head)) return new Character('\n'); - else if ("\\r".equals(head)) return new Character('\r'); - else if ("grammar".equals(head)) { for(Tree t : tree.children()) walk(t); return this; } - else if ("*".equals(head)) return Repeat.many0((Element)walk(tree.child(0))); - else if ("+".equals(head)) return Repeat.many1((Element)walk(tree.child(0))); - else if ("+/".equals(head)) return Repeat.many1((Element)walk(tree.child(0)), (Element)walk(tree.child(1))); - else if ("*/".equals(head)) return Repeat.many0((Element)walk(tree.child(0)), (Element)walk(tree.child(1))); - else if ("**".equals(head)) return Repeat.maximal(Repeat.many0((Element)walk(tree.child(0)))); - else if ("++".equals(head)) return Repeat.maximal(Repeat.many1((Element)walk(tree.child(0)))); - else if ("?".equals(head)) return Repeat.maybe((Element)walk(tree.child(0))); - else if ("&".equals(head)) - return ((PreSequence)walk(tree,0)).and(new PreSequence((Element[])Reflection.lub((Object[])walk(tree, 1)), null).buildSequence(null, true, false)); - else if ("&~".equals(head)) - return ((PreSequence)walk(tree,0)).not(new PreSequence((Element[])Reflection.lub((Object[])walk(tree, 1)), null).buildSequence(null, true, false)); - else if ("epsilon".equals(head)) return Union.epsilon; - else if ("()".equals(head)) return Union.epsilon; - else if (")".equals(head)) return SELF; - else if ("nonTerminal".equals(head)) return nonTerminal(string(tree.child(0)), null, false, false); - else if ("::=".equals(head)) return nonTerminal(string(tree.child(0)), (PreSequence[][])walk(tree, 1), false, false); - else if ("!::=".equals(head)) return nonTerminal(string(tree.child(0)), (PreSequence[][])walk(tree, 1), false, true); - else if ("(".equals(head)) return nonTerminal("anon"+(anon++), (PreSequence[][])walk(tree, 0), false, false); - else if ("literal".equals(head)) { Element ret = string(string(tree.child(0))); dropAll.add(ret); return ret; } - else if ("-".equals(head)) return new Range(walk(tree, 0).toString().charAt(0), walk(tree,1).toString().charAt(0)); - else if ("range".equals(head)) return new Range(walk(tree, 0).toString().charAt(0), walk(tree,0).toString().charAt(0)); - else if ("gram".equals(head)) return walk(tree, 1); - else if ("=>".equals(head)) { PreSequence p = (PreSequence)walk(tree, 0); p.tag = string(tree.child(1)); return p; } - else if ("/".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1)); - else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree, 0)); - else if ("ps2".equals(head)) { - Object[] o1 = (Object[])walk(tree, 0); - String s = string(tree.child(1)); - Object[] o2 = (Object[])walk(tree, 2); - if (o1==null) o1 = new Object[0]; - if (o2==null) o2 = new Object[0]; - Object[] o3 = new Object[o1.length + o2.length + 1]; - System.arraycopy(o1, 0, o3, 0, o1.length); - o3[o1.length] = string(s); - System.arraycopy(o2, 0, o3, o1.length+1, o2.length); - PreSequence ret = new PreSequence(o3, s); - ret.drops[o1.length] = o3.length>1; - return ret; - } else if ("{".equals(head)) - return nonTerminal("braced"+(anon++), - new PreSequence[][] { - new PreSequence[] { - new PreSequence(new Element[] { leftBrace(), - ((PreSequence)walk(tree, 0)).buildUnion(), - rightBrace() - }) - } - }, - false, - false); - else if ("[".equals(head) || "[~".equals(head)) { - boolean positive = "[".equals(head); - Range[] rr = (Range[])walk(tree, 0); - Range.Set ret = positive ? new Range.Set() : new Range.Set(new Range(true, true)); - if (rr != null) - for(Range r : rr) - if (positive) ret.add(r); - else ret.remove(r); - return set(ret); + public static class BuildContext extends HashMap { + private final Meta.MetaGrammarFile mgf; + public BuildContext(Meta.MetaGrammarFile mgf) { this.mgf = mgf; } + public Union build(String s) { + Union ret = get(s); + if (ret != null) return ret; + Meta.MetaNonterminal mnt = mgf.get(s); + if (mnt==null) throw new Error("undeclared nonterminal \""+s+"\""); + return mnt.build(this); } - else return super.walk(tree); - } - - - public Object walk(String tag, Object[] argo) { - if (argo.length==0) return super.walk(tag, argo); - if (argo==null) return tag; - if (tag==null || "".equals(tag)) return argo; - return super.walk(tag, argo); } - ////////////////////////////////////////////////////////////////////////////// - - public class PreSequence { - public final HashSet and = new HashSet(); - public final HashSet not = new HashSet(); - public /*final*/ String tag; - public final Object[] o; - - public PreSequence sparse(Object e) { - Object[] ret; - boolean[] drops; - if (o.length <= 1) { - ret = o; - drops = new boolean[this.drops.length]; - System.arraycopy(this.drops, 0, drops, 0, this.drops.length); - } else { - ret = new Object[o.length * 2 - 1]; - drops = new boolean[o.length * 2 - 1]; - for(int i=0; i { + public MetaGrammarFile(Tree tree) { + if (!tree.head().equals("grammar")) throw new Error(); + for(Tree nt : tree.child(0)) + add(new MetaNonterminal(nt)); + } + private void add(MetaNonterminal mnt) { + if (this.get(mnt.name)!=null) throw new Error("duplicate definition of nonterminal \""+mnt.name+"\""); + this.put(mnt.name, mnt); + } + public String toString() { + String ret = ""; + for(MetaNonterminal mnt : this.values()) ret += mnt + "\n"; + return ret; + } + } + public static class MetaNonterminal { + public String name; + public MetaUnion rhs; + public MetaNonterminal(Tree tree) { + name = string(tree.child(0)); + rhs = rhs(tree.child(1)); + } + public String toString() { return name + " = " + rhs; } + public Union build(BuildContext bc) { return rhs.build(bc, name); } + } + public static MetaUnion rhs(Tree t) { + return t.numChildren()==1 + ? new MetaUnion(t.child(0), false) + : new MetaUnion(t, true); + } + public static class MetaUnion implements MetaSequence { + public boolean prioritized; + public MetaSequence[] sequences; + public Sequence buildSequence(BuildContext bc) { + return Sequence.singleton(new Element[] { buildAnon(bc) }, 0); + } + public Union buildAnon(BuildContext bc) { + String s = ""; + for(int i=0; i0?"\n "+(prioritized?">":"|")+" ":"")+sequences[i].buildSequence(bc); + return build(bc, s); + } + public Union build(BuildContext bc, String name) { + Union u = bc.get(name); + if (u != null) return u; + u = new Union(name); + bc.put(name, u); + HashSet seqs = new HashSet(); + for(MetaSequence s : sequences) { + Sequence seq = s.buildSequence(bc); + if (seq != null) { + Sequence oseq = seq; + if (prioritized) + for(Sequence seqprev : seqs) + seq = seq.not(seqprev); + u.add(seq); + seqs.add(seq); } } + return u; + } + public MetaUnion(Tree t, boolean prioritized) { + //System.err.println("metaunion: " + t); + this.prioritized = prioritized; + int i = 0; + this.sequences = new MetaSequence[t.numChildren()]; + for(Tree tt : t) + sequences[i++] = prioritized + ? new MetaUnion(tt, false) + : makeMetaSequence(tt); + } + public String toString() { + String ret = "\n "; + for(int i=0; i " : "\n | "); + } + return ret; } - PreSequence p = new PreSequence(ret, tag, drops); - p.not.addAll(not); - p.and.addAll(and); - return p; } - public PreSequence not(Sequence s) { not.add(s); return this; } - public PreSequence and(Sequence s) { and.add(s); return this; } + public interface MetaSequence { + public abstract Sequence buildSequence(BuildContext bc); + } + + public static MetaSequence makeMetaSequence(Tree t) { + if ("psx".equals(t.head())) return MetaConjunct.make(t.child(0)); + if (t.head().equals("&")) return new MetaAnd(makeMetaSequence(t.child(0)), MetaConjunct.make(t.child(1)), false); + if (t.head().equals("&~")) return new MetaAnd(makeMetaSequence(t.child(0)), MetaConjunct.make(t.child(1)), true); + return null; + } - boolean[] drops = null; - public PreSequence(Object o) { this(new Object[] { o }, null); } - public PreSequence(Object[] o) { this(o, null); } - public PreSequence(Object[] o, String tag) { this(o, tag, null); } - public PreSequence(Object[] o, String tag, boolean[] drops) { - this.o = o; - this.tag = tag; - this.drops = drops==null ? new boolean[o.length] : drops; + public static class MetaAnd implements MetaSequence { + boolean not; + MetaSequence left; + MetaSequence right; + public Sequence buildSequence(BuildContext bc) { + Union u = new Union(toString()); + Sequence ret = left.buildSequence(bc); + Sequence rs = right.buildSequence(bc); + rs.lame = true; + if (not) ret = ret.not(rs); + else ret = ret.and(rs); + u.add(rs); + u.add(ret); + return Sequence.singleton(u); + } + public MetaAnd(MetaSequence left, MetaSequence right, boolean not) { + this.left = left; + this.right = right; + this.not = not; + } + public String toString() { return left + " &"+(not?"~":"")+" "+right; } } - public Union buildUnion() { - Union u = new Union("???"); - u.add(buildSequence(u)); - return u; + public static class MetaConjunct implements MetaSequence { + public boolean negated = false; + public MetaClause[] elements; + public MetaClause followedBy = null; + public String tag; + public MetaClause separator; + public Sequence buildSequence(BuildContext bc) { + Element[] els = new Element[elements.length + (separator==null?0:(elements.length-1))]; + boolean[] drops = new boolean[elements.length + (separator==null?0:(elements.length-1))]; + boolean unwrap = false; + boolean dropAll = false; + if (tag!=null && tag.equals("[]")) unwrap = true; + if (tag!=null && "()".equals(tag)) dropAll=true; + for(int i=0; i t) { + //System.err.println("MetaConjunct("+t+")"); + elements = new MetaClause[t.numChildren()]; + int i = 0; for(Tree tt : t) + elements[i++] = MetaClause.make(tt, this); + } + public String toString() { + String ret = (tag==null ? "" : (tag+":: ")) + (negated ? "~" : ""); + if (elements.length > 1) ret += "("; + for(MetaClause mc : elements) ret += (" " + mc + " "); + if (separator != null) ret += " /" + separator; + if (followedBy != null) ret += " -> " + followedBy; + if (elements.length > 1) ret += ")"; + return ret; + } + public static MetaConjunct make(Tree t) { + //System.err.println("MetaConjunct.make("+t+")"); + if ("/".equals(t.head())) { + MetaConjunct ret = make(t.child(0)); + ret.separator = MetaClause.make(t.child(1), ret); + return ret; + } + if ("->".equals(t.head())) { + MetaConjunct ret = make(t.child(0)); + ret.followedBy = MetaClause.make(t.child(1), ret); + return ret; + } + if ("::".equals(t.head())) { + MetaConjunct ret = make(t.child(1)); + ret.tag = string(t.child(0)); + return ret; + } + if ("ps".equals(t.head())) { + return new MetaConjunct(t.child(0)); + } + return new MetaConjunct(t); + } } - public Sequence buildSequence(Union u) { return buildSequence(u, false, false); } - public Sequence buildSequence(Union u, boolean lame, boolean dropAll) { - for(Sequence s : and) u.add(s); - for(Sequence s : not) u.add(s); - HashSet set = new HashSet(); - Element[] o2 = o==null ? new Element[0] : new Element[o.length]; - int nonDrop = 0; - if (o != null) { - int j = 0; - for(int i=0; i t, MetaConjunct c) { + //System.err.println("MetaClause.make("+t+")"); + if (t==null) return new MetaEpsilon(); + if (t.head()==null) return new MetaEpsilon(); + if (t.head().equals("{")) throw new Error("metatree: " + t); + if (t.head().equals("*")) return new MetaRepeat(make(t.child(0), c), false, null, true, true); + if (t.head().equals("+")) return new MetaRepeat(make(t.child(0), c), false, null, false, true); + if (t.head().equals("?")) return new MetaRepeat(make(t.child(0), c), false, null, true, false); + if (t.head().equals("**")) return new MetaRepeat(make(t.child(0), c), true, null, true, true); + if (t.head().equals("++")) return new MetaRepeat(make(t.child(0), c), true, null, false, true); + if (t.head().equals("*/")) return new MetaRepeat(make(t.child(0), c), false, make(t.child(1), c), true, true); + if (t.head().equals("+/")) return new MetaRepeat(make(t.child(0), c), false, make(t.child(1), c), false, true); + if (t.head().equals("**/")) return new MetaRepeat(make(t.child(0), c), true, make(t.child(1), c), true, true); + if (t.head().equals("++/")) return new MetaRepeat(make(t.child(0), c), true, make(t.child(1), c), false, true); + if (t.head().equals("()")) return new MetaEpsilon(); + if (t.head().equals("[")) return new MetaRange(t.child(0)); + if (t.head().equals("literal")) return new MetaStringLiteral(t.child(0)); + if (t.head().equals("nonTerminal")) return new MetaNonterminalReference(t.child(0)); + if (t.head().equals(")")) return new MetaSelfReference(); + if (t.head().equals("(")) return new MetaParens(t.child(0)); + if (t.head().equals("~")) return new MetaInvert(t.child(0), c); + if (t.head().equals("!")) { MetaClause mc = make(t.child(0), c); mc.drop = true; return mc; } + if (t.head().equals("^")) { c.tag = string(t.child(0)); return new MetaStringLiteral(t.child(0)); } + if (t.head().equals("^^")) throw new Error("carets: " + t); + throw new Error("unknown: " + t); + } + public static class MetaRepeat extends MetaClause { + public MetaClause element, separator; + public boolean maximal, zero, many; + public Element build(BuildContext bc) { + return new Repeat(element.build(bc), zero, many, separator==null?null:separator.build(bc), maximal); + } + public MetaRepeat(MetaClause element, boolean maximal, MetaClause separator, boolean zero, boolean many) { + this.separator = separator; + this.element = element; + this.maximal = maximal; + this.zero = zero; + this.many = many; } + public String toString() { + return element+ + ((zero&&!many)?"?":zero?"*":"+")+ + (!maximal?"":zero?"*":"+")+ + (separator==null?"":(" /"+separator)); + } + } + public static class MetaParens extends MetaClause { + public MetaUnion body; + public MetaParens(Tree t) { this.body = rhs(t); } + public String toString() { return "( " + body + " )"; } + public Element build(BuildContext bc) { return body.buildAnon(bc); } } - Element[] expansion = o2; - Sequence ret = null; - if (dropAll || lame) ret = Sequence.drop(expansion, and, not, lame); - else if (tag!=null) ret = Sequence.rewritingSequence(tag, expansion, drops, and, not); - else { - int idx = -1; - for(int i=0; i t) { this.body = MetaConjunct.make(t); } + public String toString() { return "{ " + body + " }"; } + public Element build(BuildContext bc) { + return new Union("{}");// body.buildSequence(); } - ret = idx==-1 ? Sequence.drop(expansion, and, not, false) : Sequence.singleton(expansion, idx, and, not); } - set.add(ret); - return ret; + */ + public static class MetaEpsilon extends MetaClause { + public String toString() { return "()"; } + public Element build(BuildContext bc) { return Union.epsilon; } + } + public static class MetaRange extends MetaClause { + Range.Set range = new Range.Set(); + public String toString() { return range.toString(); } + public Element build(BuildContext bc) { return set(range); } + public MetaRange(Tree t) { + for(Tree tt : t) { + if (tt.head().equals("range")) { + range.add(tt.child(0).head().charAt(0)); + } else if (tt.head().equals("-")) { + range.add(new Range(string(tt.child(0)).charAt(0), + string(tt.child(1)).charAt(0))); + } + } + } + } + public static class MetaStringLiteral extends MetaClause { + public String literal; + public Element build(BuildContext bc) { return string(literal); } + public MetaStringLiteral(Tree literal) { this.literal = string(literal); this.drop = true; } + public String toString() { return "\""+StringUtil.escapify(literal, "\"\r\n\\")+"\""; } + } + public static class MetaNonterminalReference extends MetaClause { + public String name; + public MetaNonterminalReference(Tree name) { this.name = string(name); } + public Element build(BuildContext bc) { return bc.build(name); } + public String toString() { return name; } + } + public static class MetaSelfReference extends MetaClause { + public String toString() { return "(*)"; } + public Element build(BuildContext bc) { return new Union("(*)"); /* FIXME */ } + } + public static class MetaInvert extends MetaClause { + public MetaClause element; + public MetaInvert(Tree t, MetaConjunct c) { this.element = make(t, c); } + public String toString() { return "~"+element; } + public Element build(BuildContext bc) { return new Hack(new Invert(new Infer(element.build(bc)))); } + } } + } public static void main(String[] args) throws Exception { @@ -254,7 +384,9 @@ public class MetaGrammar extends StringWalker { System.err.println("usage: java " + MetaGrammar.class.getName() + " grammarfile.g com.yourdomain.package.ClassName"); System.exit(-1); } - + //StringBuffer sbs = new StringBuffer(); + //((MetaGrammar)new MetaGrammar().walk(meta)).nt.get("e").toString(sbs); + //System.err.println(sbs); String className = args[1].substring(args[1].lastIndexOf('.')+1); String packageName = args[1].substring(0, args[1].lastIndexOf('.')); String fileName = packageName.replace('.', '/') + "/" + className + ".java"; @@ -270,7 +402,18 @@ public class MetaGrammar extends StringWalker { } out.append("\n // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n"); - new Parser(MetaGrammar.make(), CharToken.top()).parse1(new CharToken.Stream(new InputStreamReader(new FileInputStream(args[0])))).toJava(out); + Tree ts = new CharParser(MetaGrammar.make()).parse(new FileInputStream(args[0])).expand1(); + + //Forest fs = new CharParser(make()).parse(new FileInputStream(args[0])); + //System.out.println(fs.expand1()); + + //GraphViz gv = new GraphViz(); + //fs.toGraphViz(gv); + //FileOutputStream fox = new FileOutputStream("out.dot"); + //gv.dump(fox); + //fox.close(); + + ts.toJava(out); out.append("\n // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n"); for(String s = br.readLine(); s != null; s = br.readLine()) out.append(s+"\n"); @@ -282,501 +425,4 @@ public class MetaGrammar extends StringWalker { p.flush(); os.close(); } - - public static final Tree meta = - - - - - - - - - - - - - - - // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED -new Tree(null, "gram", new Tree[] { new Tree(null, null, new Tree[] { }), - 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[] { })}), - 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[] { }), - new Tree(null, "s", new Tree[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "m", new Tree[] { }), - new Tree(null, "m", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "r", new Tree[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "m", new Tree[] { })})})})})}), - new Tree(null, "!::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", 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, "w", new Tree[] { })})})})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "m", new Tree[] { }), - new Tree(null, "m", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "r", new Tree[] { })}), - 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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "m", new Tree[] { }), - new Tree(null, "m", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "r", new Tree[] { })})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { })}), - new Tree(null, null, new Tree[] { new Tree(null, null, 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[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "d", 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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }), - new Tree(null, "l", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "i", new Tree[] { }), - new Tree(null, "v", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", 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[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "d", 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, "=", new Tree[] { })}), - new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }), - new Tree(null, "l", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "i", new Tree[] { }), - new Tree(null, "v", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }), - new Tree(null, "l", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "i", new Tree[] { }), - new Tree(null, "v", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "s", 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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "c", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "j", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "s", 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, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})}), - new Tree(null, "literal", 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[] { }), - new Tree(null, "s", 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, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})}), - new Tree(null, "literal", 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[] { }), - new Tree(null, "s", new Tree[] { })})})})})})})})})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "c", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "j", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "s", 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, "s", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "q", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "e", 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[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "q", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "e", new Tree[] { })})})}), - new Tree(null, null, new Tree[] { new Tree(null, "&", 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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", 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[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "q", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "e", 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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }), - new Tree(null, "s", new Tree[] { })}), - 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, "e", new Tree[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }), - new Tree(null, "s", 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, "(", 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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})})})})}), - new Tree(null, "literal", 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, "q", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "d", 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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", 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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})})})})})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }), - new Tree(null, "s", new Tree[] { }), - new Tree(null, "2", new Tree[] { })})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "p", new Tree[] { }), - new Tree(null, "s", new Tree[] { }), - new Tree(null, "x", 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, "p", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})}), - new Tree(null, null, 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[] { }), - new Tree(null, "s", new Tree[] { })})})}), - new Tree(null, null, new Tree[] { new Tree(null, "/", 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[] { })})})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "q", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "e", 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, "p", new Tree[] { }), - new Tree(null, "s", new Tree[] { }), - new Tree(null, "x", 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[] { }), - new Tree(null, "s", new Tree[] { }), - new Tree(null, "x", 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, 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[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "d", 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[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "d", new Tree[] { })})})})})})})})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }), - new Tree(null, "c", 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[] { })}), - new Tree(null, "range", new Tree[] { new Tree(null, "]", new Tree[] { })}), - new Tree(null, "range", new Tree[] { new Tree(null, "\\", new Tree[] { })}), - new Tree(null, "range", 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[] { }), - new Tree(null, "s", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "p", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "d", new Tree[] { })})})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "g", new Tree[] { }), - new Tree(null, "e", new Tree[] { })}), - 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[] { }), - new Tree(null, "c", new Tree[] { })})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "g", new Tree[] { }), - new Tree(null, "e", 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[] { }), - new Tree(null, "c", new Tree[] { })})})}), - new Tree(null, null, new Tree[] { new Tree(null, "-", 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[] { }), - new Tree(null, "c", new Tree[] { })})})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })}), - 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[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "d", new Tree[] { })})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "n", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "T", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "m", new Tree[] { }), - new Tree(null, "i", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "l", 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, "q", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "d", new Tree[] { })})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "l", new Tree[] { }), - new Tree(null, "i", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "l", new Tree[] { })})}), - new Tree(null, "ps2", new Tree[] { new Tree(null, null, 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, "ps2", new Tree[] { new Tree(null, null, new Tree[] { }), - new Tree(null, null, new Tree[] { new Tree(null, "{", 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[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "q", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "e", new Tree[] { })})}), - new Tree(null, "literal", 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[] { }), - new Tree(null, "s", new Tree[] { })})})}), - new Tree(null, "ps2", new Tree[] { new Tree(null, null, new Tree[] { }), - new Tree(null, null, new Tree[] { new Tree(null, "[", 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[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "g", new Tree[] { }), - new Tree(null, "e", new Tree[] { })})})}), - new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "]", new Tree[] { })})})})}), - new Tree(null, "ps2", new Tree[] { new Tree(null, null, 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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "g", new Tree[] { }), - new Tree(null, "e", new Tree[] { })})})}), - new Tree(null, "literal", 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, "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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", 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, "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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})}), - new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { })}), - new Tree(null, null, 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[] { })})})}), - 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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", 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, "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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", 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, "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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})})}), - new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { })}), - new Tree(null, null, 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[] { })})})}), - 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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { })})})})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "s", 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[] { })})})}), - new Tree(null, null, new Tree[] { new Tree(null, "?", 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[] { }), - new Tree(null, "s", 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[] { })})}), - new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "d", new Tree[] { })})})}), - new Tree(null, null, new Tree[] { new Tree(null, ")", 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[] { }), - new Tree(null, "s", new Tree[] { })})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "/", new Tree[] { new Tree(null, "ps2", new Tree[] { new Tree(null, null, new Tree[] { }), - new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { })}), - new Tree(null, null, new Tree[] { new Tree(null, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }), - new Tree(null, "l", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "n", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "i", new Tree[] { }), - new Tree(null, "v", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "s", new Tree[] { })})}), - new Tree(null, "literal", 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[] { }), - new Tree(null, "s", new Tree[] { })})})})})})}), - new Tree(null, "!::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", 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, "literal", 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[] { }), - 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, "[~", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "\n", new Tree[] { })})})})})})})})})}), - new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\n", 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, "\n", 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, "\r", new Tree[] { })})})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "r", new Tree[] { }), - new Tree(null, "d", 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, "-", new Tree[] { new Tree(null, "a", new Tree[] { }), - new Tree(null, "z", new Tree[] { })}), - new Tree(null, "-", new Tree[] { new Tree(null, "A", new Tree[] { }), - new Tree(null, "Z", new Tree[] { })}), - new Tree(null, "-", new Tree[] { new Tree(null, "0", new Tree[] { }), - new Tree(null, "9", new Tree[] { })}), - new Tree(null, "range", new Tree[] { new Tree(null, "_", new Tree[] { })})})})})})})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "q", new Tree[] { }), - new Tree(null, "u", new Tree[] { }), - new Tree(null, "o", new Tree[] { }), - new Tree(null, "t", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "d", 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, "literal", 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, "(", 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[] { })}), - new Tree(null, "range", 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[] { }), - new Tree(null, "s", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "p", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "d", new Tree[] { })})})})})})})})})})})})})}), - new Tree(null, "literal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(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[] { }), - new Tree(null, "\"", new Tree[] { })})})})}), - new Tree(null, "", new Tree[] { })})})})}), - new Tree(null, "::=", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }), - new Tree(null, "s", new Tree[] { }), - new Tree(null, "c", new Tree[] { }), - new Tree(null, "a", new Tree[] { }), - new Tree(null, "p", new Tree[] { }), - new Tree(null, "e", new Tree[] { }), - new Tree(null, "d", new Tree[] { })}), - 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[] { }), - new Tree(null, "n", new Tree[] { })})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "\n", 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[] { }), - new Tree(null, "r", new Tree[] { })})})})}), - new Tree(null, null, new Tree[] { new Tree(null, "\r", 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[] { })})}), - new Tree(null, "[~", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "n", new Tree[] { })}), - new Tree(null, "range", new Tree[] { new Tree(null, "r", new Tree[] { })})})})})})})})})})}), - new Tree(null, null, new Tree[] { })}) - // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED - ; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -