package java_cup ; import java.lang.reflect.Field ; import java.lang.reflect.Modifier ; import java_cup.runtime.Symbol ; 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 ; } }