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();