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.*;
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 <Tok> void barf(HashMap<Element,Input.Location> sb, GSS.Phase<Tok>.Node n, int indent, boolean skip, int count, Input.Location loc) {
+ static <Tok> void barf(HashMap<Element,Input.Location> 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<Tok>.Node nn : n.parents())
- barf(sb, nn, indent, skip, count-1, nn.phase().getPrevLocation());
+ /*
+ FIXME: removed
+ for(Node nn : (Iterable<Node>)n.parents())
+ barf(sb, nn, indent, skip, count-1, n.phase().getLocation());
+ */
}
}
- static <Tok> void barf(HashMap<Element,Input.Location> sb, GSS.Phase<Tok>.Node n, int indent, boolean skip, Input.Location loc) {
+ static <Tok> void barf(HashMap<Element,Input.Location> 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<Tok>.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<Position>)parent.state()) {
if (skip) p = p.next();
int raise = 0;
done = false;
/*
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()) {
// FIXME
- private static HashSet<GSS.Phase.Node> touched = new HashSet<GSS.Phase.Node>();
- static <Tok> void complain(GSS.Phase<Tok>.Node n, HashMap<String,HashSet<String>> errors, boolean force, int indent) {
+ private static HashSet<Node> touched = new HashSet<Node>();
+ static <Tok> void complain(Node n, HashMap<String,HashSet<String>> errors, boolean force, int indent) {
if (touched.contains(n)) return;
touched.add(n);
- for(Position p : n.state) {
+ for(Position p : (Iterable<Position>)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<String> hs = errors.get(seqname);
return ANSI.purple(ret.toString());
}
+ static void error(String message, GSS.Phase phase) throws ParseFailed {
+ error(message, phase.getLocation(), phase.getToken(),
+ phase, phase.getRegion(), phase.getGSS().getInput(), phase.getGSS());
+ }
static void error(String message,
Input.Location loc,
Object token,
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<budget; i++) before = before.prev() == null ? before : before.prev();
- String first = input.showRegion(before.createRegion(region.getStart()));
+ String first = input.showRegion(before.createRegion(region.getStart()), 60);
ret.append(ANSI.cyan(first));
ret.append(ANSI.invert(ANSI.red(second)));
ret.append(ANSI.cyan(third));
}
HashMap<Element,Input.Location> hm = new HashMap<Element,Input.Location>();
for(Node no : nodes)
- barf(hm, no, 0, false, /*region.getStart()*/loc);
+ barf(hm, no, 0, false, region.getStart());
ret.append("\n expected: ");
Set<Element> hs = hm.keySet();
if (hs.size() == 1) {
} 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++;
}
}