content: 
  package java_cup;
  import java_cup.runtime.Symbol;
  import java.lang.reflect.Field;
  import java.lang.reflect.Modifier;
  public class ErrorManager{
      private static ErrorManager errorManager;
      private int errors = 0;
      private int warnings = 0;
      private int fatals = 0;
      public int getFatalCount() { return fatals; }
      public int getErrorCount() { return errors; }
      public int getWarningCount() { return warnings; }
      static {
          errorManager = new ErrorManager();
      }
      public static ErrorManager getManager() { return errorManager; }
      private ErrorManager(){
      }
  
      //TODO: migrate to java.util.logging
      /**
       * Error message format: 
       * ERRORLEVEL at (LINE/COLUMN)@SYMBOL: MESSAGE
       * ERRORLEVEL : MESSAGE
       **/
      public void emit_fatal(String message){
          System.err.println("Fatal : "+message);
          fatals++;
      }
      public void emit_fatal(String message, Symbol sym){
          //System.err.println("Fatal at ("+sym.left+"/"+sym.right+")@"+convSymbol(sym)+" : "+message);
          System.err.println("Fatal: "+message+" @ "+sym);
          fatals++;
      }
      public void emit_warning(String message){
          System.err.println("Warning : " + message);
          warnings++;	
      }
      public void emit_warning(String message, Symbol sym){
  //        System.err.println("Warning at ("+sym.left+"/"+sym.right+")@"+convSymbol(sym)+" : "+message);
          System.err.println("Fatal: "+message+" @ "+sym);
          warnings++;
      }
      public void emit_error(String message){
          System.err.println("Error : " + message);
          errors++;
      }
      public void emit_error(String message, Symbol sym){
  //        System.err.println("Error at ("+sym.left+"/"+sym.right+")@"+convSymbol(sym)+" : "+message);
          System.err.println("Error: "+message+" @ "+sym);
          errors++;
      }
      private static String convSymbol(Symbol symbol){
          String result = (symbol.value == null)? "" : " (\""+symbol.value.toString()+"\")";
          Field [] fields = sym.class.getFields();
          for (int i = 0; i < fields.length ; i++){
              if (!Modifier.isPublic(fields[i].getModifiers())) continue;
              try {
                  if (fields[i].getInt(null) == symbol.sym) return fields[i].getName()+result;
              }catch (Exception ex) {
              }
          }
          return symbol.toString()+result;
      }
      
  }
  