java_cup-0.11a.src.java_cup.ErrorManager Maven / Gradle / Ivy
Go to download
CUP is a system for generating LALR parsers from simple specifications. It serves the same role as
the widely used program YACC [1] and in fact offers most of the features of YACC. However, CUP is
written in Java, uses specifications including embedded Java code, and produces parsers which are
implemented in Java.
The newest version!
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;
}
}