X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FParseFailed.java;h=619bf65f88ae2465a6b3e9ce49c71a73c04d2324;hb=fa858dc4acddd3e32126ff2558e0860315a84758;hp=75baf3af91a02d5fb442ff4791b8f9f9ee7664e7;hpb=6a2ea790f843e058c7e67d3c7d1deebadcfe1fd5;p=sbp.git diff --git a/src/edu/berkeley/sbp/ParseFailed.java b/src/edu/berkeley/sbp/ParseFailed.java index 75baf3a..619bf65 100644 --- a/src/edu/berkeley/sbp/ParseFailed.java +++ b/src/edu/berkeley/sbp/ParseFailed.java @@ -8,7 +8,8 @@ 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 { +public class ParseFailed extends Exception { + private final Input.Location location; private final String message; public ParseFailed() { this("", null); } @@ -16,15 +17,17 @@ public class ParseFailed extends RuntimeException { public Input.Location getLocation() { return location; } public String toString() { return message/* + (location==null ? "" : (" at " + location))*/; } + // FIXME + private static HashSet touched = new HashSet(); public static void complain(GSS.Phase.Node n, HashMap> 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 hs = errors.get(seqname); if (hs==null) errors.put(seqname, hs = new HashSet()); hs.add(p.element()+"");