package ppg.test.multi; import java.io.*; import java_cup.runtime.Symbol; public class Token /*extends Symbol */implements LexerResult { private Symbol symbol; private String filename; private int lineno; private Object value; // String, Boolean, Integer, Vector, null //private Position position; static int lastID; public Token (String filename, int lineno, Object value/*, Position pos*/) { this (-1, filename, lineno, -1, -1, value/*, pos*/); } public Token (int id, String filename, int lineno, int left, int right, Object value/*, Position pos*/) { // super(id, left, right, value); symbol = new Symbol (id, left, right, this); lastID=id; this.filename = filename; this.lineno = lineno; this.value = value; //position = pos; } public Token (int i) { this(i, "sdf", -1, -1, -1, null); } public int getCode () { return symbol.sym; } public Symbol getSymbol () { return symbol; } public Object getValue () { return value; } public String getID () { return toString(symbol.sym); } public static String toString (int type) { switch (type) { case Constant.PLUS: return "+"; case Constant.MINUS: return "-"; case Constant.EXPR: return "expr"; case Constant.NUM: return "num"; case Constant.LPAREN: return "lparen"; case Constant.RPAREN: return "rparen"; case Constant.EOF: return "EOF"; case Constant.error: return "ERROR"; default: { System.out.println("Invalid token conversion: "+type); System.exit(2); } } return null; } public String toString () { return (String) value; //return filename + ":" + lineno + ": \"" + value + "\""; } public void unparse (java.io.OutputStream o) { if (value != null) { try { o.write ((filename + ":" + lineno + ": " + this.getID()+ ": \"" +value + "\"").getBytes()); //o.write (value.toString ().getBytes ()); } catch (IOException e) { } } } public String getFilename () { return filename; } public int lineNumber () { return lineno; } public int getLineno() { return lineno; } public void setLineno (int i) { lineno = i; } }