1
2
3 /***************************************************************************************
4 * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. *
5 * http://aspectwerkz.codehaus.org *
6 * ---------------------------------------------------------------------------------- *
7 * The software in this package is published under the terms of the LGPL license *
8 * a copy of which has been included with this distribution in the license.txt file. *
9 **************************************************************************************/
10 package org.codehaus.aspectwerkz.annotation.expression.ast;
11
12 /***
13 * Describes the input token stream.
14 */
15 public class Token {
16 /***
17 * An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a
18 * table of these numbers is stored in the file ...Constants.java.
19 */
20 public int kind;
21
22 /***
23 * beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn
24 * describe the position of the last character of this token.
25 */
26 public int beginLine;
27
28 /***
29 * beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn
30 * describe the position of the last character of this token.
31 */
32 public int beginColumn;
33
34 /***
35 * beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn
36 * describe the position of the last character of this token.
37 */
38 public int endLine;
39
40 /***
41 * beginLine and beginColumn describe the position of the first character of this token; endLine and endColumn
42 * describe the position of the last character of this token.
43 */
44 public int endColumn;
45
46 /***
47 * The string image of the token.
48 */
49 public String image;
50
51 /***
52 * A reference to the next regular (non-special) token from the input stream. If this is the last token from the
53 * input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is
54 * true only if this token is also a regular token. Otherwise, see below for a description of the contents of this
55 * field.
56 */
57 public Token next;
58
59 /***
60 * This field is used to access special tokens that occur prior to this token, but after the immediately preceding
61 * regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more
62 * than one such special token, this field refers to the last of these special tokens, which in turn refers to the
63 * next previous special token through its specialToken field, and so on until the first special token (whose
64 * specialToken field is null). The next fields of special tokens refer to other special tokens that immediately
65 * follow it (without an intervening regular token). If there is no such token, this field is null.
66 */
67 public Token specialToken;
68
69 /***
70 * Returns the image.
71 */
72 public String toString() {
73 return image;
74 }
75
76 /***
77 * Returns a new Token object, by default. However, if you want, you can create and return subclass objects based on
78 * the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a
79 * subclass of Token called IDToken that you want to create if ofKind is ID, simlpy add something like : <p/>case
80 * MyParserConstants.ID : return new IDToken(); <p/>to the following switch statement. Then you can cast
81 * matchedToken variable to the appropriate type and use it in your lexical actions.
82 */
83 public static final Token newToken(int ofKind) {
84 switch (ofKind) {
85 default:
86 return new Token();
87 }
88 }
89 }