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;
}
}