fix major bug: create YieldSet2 which does not consider needs/hates
[sbp.git] / src / edu / berkeley / sbp / Ambiguous.java
index 394aab6..bd87fd9 100644 (file)
@@ -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<Tree<?>> ht;
+
+    /**
+     *  @param ht a specially-constructed set of trees with shared nodes replaced by '*'
+     */
+    Ambiguous(Forest<?> ambiguity, HashSet<Tree<?>> 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<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 \"*\" ");
         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();
     }