checkpoint
[sbp.git] / src / edu / berkeley / sbp / Parser.java
index c5ebd7e..0d14563 100644 (file)
@@ -15,7 +15,7 @@ public abstract class Parser<Tok, Result> {
     protected Parser(Table<Tok> pt)               { this.pt = pt; }
 
     /** implement this method to create the output forest corresponding to a lone shifted input token */
-    public abstract Forest<Result> shiftToken(Tok t, Input.Location loc);
+    public abstract Forest<Result> shiftToken(Input.Location oldloc, Tok t, Input.Location newloc);
 
     public boolean helpgc = true;
 
@@ -29,9 +29,10 @@ public abstract class Parser<Tok, Result> {
         current.newNode(null, Forest.leaf(null, null, null), pt.start, true);
         int count = 1;
         for(int idx=0;;idx++) {
+            Input.Location oldloc = loc;
             loc = input.getLocation();
             current.reduce();
-            Forest forest = current.token==null ? null : shiftToken((Tok)current.token, loc);
+            Forest forest = current.token==null ? null : shiftToken(oldloc, (Tok)current.token, loc);
             GSS.Phase next = gss.new Phase<Tok>(current, this, current, input.next(), loc, forest);
             if (!helpgc) {
                 FileOutputStream fos = new FileOutputStream("out-"+idx+".dot");