// Token class definition // Token is a class to represent lexical tokens in the PL/0 programming // language, described in Algorithms + Data Structures = Programs by // Niklaus Wirth, Prentice-Hall, 1976. public class Token { private TokenClass symbol; // current token private String lexeme; // lexeme public Token () { } public Token (TokenClass symbol) { this (symbol, null); } public Token (TokenClass symbol, String lexeme) { this . symbol = symbol; this . lexeme = lexeme; } public TokenClass symbol () { return symbol; } public String lexeme () { return lexeme; } public String toString () { switch (symbol) { case BEGIN : return "(keyword, begin) "; case CALL : return "(keyword, call) "; case CONST : return "(keyword, const) "; case DO : return "(keyword, do) "; case END : return "(keyword, end) "; case IF : return "(keyword, if) "; case ODD : return "(keyword, odd) "; case PROC : return "(keyword, proc) "; case THEN : return "(keyword, then) "; case VAR : return "(keyword, var) "; case WHILE : return "(keyword, while) "; case ASSIGN : return "(operator, :=) "; case PLUS : return "(operator, +) "; case MINUS : return "(operator, -) "; case TIMES : return "(operator, *) "; case SLASH : return "(operator, /) "; case EQ : return "(operator, =) "; case LT : return "(operator, <) "; case GT : return "(operator, >) "; case NE : return "(operator, <>) "; case LE : return "(operator, <=) "; case GE : return "(operator, >=) "; case LPAREN : return "(operator, () "; case RPAREN : return "(operator, )) "; case COMMA : return "(punctuation, ,) "; case PERIOD : return "(punctuation, .) "; case SEMICOLON : return "(punctuation, ;) "; case ID : return "(identifier, " + lexeme + ") "; case INTEGER : return "(integer, " + lexeme + ") "; default : ErrorMessage . print (0, "Unrecognized token"); return null; } } }