package java_cup; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java_cup.runtime.Symbol; @SuppressWarnings ( { "all" } ) 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 () { } /** * 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; } }