- public static class Table<Tok> extends Walk.Cache {
-
- public final Walk.Cache cache = this;
-
- public void optimize(Functor<Tok,Integer> f) {
- for(State<Tok> state : all_states.values()) {
- state.oreductions = state.reductions.optimize(f);
- state.oshifts = state.shifts.optimize(f);
+ static class Table<Token> extends Walk.Cache {
+
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("parse table");
+ for(State<Token> state : all_states) {
+ sb.append(" " + state + "\n");
+ for(Topology<Token> t : state.shifts) {
+ sb.append(" shift \""+
+ new edu.berkeley.sbp.chr.CharTopology((IntegerTopology<Character>)t)+"\" => ");
+ for(State st : state.shifts.getAll(t))
+ sb.append(st.idx+" ");
+ sb.append("\n");
+ }
+ for(Topology<Token> t : state.reductions)
+ sb.append(" reduce \""+
+ new edu.berkeley.sbp.chr.CharTopology((IntegerTopology<Character>)t)+"\" => " +
+ state.reductions.getAll(t) + "\n");
+ for(Sequence s : state.gotoSetNonTerminals.keySet())
+ sb.append(" goto "+state.gotoSetNonTerminals.get(s)+" from " + s + "\n");