private static final Union SELF = new Union("()");
- public static Union epsilon = new Union("()");
- static { epsilon.add(Sequence.empty); }
-
////////////////////////////////////////////////////////////////////////////////
private Union g;
public PreSequence _amp_(PreSequence p, Object[] o) { return p.and(new PreSequence(o, null).buildSequence(null, true, false, true)); }
public PreSequence _amp__tilde_(PreSequence p, Object[] o) { return p.not(new PreSequence(o, null).buildSequence(null, true, false, true)); }
public Object _star_(Element r) { return Repeat.many0(r); }
- public Element epsilon(Object o, Object b) { return epsilon; }
+ public Element epsilon(Object o, Object b) { return Union.epsilon; }
+ public Object _leftparen__rightparen_(Object o) { return Union.epsilon; }
public Element _rightparen_(Object e) { return SELF; }
public Element _bang_(Element r) { return r; }
public Object _caret_(String s) { return new MyLift(s); }
- public Object _leftparen__rightparen_(Object o) { return epsilon; }
public Union nonTerminal(String s) { return nonTerminal(s, null, false, false); }
public Union _colon__colon__equals_(String s, PreSequence[][] p) { return nonTerminal(s, p, false, false); }
public Union _bang__colon__colon__equals_(String s, PreSequence[][] p) { return nonTerminal(s, p, false, true); }
public PreSequence sparse(Object e) {
Object[] ret;
- if (o.length <= 1) ret = o;
- else {
+ 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<o.length; i++) {
Object oi = o[i];
ret[i*2] = oi;
- if (i*2+1<ret.length) ret[i*2+1] = new MyDrop(e);
+ drops[i*2] = this.drops[i];
+ if (i*2+1<ret.length) {
+ ret[i*2+1] = e;
+ drops[i*2+1] = true;
+ }
}
}
- PreSequence p = new PreSequence(ret, tag);
+ 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; }
+ 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 = o; this.tag = tag; }
+ 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 Union buildUnion() {
Union u = new Union("???");
HashSet<Sequence> set = new HashSet<Sequence>();
Element[] o2 = o==null ? new Element[0] : new Element[o.length];
int nonDrop = 0;
- boolean[] drops = null;
if (o != null) {
- drops = new boolean[o.length];
int j = 0;
for(int i=0; i<o.length; i++) {
Object oi = o[i];
+
// 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, "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, 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, 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, "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, null, new Tree[] { new Tree(null, "p", 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, "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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", 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, "p", new Tree[] { }),
new Tree(null, "s", 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, "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, "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, "ps", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "^", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "!", new Tree[] { })})}),
- 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, "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, "nonTerminal", new Tree[] { new Tree(null, null, new Tree[] { new Tree(null, "w", new Tree[] { }),
new Tree(null, "s", new Tree[] { })})}),
+