+package edu.berkeley.sbp.misc;
+import edu.berkeley.sbp.util.*;
+import edu.berkeley.sbp.*;
+import java.util.*;
+import java.io.*;
+
+public class MetaGrammar extends ReflectiveWalker {
+
+ public static Union make() throws Exception {
+ return ((MetaGrammar)new MetaGrammar().walk(meta)).done();
+ }
+
+
+ // FIXME
+ private static HashSet<Union> dropAll = new HashSet<Union>();
+
+ // Statics //////////////////////////////////////////////////////////////////////////////
+
+ private static final Union SELF = new Union("()");
+
+ public static Union epsilon = new Union("()");
+ static { epsilon.add(Sequence.empty); }
+
+ // MetaGrammar //////////////////////////////////////////////////////////////////////////////
+
+ public Object walk(String tag, Object[] argo) {
+ if ("dork".equals(tag)) return Reflection.lub(argo);
+ return super.walk(tag, argo);
+ }
+ public PreSequence[] dork(PreSequence[] p) { return p; }
+ public Object _star_(Element r) { return new Rep(r, null, false, true); }
+ public Element _leftbracket_(Object o, Object[] args) { return rangex(o==null || !(o instanceof Character) ? null : o, args); }
+ public Union _colon__colon__equals_(String s, PreSequence[][] p) { return nonTerminalZ(s, p); }
+ public Union _bang__colon__colon__equals_(String s, PreSequence[][] p) {
+ return nonTerminalZ(s, p, true); }
+ public Union _colon__colon__equals_(boolean q, String s, PreSequence[][] p) {
+ return nonTerminalZ(s, p, q);
+ }
+ public Element _leftparen__rightparen_() { return epsilon; }
+ public Element epsilon(Object o, Object b) { return epsilon; }
+ public Element _rightparen_(Object e) { return SELF; }
+
+ public PreSequence _amp_(PreSequence p, Object[] o) {
+ p.needs.add(new PreSequence(o, null, true));
+ return p;
+ }
+ public PreSequence _amp__tilde_(PreSequence p, Object[] o) {
+ p.hates.add(new PreSequence(o, null, true));
+ return p;
+ }
+
+ public Element _bang_(Element r) { return r; }
+ public Object care(String s) { return new MyLift(s); }
+ //public Element _backtick_(Element r) { return new Unwrap(r); }
+ //public Element _hash_(Element e) { return e; }
+ //public Element _hash_(Element e) { return _plus__plus_(e); }
+
+ public PreSequence[] alternatives(PreSequence[] s) { return s; }
+
+ public Range _minus_(Character a, Character b) { return b==null ? new Range(a.charValue(), true) : new Range(a.charValue(), b.charValue()); }
+ public Union nonTerminalY(String s) { return nonTerminalX(s, false, false); }
+ public Union nonTerminalX(String s, boolean synthetic, boolean dropAll) {
+ Union n = s.equals(startSymbol) ? g : nt.get(s);
+ if (n == null) nt.put(s, n = new Union(s, synthetic));
+ if (dropAll) this.dropAll.add(n);
+ return n;
+ }
+ public Object _leftparen_(PreSequence[][] p) { return nonTerminalZ(p); }
+ public Union nonTerminalZ(PreSequence[][] p) { return nonTerminalX("anon"+(anon++), p, false, false); }
+ public Union nonTerminalZ(String s, PreSequence[][] p) { return nonTerminalX(s, p, false, false); }
+ public Union nonTerminalZ(String s, PreSequence[][] p, boolean q) { return nonTerminalX(s, p, false, q); }
+ public Object _backslash__leftbrace_(String s) { return SELF; }
+ public Object _leftbrace_(String s) { return SELF; }
+ public Object _plus_(final Element r) { return new Rep(r, null, false, false); }
+ //public Element _tilde__slash__tilde_(final Element r) { return Repeat.maximal(r); }
+ public Object _plus__slash_(final Element r, Element s) { /*return Repeat.many1(r, s);*/ return new Rep(r, s, false, false); }
+ //public Element _star__slash_(final Element r, Element s) { return Repeat.many0(r, s); }
+ //public Element _star__star_(final Element r, Element s) { return Repeat.maximal(Repeat.many0(r, s)); }
+ public Object _plus__plus_(final Element r) { return new Rep(r, null, true, false); }
+ public Element _question_(final Element r) { return Repeat.maybe(r); }
+ public MetaGrammar gram(Object o, MetaGrammar g, Object o2) { return g; }
+ public MetaGrammar grammar(Object[] o) { return this; }
+ public MetaGrammar grammar(Object o, Union[] u, Object x) { return this; }
+ public char _backslash_n() { return '\n'; }
+ public char _backslash_r() { return '\r'; }
+ public String literal(String s) { return s; }
+ //public Element literal(String s) { return CharToken.string(s); }
+
+ public Range range0(char a) { return new Range(a, a); }
+ public Range range0(char a, char b) { return new Range(a, b); }
+ public Element range(Object o, Range[] rr) {
+ Range.Set ret = !"~".equals(o+"") ? new Range.Set() : new Range.Set(new Range(true, true));
+ if (rr != null)
+ for(Range r : rr)
+ if (!"~".equals(o+"")) ret.add(r);
+ else ret.remove(r);
+ return CharToken.set(ret);
+ }
+ public Element rangex(Object o, Object[] r) {
+ Range.Set ret = o==null ? new Range.Set() : new Range.Set(new Range(true, true));
+ if (r != null)
+ for(Object aa : r) {
+ Range range =
+ aa instanceof Range
+ ? (Range)aa
+ : aa instanceof Character
+ ? new Range(((Character)aa).charValue())
+ : new Range(((String)aa).charAt(0));
+ if (o==null) ret.add(range);
+ else ret.remove(range);
+ }
+ return CharToken.set(ret);
+ }
+
+ public String sify(Object arg) {
+ if (arg==null) return "";
+ if (arg instanceof String) return (String)arg;
+ Object[] args = (Object[])arg;
+ while(true) {
+ args = Reflection.lub(args);
+ if (args instanceof String[]) {
+ StringBuffer ret = new StringBuffer();
+ for(String s : ((String[])args)) ret.append(s);
+ return ret.toString();
+ }
+ if (args instanceof Character[]) break;
+ if (!(args instanceof Object[])) break;
+ args = (Object[])args[0];
+ }
+ if (args instanceof Character[]) {
+ char[] c = new char[args.length];
+ for(int i=0; i<c.length; i++) c[i] = ((Character)args[i]).charValue();
+ String s = new String(c, 0, c.length);
+ return s;
+ }
+ return (String)args[0];
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ private Union g;
+ private HashMap<String,Union> nt;
+ private int anon = 0;
+ private Element dws;
+ private String startSymbol;
+
+ public MetaGrammar() { this("s"); }
+ public MetaGrammar(String s) { 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<String,Union>();
+ nt.put(str, g);
+ this.dws = Repeat.maximal(Repeat.many0(nonTerminalY("w")));
+ return ret;
+ }
+
+ public Union nonTerminalX(String str, PreSequence[][] s, boolean synthetic, boolean dropAll) {
+ Union n = nonTerminalX(str, synthetic, dropAll);
+ if (s == null || s.length==0) { n.add(Sequence.empty); return n; }
+ HashSet<Sequence> seqs = new HashSet<Sequence>();
+ for(int i=0; i<s.length; i++) {
+ if (s[i]==null) continue;
+ HashSet<Sequence> temp = new HashSet<Sequence>();
+ for(PreSequence pre : s[i]) {
+ pre.hatess.addAll(seqs);
+ Sequence seq = pre.buildSequence(Character.isUpperCase(str.charAt(0)) ? dws : null, n, false, dropAll);
+ temp.add(seq);
+ //for(Sequence dom : seqs) seq.hates.add(dom);
+ n.add(seq);
+ }
+ seqs.addAll(temp);
+ }
+ return n;
+ }
+
+ public String stringify(String s) { return StringUtil.unescapify(s); }
+ public char unescape(char x, char c) { return unescape(c); }
+ public char unescape(char c) { return StringUtil.unescapify("\\"+c).charAt(0); }
+ public PreSequence sequence(Object[] o) { return new PreSequence(o, null); }
+
+ public static class PreBrace {
+ public final Object[] o;
+ public PreBrace(Object[] o) { this.o = o; }
+ }
+
+ public PreSequence _equals__greater_(Object[] o, String s) { return new PreSequence(o, s); }
+ public PreSequence wrap(Object[] o) { return new PreSequence(o, ""); }
+ public PreSequence mwrap(Object[] o) { return new PreSequence(o, ""); }
+ public PreSequence rewrite(Object[] o) { return new PreSequence(o, null); }
+ public PreSequence rewrite(Object[] o, Object o2) {
+ Object[] o3 = new Object[o.length + 1];
+ System.arraycopy(o, 0, o3, 0, o.length);
+ o3[o3.length-1] = o2;
+ return rewrite(o3);
+ }
+
+ public static class Rep {
+ private final Element e;
+ private final Element s;
+ private final boolean maximal;
+ private final boolean zero;
+ public Rep(Element e, Element s, boolean maximal, boolean zero) { this.e = e; this.s = s; this.zero = zero; this.maximal = maximal;}
+ public Element build(Element ws) {
+ Element sep = null;
+ if (ws==null) sep = s;
+ else if (s==null) sep = ws;
+ else {
+ Union ws2 = new Union(e + "/" + s + "/" + ws, true);
+ ws2.add(Sequence.singleton(new Element[] { ws, s, ws }, 0, null, null));
+ sep = ws2;
+ }
+ Element ret = zero ? Repeat.many0(e, sep) : Repeat.many1(e, sep);
+ return maximal ? Repeat.maximal(ret) : ret;
+ }
+ }
+
+ public static class PreSequence {
+ public final HashSet<PreSequence> needs = new HashSet<PreSequence>();
+ public final HashSet<PreSequence> hates = new HashSet<PreSequence>();
+ public final HashSet<Sequence> hatess = new HashSet<Sequence>();
+ public /*final*/ String tag;
+ public final Object[] o;
+ public final boolean keeper;
+
+ public PreSequence(Object[] o, String tag) { this(o, tag, false); }
+ public PreSequence(Object[] o, String tag, boolean keeper) { this.o = o; this.tag = tag; this.keeper = keeper; }
+ boolean[] drops = null;
+ public Element[] expand(Element ws, Union u, HashSet<Sequence> set) {
+ if (o==null) return new Element[0];
+ Element[] o2 = new Element[o.length];
+ drops = new boolean[o.length];
+ int j = 0;
+ for(int i=0; i<o.length; i++) {
+ if (o[i] instanceof PreSequence) o2[j] = ((PreSequence)o[i]).buildUnion(ws);
+ else if (o[i]==SELF) o2[j] = u.new Subset("(("+u+"))", set);
+ else if (o[i] instanceof MyLift) { o2[j] = CharToken.string(tag = ((MyLift)o[i]).s); drops[j] = true; }
+ else if (o[i] instanceof String) { o2[j] = CharToken.string( ((String)o[i]) ); drops[j] = true; }
+ else if (o[i] instanceof Rep) o2[j] = ((Rep)o[i]).build(ws);
+ else o2[j] = (Element)o[i];
+
+ if (dropAll.contains(o2[j])) drops[j] = true;
+
+ o2[j] = o2[j];
+ j++;
+ }
+ if (ws == null || o2.length <= 1) return o2;
+ Element[] ret = new Element[o2.length*2-1];
+ boolean[] drops2 = new boolean[ret.length];
+ for(int i=0; i<o2.length; i++) {
+ if (i>0) { ret[i*2-1] = ws; drops2[i*2-1] = true; }
+ ret[i*2] = o2[i];
+ drops2[i*2] = drops[i];
+ }
+ drops = drops2;
+ return ret;
+ }
+ public Union buildUnion(Element ws) {
+ Union u = new Union("???");
+ u.add(buildSequence(ws, u));
+ return u;
+ }
+ public Sequence buildSequence(Element ws, Union u) { return buildSequence(ws, u, false, false); }
+ public Sequence buildSequence(Element ws, Union u, boolean lame, boolean dropAll) {
+
+ HashSet<Sequence> and = new HashSet<Sequence>();
+ HashSet<Sequence> not = new HashSet<Sequence>();
+ for(PreSequence p : needs) {
+ Sequence ps = p.buildSequence(ws, u, true, dropAll);
+ u.add(ps);
+ and.add(ps);
+ }
+ for(Sequence p : hatess) not.add(p);
+ for(PreSequence p : hates) {
+ Sequence ps = p.buildSequence(ws, u, true, dropAll);
+ u.add(ps);
+ not.add(ps);
+ }
+
+ HashSet<Sequence> set = new HashSet<Sequence>();
+ Element[] expansion = expand(ws, u, set);
+ boolean keeper = this.keeper;
+ Sequence ret = dropAll || lame || keeper ? Sequence.drop(expansion, and, not, lame) : null;
+ if (ret==null && tag!=null) {
+ for(int i=0; i<expansion.length; i++) expansion[i] = expansion[i];
+ ret = Sequence.rewritingSequence(tag, expansion, drops, and, not);
+ }
+ if (ret==null) {
+ int idx = -1;
+ for(int i=0; i<expansion.length; i++) {
+ if (!drops[i]) idx = i;
+ else expansion[i] = expansion[i];
+ }
+ ret = idx==-1 ? Sequence.drop(expansion, and, not, false) : Sequence.singleton(expansion, idx, and, not);
+ }
+ set.add(ret);
+ return ret;
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ if (args.length != 2) {
+ System.err.println("usage: java " + MetaGrammar.class.getName() + " grammarfile.g com.yourdomain.package.ClassName");
+ System.exit(-1);
+ }
+
+ String className = args[1].substring(args[1].lastIndexOf('.')+1);
+ String packageName = args[1].substring(0, args[1].lastIndexOf('.'));
+ String fileName = packageName.replace('.', '/') + "/" + className + ".java";
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
+ StringBuffer out = new StringBuffer();
+
+ boolean skip = false;
+ for(String s = br.readLine(); s != null; s = br.readLine()) {
+ if (s.indexOf("DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED") != -1 && s.indexOf("\"")==-1) skip = true;
+ if (s.indexOf("DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED") != -1 && s.indexOf("\"")==-1) break;
+ if (!skip) out.append(s+"\n");
+ }
+
+ 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);
+ 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");
+ br.close();
+
+ OutputStream os = new FileOutputStream(fileName);
+ PrintWriter p = new PrintWriter(new OutputStreamWriter(os));
+ p.println(out.toString());
+ p.flush();
+ os.close();
+ }
+
+ public static class MyLift {
+ public final String s;
+ public MyLift(String s) { this.s = s; }
+ }
+
+ private 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, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { })})})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { })})})})})}),
+ new Tree(null, "sify", 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, "sify", 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, "alternatives", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "R", new Tree[] { })})})})})}),
+ new Tree(null, "sify", 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, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "R", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "care", new Tree[] { new Tree(null, "sify", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "C", new Tree[] { }),
+ new Tree(null, "l", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { })})})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "care", new Tree[] { new Tree(null, "sify", 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, "+/", new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "C", new Tree[] { }),
+ new Tree(null, "l", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { })})})})})})})})})})}),
+ new Tree(null, "::=", new Tree[] { new Tree(null, "sify", 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, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "~", new Tree[] { }),
+ new Tree(null, null, new Tree[] { new Tree(null, "range0", new Tree[] { new Tree(null, "]", new Tree[] { })}),
+ new Tree(null, "range0", new Tree[] { new Tree(null, "\\", new Tree[] { })}),
+ new Tree(null, "range0", new Tree[] { new Tree(null, "-", new Tree[] { })}),
+ new Tree(null, "range0", new Tree[] { new Tree(null, "~", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "C", new Tree[] { }),
+ new Tree(null, "l", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "R", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "w", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "b", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { })})})})})}),
+ new Tree(null, "sify", 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, "::=", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "R", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "w", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "R", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "w", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "x", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "R", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "w", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "x", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "&", new Tree[] { })})})}),
+ new Tree(null, "+", new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "R", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "w", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "x", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})})})})})})})}),
+ new Tree(null, "::=", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "R", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "w", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "x", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})})}),
+ new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "w", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { })})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=", new Tree[] { }),
+ new Tree(null, ">", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=", new Tree[] { }),
+ new Tree(null, ">", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, null, new Tree[] { new Tree(null, "+", new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})}),
+ new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=", new Tree[] { }),
+ new Tree(null, ">", new Tree[] { })})})}),
+ new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { }),
+ new Tree(null, ")", new Tree[] { })})})})}),
+ new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "p", new Tree[] { })})})})})})})}),
+ new Tree(null, "::=", new Tree[] { new Tree(null, "sify", 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, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "c", new Tree[] { })})})})}),
+ new Tree(null, "sify", 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, "0", new Tree[] { })})})}),
+ new Tree(null, "=>", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "c", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "-", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "c", new Tree[] { })})})})}),
+ new Tree(null, "sify", 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, "0", new Tree[] { })})})})})})})}),
+ new Tree(null, "!::=", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ">", new Tree[] { })})})})})})})})})}),
+ new Tree(null, "!::=", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "b", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "|", new Tree[] { })})})})})})})})})}),
+ new Tree(null, "::=", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "sify", 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, "Y", new Tree[] { })})})}),
+ new Tree(null, "=>", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, null, new Tree[] { }),
+ new Tree(null, null, new Tree[] { new Tree(null, "range0", new Tree[] { new Tree(null, "(", new Tree[] { })})})}),
+ new Tree(null, "range", new Tree[] { new Tree(null, null, new Tree[] { }),
+ new Tree(null, null, new Tree[] { new Tree(null, "range0", new Tree[] { new Tree(null, ")", new Tree[] { })})})})}),
+ new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "e", new Tree[] { }),
+ new Tree(null, "p", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "l", new Tree[] { }),
+ new Tree(null, "o", new Tree[] { }),
+ new Tree(null, "n", new Tree[] { })})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "{", new Tree[] { })})})}),
+ new Tree(null, "+/", new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "C", new Tree[] { }),
+ new Tree(null, "l", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { })})})})}),
+ new Tree(null, "literal", new Tree[] { new Tree(null, "sify", 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, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "[", new Tree[] { })})})}),
+ new Tree(null, "?", new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, null, new Tree[] { }),
+ new Tree(null, null, new Tree[] { new Tree(null, "range0", new Tree[] { new Tree(null, "~", new Tree[] { })})})})}),
+ new Tree(null, "*", new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "]", new Tree[] { })})})})}),
+ new Tree(null, "sify", 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, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { }),
+ new Tree(null, "/", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { }),
+ new Tree(null, "/", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "?", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", 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, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "-", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "!", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})})}),
+ new Tree(null, "=>", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "c", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { }),
+ new Tree(null, "e", new Tree[] { })})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "`", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "sify", 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, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { }),
+ new Tree(null, "*", new Tree[] { })})})})})})})}),
+ new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "*", new Tree[] { })})})})})})})})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { }),
+ new Tree(null, "+", new Tree[] { })})})})})})})}),
+ new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "E", new Tree[] { })})})}),
+ new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "+", new Tree[] { })})})})})})})})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ")", new Tree[] { })})})})})})})}),
+ new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "care", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "(", new Tree[] { })})})}),
+ new Tree(null, "+/", new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "C", new Tree[] { }),
+ new Tree(null, "l", new Tree[] { }),
+ new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { }),
+ new Tree(null, "s", new Tree[] { })})})}),
+ new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "g", new Tree[] { }),
+ new Tree(null, "t", new Tree[] { })})})})}),
+ new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, ")", new Tree[] { })})})})})})})})})}),
+ new Tree(null, "!::=", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, " ", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", 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, "range", new Tree[] { new Tree(null, "~", new Tree[] { }),
+ new Tree(null, null, new Tree[] { new Tree(null, "range0", new Tree[] { new Tree(null, "\n", new Tree[] { })})})})}),
+ new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\r", new Tree[] { })})})})})})})})})}),
+ new Tree(null, "::=", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "n", new Tree[] { })})}),
+ new Tree(null, null, new Tree[] { new Tree(null, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, 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, "range0", new Tree[] { new Tree(null, "_", new Tree[] { })})})})})})})})})}),
+ new Tree(null, "::=", new Tree[] { new Tree(null, "sify", 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, "alternatives", 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, "nonTerminalY", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "a", new Tree[] { }),
+ new Tree(null, "n", new Tree[] { })})})})})}),
+ new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "f", new Tree[] { }),
+ new Tree(null, "y", new Tree[] { })})})})})})})}),
+ new Tree(null, "::=", new Tree[] { new Tree(null, "sify", 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, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", 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, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "range", new Tree[] { new Tree(null, "~", new Tree[] { }),
+ new Tree(null, null, new Tree[] { new Tree(null, "range0", new Tree[] { new Tree(null, "\"", new Tree[] { })}),
+ new Tree(null, "range0", new Tree[] { new Tree(null, "\\", new Tree[] { })})})})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "nonTerminalY", new Tree[] { new Tree(null, "sify", 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, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\"", new Tree[] { })})})})}),
+ new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "s", new Tree[] { }),
+ new Tree(null, "i", new Tree[] { }),
+ new Tree(null, "f", new Tree[] { }),
+ new Tree(null, "y", new Tree[] { })})})})})})})}),
+ new Tree(null, "::=", new Tree[] { new Tree(null, "sify", 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, "alternatives", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "=>", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\\", new Tree[] { }),
+ new Tree(null, "n", new Tree[] { })})})})}),
+ new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\n", new Tree[] { })})})}),
+ new Tree(null, "=>", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\\", new Tree[] { }),
+ new Tree(null, "r", new Tree[] { })})})})}),
+ new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\r", new Tree[] { })})})}),
+ new Tree(null, "rewrite", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "literal", new Tree[] { new Tree(null, "sify", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "\\", new Tree[] { })})})}),
+ new Tree(null, "range", new Tree[] { new Tree(null, "~", new Tree[] { }),
+ new Tree(null, null, new Tree[] { new Tree(null, "range0", new Tree[] { new Tree(null, "n", new Tree[] { })}),
+ new Tree(null, "range0", new Tree[] { new Tree(null, "r", new Tree[] { })})})})})})})})})})})}),
+ new Tree(null, null, new Tree[] { new Tree(null, null, new Tree[] { })})})
+ // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED
+ ;
+}
+
+
+
+
+
+