checkpoint
authoradam <adam@megacz.com>
Tue, 11 Apr 2006 21:28:35 +0000 (17:28 -0400)
committeradam <adam@megacz.com>
Tue, 11 Apr 2006 21:28:35 +0000 (17:28 -0400)
darcs-hash:20060411212835-5007d-cb10c73989ea290dc33a704500eac1cbac37d9e9.gz

src/edu/berkeley/sbp/GSS.java
src/edu/berkeley/sbp/misc/MetaGrammar.java

index 2154731..02f521e 100644 (file)
@@ -159,33 +159,27 @@ class GSS {
         }
 
         public void inhibit(int p, Sequence s) {
+            if (inhibited.contains(p, s)) return;
+            inhibited.add(p, s);
             if (s.hated!=null)
                 for(Sequence s2 : s.hated)
-                    inhibited.remove(p, s2);
+                    uninhibit(p, s2);
+            if (s.needed!=null)
+                for(Sequence s2 : s.needed)
+                    if (performed.contains(p, s2))
+                        throw new Reset();
+            if (performed.contains(p, s)) throw new Reset();
         }
 
-        public void uninhibit(Position r, int p) {
-            if (r.owner().hated == null) return;
-            // remember that dead states are still allowed to shift -- just not allowed to reduce
-            boolean reset = false;
-            for(Sequence seq : r.owner().hated) {
-                if (performed.contains(p,seq)) {
+        public void uninhibit(Position r, int p) { uninhibit(p, r.owner()); }
+        public void uninhibit(int p, Sequence s) {
+            if (s.hated != null)
+                for(Sequence seq : s.hated)
                     inhibit(p, seq);
-                    //System.out.println("\nresetting due to " + r.owner() + " killing " + seq);
-                    //inhibited.clear();
-                    inhibited.add(p, seq);
-                    //inhibited = new HashMapBag<Integer,Sequence>();
-                    reset = true;
-                    resets++;
-                    throw new Reset();
-                }
-                inhibited.add(p, seq);
-                expectedInhibit.remove(p, seq);
-            }
         }
         
         /** perform all reduction operations */
-        public void reduce() throws ParseFailed{
+        public void reduce() throws ParseFailed {
             try {
                 reducing = true;
                 if (reducing_list==null || reducing_list.length < hash.size())
@@ -202,11 +196,18 @@ class GSS {
                     reducing_list[i] = null;
                     n.performReductions();
                 }
+                /*
                 if (expectedInhibit.size() > 0) {
                     inhibited.removeAll(expectedInhibit);
                     System.out.println("\n!!!!\n");
                     throw new Reset();
                 }
+                */
+                if (reset) {
+                    reset = false;
+                    resets++;
+                    throw new Reset();
+                }                
             } catch (Reset r) {
                 reset();
                 reduce();
index d73586b..1ef7ff0 100644 (file)
@@ -543,6 +543,14 @@ public class MetaGrammar extends StringWalker {
 
 
 
+
+
+
+
+
+
+
+
         // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED
 new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "=", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })}),
         new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "psx", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "ps", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "!", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "nonTerminal", new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, null, new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
@@ -1220,3 +1228,11 @@ new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu
 
 
 
+
+
+
+
+
+
+
+