X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FParser.java;h=632729e3744b5984b6c1bf9c5a2ea923f7c72b44;hb=aa467fd9d82ee4ab751a6ced1e4f48864f494e90;hp=60da9e4761d3626fe5b1eca9769ca49902c92524;hpb=d6269a7a0a5b3fe84e75725deaac560117ffc26e;p=sbp.git diff --git a/src/edu/berkeley/sbp/Parser.java b/src/edu/berkeley/sbp/Parser.java index 60da9e4..632729e 100644 --- a/src/edu/berkeley/sbp/Parser.java +++ b/src/edu/berkeley/sbp/Parser.java @@ -15,12 +15,12 @@ public abstract class Parser { protected Parser(Table pt) { this.pt = pt; } /** implement this method to create the output forest corresponding to a lone shifted input token */ - public abstract Forest shiftToken(Tok t, Token.Location loc); + public abstract Forest shiftToken(Tok t, Input.Location loc); /** parse input, using the table pt to drive the parser */ - public Forest parse(Token.Stream input) throws IOException, ParseFailed { + public Forest parse(Input input) throws IOException, ParseFailed { GSS gss = new GSS(); - Token.Location loc = input.getLocation(); + Input.Location loc = input.getLocation(); GSS.Phase current = gss.new Phase(null, this, null, input.next(1, 0, 0), loc, null); current.newNode(null, Forest.leaf(null, null), pt.start, true); int count = 1; @@ -42,13 +42,6 @@ public abstract class Parser { public final Walk.Cache cache = this; - public void optimize(Functor f) { - for(State state : all_states.values()) { - state.oreductions = state.reductions.optimize(f); - state.oshifts = state.shifts.optimize(f); - } - } - private void walk(Element e, HashSet hs) { if (e==null) return; if (hs.contains(e)) return; @@ -109,6 +102,11 @@ public abstract class Parser { if (p.element() != null && p.element() instanceof Atom) state.shifts.addAll(state.gotoSetTerminals.subset(((Atom)p.element()))); } + if (top instanceof IntegerTopology) + for(State state : all_states.values()) { + state.oreductions = state.reductions.optimize(((IntegerTopology)top).functor()); + state.oshifts = state.shifts.optimize(((IntegerTopology)top).functor()); + } } private boolean isRightNullable(Position p) {