X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FAmbiguous.java;h=8f7fb249225caa5b2aae658b1ea35aae5c5fe89c;hp=56e1af7a53099b30a27c88582c6e6e8faedc2945;hb=HEAD;hpb=a22c5074e705e3ffcf03e9f9d174aed8ef79fc91 diff --git a/src/edu/berkeley/sbp/Ambiguous.java b/src/edu/berkeley/sbp/Ambiguous.java index 56e1af7..8f7fb24 100644 --- a/src/edu/berkeley/sbp/Ambiguous.java +++ b/src/edu/berkeley/sbp/Ambiguous.java @@ -1,19 +1,34 @@ +// Copyright 2006-2007-2007 all rights reserved; see LICENSE file for BSD-style license + package edu.berkeley.sbp; -import edu.berkeley.sbp.*; import edu.berkeley.sbp.util.*; -import edu.berkeley.sbp.Sequence.Position; -import java.io.*; import java.util.*; -/** if ambiguity checking is enabled, this exception is thrown to signal that the parse was ambiguous */ -public class Ambiguous extends RuntimeException { - public final Forest ambiguity; - public Ambiguous(Forest ambiguity) { this.ambiguity = ambiguity; } +/** thrown to signal that a parse was ambiguous */ +public class Ambiguous extends Exception { + + private final Forest ambiguity; + private final HashSet> possibilities; + + /** + * @param possibilities is a specially-constructed set of trees with shared nodes replaced by '*' + */ + Ambiguous(Forest ambiguity, HashSet> possibilities) { + this.ambiguity = ambiguity; + this.possibilities = possibilities; + } + + public Forest getForest() { return ambiguity; } + public String toString() { StringBuffer sb = new StringBuffer(); - sb.append("unresolved ambiguity "/*"at " + ambiguity.getLocation() + ":"*/); - for(Object result : ambiguity.expand(false)) - sb.append("\n " + result); + sb.append("unresolved ambiguity at "+ambiguity.getRegion()+"; shared subtrees are shown as \"*\" "); + for(Tree result : possibilities) { + sb.append("\n possibility: "); + StringBuffer sb2 = new StringBuffer(); + result.toPrettyString(sb2); + sb.append(StringUtil.indent(sb2.toString(), 15)); + } return sb.toString(); } }