| TokenInfo.java |
1 // Copyright 2012- Bill Campbell, Swami Iyer and Bahar Akbal-Delibas
2
3 package jminusminus;
4
5 /**
6 * An enum of token kinds. Each entry in this enum represents the kind of a token along with its
7 * image (string representation).
8 */
9 enum TokenKind {
10 // End of file.
11 EOF(""),
12
13 // Reserved words.
14 ABSTRACT("abstract"), BOOLEAN("boolean"), CHAR("char"), CLASS("class"), ELSE("else"),
15 EXTENDS("extends"), IF("if"), IMPORT("import"), INSTANCEOF("instanceof"), INT("int"),
16 NEW("new"), PACKAGE("package"), PRIVATE("private"), PROTECTED("protected"),
17 PUBLIC("public"), RETURN("return"), STATIC("static"), SUPER("super"), THIS("this"),
18 VOID("void"), WHILE("while"),
19
20 // Operators.
21 ASSIGN("="), DEC("--"), EQUAL("=="), GT(">"), INC("++"), LAND("&&"), LE("<="), LNOT("!"),
22 MINUS("-"), PLUS("+"), PLUS_ASSIGN("+="), STAR("*"),
23
24 // Separators.
25 COMMA(","), DOT("."), LBRACK("["), LCURLY("{"), LPAREN("("), RBRACK("]"), RCURLY("}"),
26 RPAREN(")"), SEMI(";"),
27
28 // Identifiers.
29 IDENTIFIER("<IDENTIFIER>"),
30
31 // Literals.
32 CHAR_LITERAL("<CHAR_LITERAL>"), FALSE("false"), INT_LITERAL("<INT_LITERAL>"), NULL("null"),
33 STRING_LITERAL("<STRING_LITERAL>"), TRUE("true");
34
35 // The token kind's string representation.
36 private String image;
37
38 /**
39 * Constructs an instance of TokenKind given its string representation.
40 *
41 * @param image string representation of the token kind.
42 */
43 private TokenKind(String image) {
44 this.image = image;
45 }
46
47 /**
48 * Returns the token kind's string representation.
49 *
50 * @return the token kind's string representation.
51 */
52 public String tokenRep() {
53 if (this == EOF) {
54 return "<EOF>";
55 }
56 if (image.startsWith("<") && image.endsWith(">")) {
57 return image;
58 }
59 return "\"" + image + "\"";
60 }
61
62 /**
63 * Returns the token kind's image.
64 *
65 * @return the token kind's image.
66 */
67 public String image() {
68 return image;
69 }
70 }
71
72 /**
73 * A representation of tokens returned by the Scanner method getNextToken(). A token has a kind
74 * identifying what kind of token it is, an image for providing any semantic text, and the line in
75 * which it occurred in the source file.
76 */
77 public class TokenInfo {
78 // Token kind.
79 private TokenKind kind;
80
81 // Semantic text (if any). For example, the identifier name when the token kind is IDENTIFIER
82 // . For tokens without a semantic text, it is simply its string representation. For example,
83 // "+=" when the token kind is PLUS_ASSIGN.
84 private String image;
85
86 // Line in which the token occurs in the source file.
87 private int line;
88
89 /**
90 * Constructs a TokenInfo object given its kind, the semantic text forming the token, and its
91 * line number.
92 *
93 * @param kind the token's kind.
94 * @param image the semantic text forming the token.
95 * @param line the line in which the token occurs in the source file.
96 */
97 public TokenInfo(TokenKind kind, String image, int line) {
98 this.kind = kind;
99 this.image = image;
100 this.line = line;
101 }
102
103 /**
104 * Constructs a TokenInfo object given its kind and its line number. Its image is simply the
105 * token kind's string representation.
106 *
107 * @param kind the token's identifying number.
108 * @param line the line in which the token occurs in the source file.
109 */
110 public TokenInfo(TokenKind kind, int line) {
111 this(kind, kind.image(), line);
112 }
113
114 /**
115 * Returns the token's kind.
116 *
117 * @return the token's kind.
118 */
119 public TokenKind kind() {
120 return kind;
121 }
122
123 /**
124 * Returns the line number associated with the token.
125 *
126 * @return the line number associated with the token.
127 */
128 public int line() {
129 return line;
130 }
131
132 /**
133 * Returns the token's string representation.
134 *
135 * @return the token's string representation.
136 */
137 public String tokenRep() {
138 return kind.tokenRep();
139 }
140
141 /**
142 * Returns the token's image.
143 *
144 * @return the token's image.
145 */
146 public String image() {
147 return image;
148 }
149 }
150