removed illegal use of double-star
[sbp.git] / src / edu / berkeley / sbp / Walk.java
index 5754726..cfd9c31 100644 (file)
@@ -52,7 +52,7 @@ abstract class Walk<T> {
         public HashSet<Element> bottom(Element e)     { return acc; }
         public HashSet<Element> sequence(Sequence seq) { return bottom(seq); }
         public HashSet<Element> walkAtom(Atom r) {
-            c.atoms.put(e, c.atoms.get(e)==null ? r.top() : c.atoms.get(e).union(r.top()));
+            c.atoms.put(e, c.atoms.get(e)==null ? r.dup() : c.atoms.get(e).union(r.dup()));
             return super.walkAtom(r);
         }
     }
@@ -83,7 +83,7 @@ abstract class Walk<T> {
         public WalkTokenSet(Topology<Tok> cs)          { this.cs = cs; }
         public WalkTokenSet(Topology<Tok> cs, Cache c) { super(c); this.cs = cs; }
         public Topology<Tok> bottom(Element e)         { return cs; }
-        public Topology<Tok> walkAtom(Atom r)          { cs.add(r.top()); return cs; }
+        public Topology<Tok> walkAtom(Atom r)          { cs.add(r.dup()); return cs; }
     }
 
     class First<Tok extends Token> extends WalkTokenSet<Tok> {
@@ -152,7 +152,7 @@ abstract class Walk<T> {
                     if (e instanceof Atom) {
                         Topology top = c.atoms.get(pos.element());
                         if (top==null) continue;
-                        if (!(top.containsAll(((Atom)e).top()))) continue;
+                        if (!(top.containsAll(((Atom)e).dup()))) continue;
                     } else {
                         if (c.ys.get(pos.element()).contains(e)) good = true;
                     }
@@ -166,7 +166,12 @@ abstract class Walk<T> {
 
             if (e instanceof Repeat.MaximalSequence || e instanceof Repeat.Maximal)
                 cs.remove(new Last<Tok>(cs.fresh(), c).walk(e));
-
+            /*
+            if (e instanceof Sequence) {
+                Sequence s = (Sequence)e;
+                if (s.noFollow() != null) cs.remove(s.noFollow());
+            }
+            */
             if (c != null && e==me) {
                 c.follow.put(e, cs.dup());
                 c.eof.put(e, eof);