/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2009 Pentaho Corporation. All rights reserved. */ package org.w3c.flute.parser; /** * Describes the input token stream. */ public class Token { /** * An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table * of these numbers is stored in the file ...Constants.java. */ public int kind; /** * beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn * describe the position of the last character of this token. */ public int beginLine, beginColumn, endLine, endColumn; /** * The string image of the token. */ public String image; /** * A reference to the next regular (non-special) token from the input stream. If this is the last token from the * input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true * only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. */ public Token next; /** * This field is used to access special tokens that occur prior to this token, but after the immediately preceding * regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more * than one such special token, this field refers to the last of these special tokens, which in turn refers to the * next previous special token through its specialToken field, and so on until the first special token (whose * specialToken field is null). The next fields of special tokens refer to other special tokens that immediately * follow it (without an intervening regular token). If there is no such token, this field is null. */ public Token specialToken; /** * Returns the image. */ public String toString() { return image; } /** * Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on * the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a * subclass of Token called IDToken that you want to create if ofKind is ID, simlpy add something like : * <p/> * case MyParserConstants.ID : return new IDToken(); * <p/> * to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use it in * your lexical actions. */ public static final Token newToken( int ofKind ) { switch( ofKind ) { default: return new Token(); } } }