001: /*
002: * Author: Mike Atkinson
003: *
004: * This software has been developed under the copyleft
005: * rules of the GNU General Public License. Please
006: * consult the GNU General Public License for more
007: * details about use and distribution of this software.
008: */
009: package net.sourceforge.jrefactory.parser;
010:
011: /*
012: * Generated By:JavaCC: Do not edit this line. Token.java Version 0.7pre3
013: */
014: /**
015: * Describes the input token stream.
016: *
017: *@author Mike Atkinson
018: *@author Mike Atkinson
019: *@created October 14, 1999
020: */
021:
022: public class Token {
023:
024: /**
025: * beginLine and beginColumn describe the position of the first character
026: * of this token; endLine and endColumn describe the position of the last
027: * character of this token.
028: */
029: public int beginLine, beginColumn, endLine, endColumn;
030:
031: /**
032: * The string image of the token.
033: */
034: public String image;
035:
036: /**
037: * An integer that describes the kind of this token. This numbering system
038: * is determined by JavaCCParser, and a table of these numbers is stored in
039: * the file ...Constants.java.
040: */
041: public int kind;
042:
043: /**
044: * A reference to the next regular (non-special) token from the input
045: * stream. If this is the last token from the input stream, or if the token
046: * manager has not read tokens beyond this one, this field is set to null.
047: * This is true only if this token is also a regular token. Otherwise, see
048: * below for a description of the contents of this field.
049: */
050: public Token next;
051:
052: /**
053: * This field is used to access special tokens that occur prior to this
054: * token, but after the immediately preceding regular (non-special) token.
055: * If there are no such special tokens, this field is set to null. When
056: * there are more than one such special token, this field refers to the
057: * last of these special tokens, which in turn refers to the next previous
058: * special token through its specialToken field, and so on until the first
059: * special token (whose specialToken field is null). The next fields of
060: * special tokens refer to other special tokens that immediately follow it
061: * (without an intervening regular token). If there is no such token, this
062: * field is null.
063: */
064: public Token specialToken;
065:
066: /**
067: * Returns the image.
068: *
069: *@return Description of the Returned Value
070: */
071: public final String toString() {
072: return image;
073: }
074:
075: /**
076: * Returns a new Token object, by default. However, if you want, you can
077: * create and return subclass objects based on the value of ofKind. Simply
078: * add the cases to the switch for all those special cases. For example, if
079: * you have a subclass of Token called IDToken that you want to create if
080: * ofKind is ID, simlpy add something like : case MyParserConstants.ID :
081: * return new IDToken(); to the following switch statement. Then you can
082: * cast matchedToken variable to the appropriate type and use it in your
083: * lexical actions.
084: *
085: *@param ofKind Description of Parameter
086: *@return Description of the Returned Value
087: */
088: public final static Token newToken(int ofKind) {
089: switch (ofKind) {
090: default:
091: return new Token();
092: }
093: }
094:
095: /**
096: * Create a human readable representation of the named token
097: *
098: *@param b flag to control output (not used at present)
099: *@return A representation of the token
100: *@since JRefactory 2.7.00
101: */
102: public String toString(boolean b) {
103: return "{token=" + image + " specialToken=" + specialToken
104: + "}";
105: }
106: }
|