X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FAmbiguous.java;h=bd87fd9ee4cd556da1248eef9f7bb46dc9f7130d;hb=b7cd03704a32c751575472eadfd433ce15694fce;hp=394aab6b27482a11aedd0d840df615e608b81e55;hpb=1b5d6cf8ab6963d50c168c9daeb7887b45a343ea;p=sbp.git diff --git a/src/edu/berkeley/sbp/Ambiguous.java b/src/edu/berkeley/sbp/Ambiguous.java index 394aab6..bd87fd9 100644 --- a/src/edu/berkeley/sbp/Ambiguous.java +++ b/src/edu/berkeley/sbp/Ambiguous.java @@ -1,3 +1,5 @@ +// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license + package edu.berkeley.sbp; import edu.berkeley.sbp.*; import edu.berkeley.sbp.util.*; @@ -7,21 +9,31 @@ import java.util.*; /** if ambiguity checking is enabled, this exception is thrown to signal that the parse was ambiguous */ public class Ambiguous extends Exception { - public final Forest ambiguity; - public Ambiguous(Forest ambiguity) { + + final Forest ambiguity; + private final HashSet> ht; + + /** + * @param ht a specially-constructed set of trees with shared nodes replaced by '*' + */ + Ambiguous(Forest ambiguity, HashSet> ht) { this.ambiguity = ambiguity; + this.ht = ht; } + + public Forest getAmbiguity() { return ambiguity; } + + /** WARNING: this method is not considered part of the "stable API"; it may be removed in the future */ + public Input.Region getRegion() { return ambiguity.getRegion(); } + public String toString() { - // FEATURE: more legible printout desperately needed StringBuffer sb = new StringBuffer(); - sb.append("unresolved ambiguity "); - HashSet hf = new HashSet(); - ambiguity.gather(hf); - HashSet ht = new HashSet(); - ambiguity.expand(ht, hf, new Tree(null, "...", null, false)); + sb.append("unresolved ambiguity at "+ambiguity.getRegion()+"; shared subtrees are shown as \"*\" "); for(Tree result : ht) { - sb.append("\n\n"); - result.toPrettyString(sb); + sb.append("\n possibility: "); + StringBuffer sb2 = new StringBuffer(); + result.toPrettyString(sb2); + sb.append(StringUtil.indent(sb2.toString(), 15)); } return sb.toString(); }