X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FGSS.java;h=a5d6f88391dcdff2b95d6d003535dfd7db48817c;hp=d25593ffb592e393f0f3ce70e811671c23921c7f;hb=2a11d8ca5ae3af89ac2bdea58f71e463b6e4affe;hpb=3473141880127c6aa52d094d51739e5eb67f1703 diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index d25593f..a5d6f88 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -43,12 +43,12 @@ class GSS { private boolean good; private Phase next = null; private Phase prev; - private Token.Location location; + private Input.Location location; public final Parser parser; private Forest forest; - public Phase(Phase prev, Parser parser, Phase previous, Tok token, Token.Location location, Forest forest) { + public Phase(Phase prev, Parser parser, Phase previous, Tok token, Input.Location location, Forest forest) throws ParseFailed { this.prev = prev; this.forest = forest; this.parser = parser; @@ -59,7 +59,7 @@ class GSS { reset(); } - public void reset() { + public void reset() throws ParseFailed { waiting.clear(); performed.clear(); hash = new IntPairMap(); @@ -81,7 +81,7 @@ class GSS { return true; } - public Token.Location getLocation() { return location; } + public Input.Location getLocation() { return location; } /** add a new node (merging with existing nodes if possible) * @param parent the parent of the new node @@ -183,7 +183,7 @@ class GSS { } /** perform all reduction operations */ - public void reduce() { + public void reduce() throws ParseFailed{ try { reducing = true; if (reducing_list==null || reducing_list.length < hash.size()) @@ -234,7 +234,10 @@ class GSS { } if (!good && token!=null) - throw new ParseFailed(ParseFailed.error(ANSI.red("unexpected character")+" "+ANSI.purple(token)+" encountered at "+ANSI.green(getLocation())+"\n", token, hash.values()), + throw new ParseFailed(ParseFailed.error(ANSI.red("unexpected character ")+" \'"+ + ANSI.purple(StringUtil.escapify(token+"", "\\\'\r\n"))+ + "\' encountered at "+ + ANSI.green(getLocation())+"\n", token, hash.values()), getLocation()); if (token==null && finalResult==null) throw new ParseFailed(ParseFailed.error(ANSI.red("unexpected end of file\n"), token, hash.values()), @@ -290,6 +293,7 @@ class GSS { else state.invokeReductions(token, this, this, n2); } + public void performEmptyReductions() { state.invokeReductions(token, this, null, null); } public final void invoke(Position r, Node n, Node n2) { if (n==null || n2==null || r.pos==0) { if (r.pos==0) { @@ -348,8 +352,6 @@ class GSS { target.newNode(this, result, state0, r.pos<=0, r); } - public void performEmptyReductions() { state.invokeReductions(token, this, null, null); } - private Node(Node parent, Forest pending, State state) { this.state = state; this.holder().merge(pending);