protected Parser(Union u) { this.pt = new Table(u, top()); }
protected Parser(Table pt) { this.pt = pt; }
- public abstract Forest<R> shiftedToken(T t);
+ public abstract Forest<R> shiftedToken(T t, Token.Location loc);
public abstract Topology<T> top();
/** parse <tt>input</tt>, using the table <tt>pt</tt> to drive the parser */
public Forest<R> parse(Token.Stream<T> input) throws IOException, Failed {
GSS gss = new GSS();
- GSS.Phase current = gss.new Phase(null, input.next());
+ Token.Location loc = input.getLocation();
+ GSS.Phase current = gss.new Phase(null, input.next(), loc);
current.newNode(null, null, pt.start, true, null);
for(;;) {
- GSS.Phase next = gss.new Phase(current, input.next());
+ loc = input.getLocation();
+ GSS.Phase next = gss.new Phase(current, input.next(), loc);
current.reduce();
- Forest forest = current.token==null ? null : shiftedToken((T)current.token);
+ Forest forest = current.token==null ? null : shiftedToken((T)current.token, loc);
current.shift(next, forest);
if (current.isDone()) return (Forest<R>)current.finalResult;
current.checkFailure();
public Failed() { this("", null); }
public Failed(String message, Token.Location loc) { this.location = loc; this.message = message; }
public Token.Location getLocation() { return location; }
- public String toString() { return message + (location==null ? "" : (" at " + location + "\n" + location.getContext())); }
+ public String toString() { return message + (location==null ? "" : (" at " + location)); }
}
public static class Ambiguous extends RuntimeException {