From a0443929fbf2251ca64cd44287a800915386d1f8 Mon Sep 17 00:00:00 2001 From: adam Date: Tue, 11 Apr 2006 17:28:35 -0400 Subject: [PATCH] checkpoint darcs-hash:20060411212835-5007d-cb10c73989ea290dc33a704500eac1cbac37d9e9.gz --- src/edu/berkeley/sbp/GSS.java | 39 ++++++++++++++-------------- src/edu/berkeley/sbp/misc/MetaGrammar.java | 16 ++++++++++++ 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 2154731..02f521e 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -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(); - 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(); diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index d73586b..1ef7ff0 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -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 + + + + + + + + -- 1.7.10.4