X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FParser.java;h=adf24c46174a2d5408c17998d00c8a52aae191a5;hp=df94e8301093752745e1314b8dcee5d69b5a364a;hb=0620c2d97d6df986d74dbe13160afb1435096431;hpb=a16fa9866b4bd4fabd4082f1a81f31a352a8f4c2 diff --git a/src/edu/berkeley/sbp/Parser.java b/src/edu/berkeley/sbp/Parser.java index df94e83..adf24c4 100644 --- a/src/edu/berkeley/sbp/Parser.java +++ b/src/edu/berkeley/sbp/Parser.java @@ -162,11 +162,29 @@ public abstract class Parser { if (p.element() != null && p.element() instanceof Atom) state.shifts.addAll(state.gotoSetTerminals.subset(((Atom)p.element()).getTokenTopology())); } + if (top instanceof IntegerTopology) for(State state : all_states) { state.oreductions = state.reductions.optimize(((IntegerTopology)top).functor()); state.oshifts = state.shifts.optimize(((IntegerTopology)top).functor()); } + + // crude algorithm to assing an ordinal ordering to every position + ArrayList al = new ArrayList(); + for(State s : all_states) { + for(Object po : s) { + Sequence.Position p = (Sequence.Position)po; + if (al.contains(p)) continue; + int i=0; + for(; i 0) + break; + } + al.add(i, p); + } + } + for(int i=0; i