package parse;

import java_cup.runtime.ComplexSymbolFactory.Location;

public class Loc {

   public final Location left;
   public final Location right;

   private Loc(Location left, Location right) {
      this.left = left;
      this.right = right;
   }

   public static Loc loc() {
      return loc(new Location(-1, -1));
   }

   public static Loc loc(Location left) {
      return loc(left, left);
   }

   public static Loc loc(Location left, Location right) {
      return new Loc(left, right);
   }

   @Override
   public String toString() {
      if (left.getUnit().equals("unknown") && right.getUnit().equals("unknown"))
         return String.format("%d/%d-%d/%d",
                              left.getLine(), left.getColumn(),
                              right.getLine(), right.getColumn());
      else if (left.getUnit().equals(right.getUnit()))
         return String.format("%s:%d/%d-%d/%d",
                              left.getUnit(),
                              left.getLine(), left.getColumn(),
                              right.getLine(), right.getColumn());
      else
         return String.format("%s:%d/%d-%s:%d/%d",
                              left.getUnit(),
                              left.getLine(), left.getColumn(),
                              right.getUnit(),
                              right.getLine(), right.getColumn());
   }

}

@@ -63,16 +63,108 @@
 ocation;
+%0Aimport java_cup.runtime.ComplexSymbolFactory.ComplexSymbol;%0Aimport java_cup.runtime.Symbol;
 %0A%0Apublic
@@ -597,16 +597,455 @@
 ;%0A   %7D%0A%0A
+   public static Loc loc(Symbol symbol) %7B%0A      return loc(new Location(symbol.left, symbol.right));%0A   %7D%0A%0A   public static Loc loc(Symbol a, Symbol b) %7B%0A      return loc(new Location(a.left, b.right));%0A   %7D%0A%0A   public static Loc loc(ComplexSymbol symbol) %7B%0A      return new Loc(symbol.getLeft(), symbol.getRight());%0A   %7D%0A%0A   public static Loc loc(ComplexSymbol a, ComplexSymbol b) %7B%0A      return new Loc(a.getLeft(), b.getRight());%0A   %7D%0A%0A
    @Over

Add Loc factory methods using a terminal symbol