if (token==null) break;
int count = 0;
Parser.Table.Reduction r = null;
- if (!state.hasReductions(token)) return;
+ if (!state.canReduce(token)) return;
//if (count > 1) break;
//if (r.numPop == 0) break;
//r.reduce(pending, parent, null, Phase.this, null);
private TopologicalBag<Token,State> shifts = new TopologicalBag<Token,State>();
private boolean accept = false;
+ private TopologicalBag<Token,State> oshifts = shifts;
+ //private TopologicalBag<Token,Reduction> reductions2 = reductions;
+
// Interface Methods //////////////////////////////////////////////////////////////////////////////
public boolean isAccepting() { return accept; }
public boolean canShift(Token t) { return shifts.contains(t); }
- public Iterable<State> getShifts(Token t) { return shifts.get(t); }
-
- public Iterable<Reduction> getReductions(Token t) { return t==null ? eofReductions : reductions.get(t); }
- public boolean hasReductions(Token t) { return t==null ? eofReductions.size()>0 : reductions.has(t); }
+ public boolean canReduce(Token t) { return t==null ? eofReductions.size()>0 : reductions.has(t); }
public Iterator<Position> iterator() { return hs.iterator(); }
- public <B,C> void invokeShifts(Token t, Invokable<State,B,C> irbc, B b, C c) { shifts.invoke(t, irbc, b, c); }
+ public <B,C> void invokeShifts(Token t, Invokable<State,B,C> irbc, B b, C c) {
+ oshifts.invoke(t, irbc, b, c);
+ }
public <B,C> void invokeReductions(Token t, Invokable<Reduction,B,C> irbc, B b, C c) {
if (t==null) for(Reduction r : eofReductions) irbc.invoke(r, b, c);
else reductions.invoke(t, irbc, b, c);