boolean closed = false;
- public Phase(Phase previous, Token token) {
+ private Token.Location location;
+ public Phase(Phase previous, Token token, Token.Location location) {
this.pos = previous==null ? 0 : previous.pos+1;
this.token = token;
+ this.location = location;
}
public boolean isDone() { return token == null; }
throw new Parser.Failed(error, getLocation());
}
- public Token.Location getLocation() { return token==null ? null : token.getLocation(); }
+ public Token.Location getLocation() { return location; }
/** add a new node (merging with existing nodes if possible)
* @param parent the parent of the new node
}
/** perform all shift operations, adding promoted nodes to <tt>next</tt> */
- public void shift(Phase next) {
+ public void shift(Phase next, Forest result) {
closed = true;
Forest res = null;
boolean ok = false;
if (!n.holder.valid()) continue;
if (token == null) continue;
for(Parser.Table.State st : n.state.getShifts(token)) {
- if (res == null) res = Forest.create(token.getLocation(), token.result(), null, null, false, false);
+ if (res == null) res = result;
next.newNode(n, res, st, true, this);
ok = true;
}