unrolling forests without recursion
[sbp.git] / src / edu / berkeley / sbp / ParseFailed.java
index 9c0a3ad..d1e60ae 100644 (file)
@@ -8,23 +8,26 @@ import java.io.*;
 import java.util.*;
 
 /** thrown when the parser arrives at a state from which it is clear that no valid parse can result */
-public class ParseFailed extends RuntimeException {
-    private final Token.Location location;
+public class ParseFailed extends Exception {
+
+    private final Input.Location location;
     private final String message;
     public ParseFailed() { this("", null); }
-    public ParseFailed(String message, Token.Location loc) { this.location = loc; this.message = message; }
-    public Token.Location getLocation() { return location; }
+    public ParseFailed(String message, Input.Location loc) { this.location = loc; this.message = message; }
+    public Input.Location getLocation() { return location; }
     public String toString() { return message/* + (location==null ? "" : (" at " + location))*/; }
 
+    // FIXME
+    private static HashSet<GSS.Phase.Node> touched = new HashSet<GSS.Phase.Node>();
     public static <Tok> void complain(GSS.Phase<Tok>.Node n, HashMap<String,HashSet<String>> errors, boolean force) {
-        //if (n.touched) return;
-        //n.touched = true;
+        if (touched.contains(n)) return;
+        touched.add(n);
         for(Position p : n.state) {
-            if (((p.isFirst() || p.isLast()) && !force) || p.owner().name==null) {
+            if (((p.isFirst() || p.isLast()) && !force)/* || p.owner().name==null*/) {
                 for(Node n2 : n.parents())
                     complain(n2, errors, force | p.isFirst());
             } else {
-                String seqname = p.owner().name;
+                String seqname = p.owner()/*.name*/+"";
                 HashSet<String> hs = errors.get(seqname);
                 if (hs==null) errors.put(seqname, hs = new HashSet<String>());
                 hs.add(p.element()+"");
@@ -34,7 +37,7 @@ public class ParseFailed extends RuntimeException {
 
     public static String el(Object e) {
         String s = e.toString();
-        if (s.length()==0 || s.charAt(0)!='\"' || s.charAt(s.length()-1)!='\"') return ANSI.yellow(s);
+        if (s.length()==0 || s.charAt(0)!='\"' || s.charAt(s.length()-1)!='\"') return /*ANSI.yellow(s)*/s;
         s = s.substring(1);
         s = s.substring(0, s.length()-1);
         StringBuffer ret = new StringBuffer();
@@ -42,13 +45,14 @@ public class ParseFailed extends RuntimeException {
             if (s.charAt(i)=='\\' && i<s.length()-1) ret.append(s.charAt(++i));
             else ret.append(s);
         }
-        return ANSI.purple(ret.toString());
+        return /*ANSI.purple(ret.toString())*/ret.toString();
     }
     public static String error(String message, Object token, Iterable<Node> nodes) {
         String lookAhead = token==null ? "<EOF>" : token.toString();
         StringBuffer ret = new StringBuffer();
         ret.append("\n  ");
         ret.append(message);
+        /*
         HashMap<String,HashSet<String>> errors = new HashMap<String,HashSet<String>>();
         for(Node n : nodes) {
             //System.out.println(n.state);
@@ -69,6 +73,7 @@ public class ParseFailed extends RuntimeException {
                 ret.append("\n");
             }
         }
+        */
         return ret.toString();
     }