+// 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.*;
/** 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<Tree<?>> ht;
+ Ambiguous(Forest<?> ambiguity, HashSet<Tree<?>> ht) {
this.ambiguity = ambiguity;
+ this.ht = ht;
}
+
+ public Forest<?> getAmbiguity() { return ambiguity; }
+
public String toString() {
- // FEATURE: more legible printout desperately needed
+ // FIXME: print the input region that was ambiguously matched
StringBuffer sb = new StringBuffer();
- sb.append("unresolved ambiguity ");
- HashSet<Forest> hf = new HashSet<Forest>();
- ambiguity.gather(hf);
- HashSet<Tree> ht = new HashSet<Tree>();
- ambiguity.expand(ht, hf, new Tree(null, "...", null, false));
+ sb.append("unresolved ambiguity at "+ambiguity.getRegion()+"; shared subtrees are shown as \"*\" ");
+ //sb.append("\noffending text: ");
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();
}