From 035891a122d39983bf9f521acbf4661eb84aacd6 Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 11 Feb 2006 04:50:20 -0500 Subject: [PATCH] fixed the ugly comma bug; still unsure of the ultimate solution darcs-hash:20060211095020-5007d-dcefaed5deef35138c978cb72514cb78afe29d8b.gz --- src/edu/berkeley/sbp/Forest.java | 10 +++++++++- src/edu/berkeley/sbp/GSS.java | 34 ++++++++++++++-------------------- tests/input.tibdoc | 2 +- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index e74d81e..98e8e4b 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -7,7 +7,11 @@ import java.util.*; import java.lang.reflect.*; /** an efficient representation of a collection of trees (Tomita's shared packed parse forest) */ -public abstract class Forest /*extends PrintableTree>*/ implements Visitable> { +public abstract class Forest /*extends PrintableTree>*/ implements Visitable>, IntegerMappable { + + private static int master_idx = 0; + private final int idx = master_idx++; + public int toInt() { return idx; } /** assume that this forest contains exactly one tree and return it; otherwise throw an exception */ public final Tree expand1() throws Ambiguous, ParseFailed { @@ -125,6 +129,10 @@ public abstract class Forest /*extends PrintableTree>*/ impl static class Ref extends Forest { private FastSet> hp = new FastSet>(); public Ref() { } + public int toInt() { + if (hp.size()==1) return hp.iterator().next().toInt(); + return super.toInt(); + } public void merge(Forest p) { if (p!=this) hp.add(p, true); } public void visit(Invokable,B,C> ivbc, B b, C c) { if (hp==null) return; diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index a5d6f88..1d91f89 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -308,39 +308,33 @@ class GSS { Forest[] holder = new Forest[r.pos]; if (r.pos<=0) throw new Error("called wrong form of reduce()"); int pos = r.pos-1; - Forest old = holder[pos]; - holder[pos] = n.pending(); - if (pos==0) { - System.arraycopy(holder, 0, r.holder, 0, holder.length); - Forest rex = null; - if (r.pos==1) rex = singularReductions.get(this, r); - if (rex==null) { - rex = r.rewrite(n.phase().getLocation()); - if (r.pos==1) singularReductions.put(this, r, rex); - } - n2.finish(r, rex, n.phase(), holder); - } else { - n2.reduce(r, pos-1, n.phase(), holder); - } - holder[pos] = old; + n.reduce(r, pos, n.phase(), holder, n2); } } - public void reduce(Position r, int pos, Phase target, Forest[] holder) { + public void reduce(Position r, int pos, Phase target, Forest[] holder) { reduce(r, pos, target, holder, null); } + public void reduce(Position r, int pos, Phase target, Forest[] holder, Node only) { Forest old = holder[pos]; holder[pos] = this.pending(); if (pos==0) { System.arraycopy(holder, 0, r.holder, 0, holder.length); for(int i=0; iadam@megacz.com with a !hyperlink to it! - The following demonstrates verbatim stuff [Knu68] as + The following demonstrates verbatim stuff [Knu68], as well as a footnote ((like)) because are coool in an O(n^^3) way. -- 1.7.10.4