X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FParseFailed.java;h=80007124687172f0974c228b172e8309a0c31729;hp=547ea95e16582075f6117bfede6de5c4142924ce;hb=2afdfe14e78fa0597186614937c679a09d74ecdf;hpb=62be1c1ae2ac13086b508e34eeffdb7e536d5b61 diff --git a/src/edu/berkeley/sbp/ParseFailed.java b/src/edu/berkeley/sbp/ParseFailed.java index 547ea95..8000712 100644 --- a/src/edu/berkeley/sbp/ParseFailed.java +++ b/src/edu/berkeley/sbp/ParseFailed.java @@ -4,7 +4,7 @@ package edu.berkeley.sbp; import edu.berkeley.sbp.*; import edu.berkeley.sbp.Sequence.Position; import edu.berkeley.sbp.GSS.Phase; -import edu.berkeley.sbp.GSS.Phase.Node; +import edu.berkeley.sbp.Node; import edu.berkeley.sbp.util.*; import java.io.*; import java.util.*; @@ -39,32 +39,35 @@ public class ParseFailed extends Exception { if (p.element() == null) return false; if (!(p.element() instanceof Union)) return false; Union u = (Union)p.element(); - if (u.synthetic) return false; - if (u.name==null) return false; - if (u.name.length() == 0) return false; - char c = u.name.charAt(0); + if (u.isSynthetic()) return false; + if (u.getName()==null) return false; + if (u.getName().length() == 0) return false; + char c = u.getName().charAt(0); return (c >= 'A' && c <= 'Z'); } - static void barf(HashMap sb, GSS.Phase.Node n, int indent, boolean skip, int count, Input.Location loc) { + static void barf(HashMap sb, Node n, int indent, boolean skip, int count, Input.Location loc) { if (count <= 0) { barf(sb, n, indent, skip, loc); } else { - for(GSS.Phase.Node nn : n.parents()) - barf(sb, nn, indent, skip, count-1, nn.phase().getPrevLocation()); + /* + FIXME: removed + for(Node nn : (Iterable)n.parents()) + barf(sb, nn, indent, skip, count-1, n.phase().getLocation()); + */ } } - static void barf(HashMap sb, GSS.Phase.Node n, int indent, boolean skip, Input.Location loc) { + static void barf(HashMap sb, Node n, int indent, boolean skip, Input.Location loc) { if (touched.contains(n)) return; touched.add(n); String s = ""; for(int i=0; i< indent; i++) s += " "; - GSS.Phase.Node parent = n; + Node parent = n; boolean done = false; boolean alldone = false; boolean go = false; boolean force = false; - for(Position p : parent.state) { + for(Position p : (Iterable)parent.state()) { if (skip) p = p.next(); int raise = 0; done = false; @@ -80,9 +83,9 @@ public class ParseFailed extends Exception { /* else if (p.pos-raise > 0) barf(sb, n, indent, false, 1); - */ - if (!new Walk.Cache().possiblyEpsilon(p.element())) + if (!new Grammar(null, null).possiblyEpsilon(p.element())) break; + */ p = p.next(); raise++; if (p.isLast()) { @@ -97,16 +100,21 @@ public class ParseFailed extends Exception { // FIXME - private static HashSet touched = new HashSet(); - static void complain(GSS.Phase.Node n, HashMap> errors, boolean force, int indent) { + private static HashSet touched = new HashSet(); + static void complain(Node n, HashMap> errors, boolean force, int indent) { if (touched.contains(n)) return; touched.add(n); - for(Position p : n.state) { + for(Position p : (Iterable)n.state()) { //if (!p.isLast() && !p.next().isLast()) continue; if (((p.isFirst() || p.isLast()) && !force)/* || p.owner().name==null*/ || !important(p)) { + /* + FIXME: removed for(Node n2 : n.parents()) - complain(n2, errors, force /*| p.isFirst()*/, indent); + complain(n2, errors, force + //| p.isFirst() + , indent); + */ } else { String seqname = p.owner()/*.name*/+""; HashSet hs = errors.get(seqname); @@ -130,36 +138,39 @@ public class ParseFailed extends Exception { return ANSI.purple(ret.toString()); } - static void error(String message, - Input.Location loc, - Object token, - Iterable nodes, - Input.Region region, - Input input, - GSS gss) throws ParseFailed{ + static void error(String message, GSS.Phase phase, Object token, Input.Region region) throws ParseFailed { + error(message, + token, + phase, + region, + phase.getGSS().getInput(), + phase.getGSS()); + } + private static void error(String message, + Object token, + Iterable nodes, + Input.Region region, + Input input, + GSS gss) throws ParseFailed{ String lookAhead = token==null ? "" : token.toString(); StringBuffer ret = new StringBuffer(); ret.append(ANSI.bold(ANSI.red(message))); - if (token != null) { - ret.append(" \'"); - ret.append(ANSI.cyan(StringUtil.escapify(token+"", "\\\'\r\n"))); - ret.append("\'"); - } + String toks = token+""; ret.append(" at "); ret.append(ANSI.yellow(region+"")); if (input != null) { ret.append('\n'); ret.append(" text: "); int budget = 60; - String second = input.showRegion(region); + String second = input.showRegion(region, 60); budget -= second.length(); Input.Location after = region.getEnd(); for(int i=0; i<10; i++) after = after.next() == null ? after : after.next(); - String third = input.showRegion(region.getEnd().createRegion(after)); + String third = input.showRegion(region.getEnd().createRegion(after), 60); budget -= third.length(); Input.Location before = region.getStart(); for(int i=0; i hm = new HashMap(); for(Node no : nodes) - barf(hm, no, 0, false, /*region.getStart()*/loc); + barf(hm, no, 0, false, region.getStart()); ret.append("\n expected: "); Set hs = hm.keySet(); if (hs.size() == 1) { @@ -186,8 +197,8 @@ public class ParseFailed extends Exception { } else { ret.append("\n or " + ANSI.purple(s)); } - Input.Region reg = loc2.createRegion(region.getStart()); - ret.append(" to match \"" + ANSI.cyan(input.showRegion(reg)) + "\" at " + ANSI.yellow(reg)); + Input.Region reg = loc2.createRegion(region.getEnd()); + ret.append(" to match \"" + ANSI.cyan(input.showRegion(reg, 60)) + "\" at " + ANSI.yellow(reg)); i++; } }