private final Table pt;
+ private static void reachable(Element e, HashSet<Position> h) {
+ if (e instanceof Atom) return;
+ for(Sequence s : ((Union)e))
+ reachable(s.firstp(), h);
+ }
+ private static void reachable(Position p, HashSet<Position> h) {
+ if (h.contains(p)) return;
+ h.add(p);
+ if (p.element() != null) reachable(p.element(), h);
+ }
+
//public Parser( Topology top) { this(new Table( top)); }
//public Parser(String s, Topology top) { this(new Table(s, top)); }
public HashSet<Position> closure() {
HashSet<Position> hp = new HashSet<Position>();
- start0.reachable(hp);
+ reachable(start0, hp);
return hp;
}
public Position firstPosition() { return start0seq.firstp(); }
if (position.isLast() || !(position.element() instanceof Atom)) continue;
Atom a = (Atom)position.element();
HashSet<Position> hp = new HashSet<Position>();
- position.next().reachable(hp);
+ reachable(position.next(), hp);
bag0.addAll(a.dup(), /*clo.walk()*/hp);
}
if (ys != null) {
for(Element y : ys) {
HashSet<Position> hp = new HashSet<Position>();
- p.next().reachable(hp);
+ reachable(p.next(), hp);
move.addAll(y, hp);
}
}