From eda544585c2304faa82d249c4744fd5cecbf9211 Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 15 Apr 2006 05:41:56 -0400 Subject: [PATCH] checkpoint darcs-hash:20060415094156-5007d-dbb8f07d430d33213ae32bad64a60936fe5c2610.gz --- src/edu/berkeley/sbp/Forest.java | 2 +- src/edu/berkeley/sbp/GSS.java | 29 ++++++++++++++++++++++++---- src/edu/berkeley/sbp/misc/MetaGrammar.java | 8 ++++++++ src/edu/berkeley/sbp/util/GraphViz.java | 2 +- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index 3790562..9dabf60 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -71,7 +71,7 @@ public abstract class Forest /*extends PrintableTree>*/ public GraphViz.Node toGraphViz(GraphViz gv) { if (gv.hasNode(this)) return gv.createNode(this); GraphViz.Node n = gv.createNode(this); - n.label = headToString()==null?"":headToString(); + n.label = StringUtil.escapify(headToString()==null?"":headToString(), "\r\n"); n.directed = true; n.comment = reduction==null?null:reduction+""; edges(n); diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 02f521e..87bcf04 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -21,6 +21,7 @@ class GSS { HashMapBag expectedInhibit = new HashMapBag(); HashMapBag waiting = new HashMapBag(); HashMapBag performed = new HashMapBag(); + HashMapBag lastperformed = new HashMapBag(); /** FIXME */ public Forest.Ref finalResult; @@ -62,6 +63,8 @@ class GSS { public void reset() throws ParseFailed { waiting.clear(); + lastperformed.clear(); + lastperformed.addAll(performed); performed.clear(); hash = new IntPairMap(); singularReductions = new IntPairMap(); @@ -101,6 +104,14 @@ class GSS { int pos = parent==null?0:parent.phase()==null?0:parent.phase().pos; Sequence owner = reduction==null ? null : reduction.owner(); if (reduction!=null) { + if (owner.hates!=null) { + for (Sequence s : lastperformed.getAll(pos)) + if (owner.hates.contains(s)) + return; + for (Sequence s : performed.getAll(pos)) + if (owner.hates.contains(s)) + return; + } if (inhibited.contains(pos, owner)) return; if (owner.needs != null) for(Sequence s : owner.needs) @@ -108,14 +119,16 @@ class GSS { waiting.add(s, new Waiting(parent, pending, state, fromEmptyReduction, reduction)); return; } + /* if ((owner.needed != null && owner.needed.size()>0) || (owner.hated != null && owner.hated.size()>0) || (owner.hates != null && owner.hates.size()>0)) performed.add(pos, owner); + */ } + if (reduction!=null) uninhibit(reduction, parent==null?0:parent.phase().pos); if (!owner.lame) newNode(parent, pending, state, fromEmptyReduction); - if (reduction!=null) uninhibit(reduction, parent==null?0:parent.phase().pos); if (reduction != null) { boolean redo = true; while(redo) { @@ -159,11 +172,13 @@ class GSS { } public void inhibit(int p, Sequence s) { - if (inhibited.contains(p, s)) return; - inhibited.add(p, s); + //if (inhibited.contains(p, s)) return; + if (performed.contains(p, s)) throw new Reset(); + /* if (s.hated!=null) for(Sequence s2 : s.hated) uninhibit(p, s2); + */ if (s.needed!=null) for(Sequence s2 : s.needed) if (performed.contains(p, s2)) @@ -173,6 +188,8 @@ class GSS { public void uninhibit(Position r, int p) { uninhibit(p, r.owner()); } public void uninhibit(int p, Sequence s) { + if (performed.contains(p, s)) return; + performed.add(p, s); if (s.hated != null) for(Sequence seq : s.hated) inhibit(p, seq); @@ -198,8 +215,12 @@ class GSS { } /* if (expectedInhibit.size() > 0) { + System.out.println("\n!!!!"); + for(int i : expectedInhibit) + for(Sequence es : expectedInhibit.getAll(i)) + System.out.println(" " + i + ": " + es); + System.out.println(""); inhibited.removeAll(expectedInhibit); - System.out.println("\n!!!!\n"); throw new Reset(); } */ diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 1ef7ff0..972d3a1 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -551,6 +551,10 @@ 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[] { }), @@ -1236,3 +1240,7 @@ new edu.berkeley.sbp.Tree(null, "grammar", new edu.berkeley.sbp.Tree[] { new edu + + + + diff --git a/src/edu/berkeley/sbp/util/GraphViz.java b/src/edu/berkeley/sbp/util/GraphViz.java index ff8f46c..ef08fae 100644 --- a/src/edu/berkeley/sbp/util/GraphViz.java +++ b/src/edu/berkeley/sbp/util/GraphViz.java @@ -119,7 +119,7 @@ public class GraphViz { public void dump(PrintWriter pw) { IdentityHashMap done = new IdentityHashMap(); - pw.println("digraph G { rankdir=LR; \n"); + pw.println("digraph G { rankdir=LR; ordering=out; \n"); for(Group g : groups.values()) { pw.println(" { rank=same;\n"); for(Node n : groups.keySet()) -- 1.7.10.4