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 class Ambiguous extends Exception {
public final Forest ambiguity;
- public Ambiguous(Forest ambiguity) { this.ambiguity = ambiguity; }
+ public Ambiguous(Forest ambiguity) {
+ this.ambiguity = ambiguity;
+ }
public String toString() {
+ // FEATURE: more legible printout desperately needed
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 ");
+ HashSet<Forest> hf = new HashSet<Forest>();
+ ambiguity.gather(hf);
+ HashSet<Tree> ht = new HashSet<Tree>();
+ ambiguity.expand(ht, hf, new Tree(null, "...", null, false));
+ for(Tree<?> result : ht) {
+ sb.append("\n\n");
+ result.toPrettyString(sb);
+ }
return sb.toString();
}
}