//
// Token: The class of tokens returned by the lexer.
//
// Author: Mosur Ravishankar
// Date: 18 Mar 1998
//


public class Token implements TokenType
{
  private int tokenType;	// Token type for this token instance
  private String lexeme;	// The lexeme for this instance

  // Constructor
  public Token(int type, String lex) 
    {
      tokenType = type;
      lexeme = lex;
    }

  // Accessor functions for the private variables
  public int getType () { return tokenType; }
  public String getLexeme () { return lexeme; }

  // Return a string name for the token type
  public String getTypeName () 
    {
      if (tokenType == T_IDENT)
	return "Ident";
      else if (tokenType == T_NUMBER)
	return "Number";
      else
	return lexeme;
    }

  // To be invoked if this token is tentatively flagged as T_IDENT but needs to be
  // checked for a keyword.
  void checkKeyword () {
    if (lexeme.equals("if"))
      tokenType = T_IF;
    else if (lexeme.equals("else"))
      tokenType = T_ELSE;
    else if (lexeme.equals("while"))
      tokenType = T_WHILE;
    else if (lexeme.equals("break"))
      tokenType = T_BREAK;
    else if (lexeme.equals("read"))
      tokenType = T_READ;
    else if (lexeme.equals("write"))
      tokenType = T_WRITE;
    else if (lexeme.equals("function"))
      tokenType = T_FUNCTION;
    else if (lexeme.equals("declare"))
      tokenType = T_DECLARE;
    else if (lexeme.equals("return"))
      tokenType = T_RETURN;
    // else remains an identifier
  }
}
