- abstract Sequence _clone();
- Sequence dup() {
- Sequence ret = _clone();
- for(Sequence s : needs) { ret.needs.add(s); s.needed.add(ret); }
- for(Sequence s : hates) { ret.hates.add(s); s.hated.add(ret); }
- ret.noFollow = noFollow;
- return ret;
- }
+ boolean needed_or_hated = false;
+ boolean in_a_union = false;
+
+ final HashSet<Sequence> needs = new HashSet<Sequence>();
+ final HashSet<Sequence> hates = new HashSet<Sequence>();
+
+ // FIXME: these are ugly -- migrate into Grammar
+ HashMap<Sequence,Boolean> canNeed = new HashMap<Sequence,Boolean>();
+ HashMap<Sequence,Boolean> canKill = new HashMap<Sequence,Boolean>();
+
+ final Position firstp;