View Javadoc
1   package de.fhdw.wtf.common.token;
2   
3   import java.io.Serializable;
4   
5   /**
6    * A token represents a scanned part of the input grammar. Each token-type defines a regular sequence of characters
7    * belonging to its type.
8    * 
9    * This type is the interface describing all tokens.
10   */
11  public abstract class Token implements Serializable {
12  	
13  	/**
14  	 * generated.
15  	 */
16  	private static final long serialVersionUID = 6143241438846758818L;
17  	
18  	/**
19  	 * The position is the begin position of this token in the original input document.
20  	 */
21  	private final Position position;
22  	
23  	/**
24  	 * Constructor initializing the position of this token.
25  	 * 
26  	 * @param position
27  	 *            begin position of this token
28  	 */
29  	protected Token(final Position position) {
30  		this.position = position;
31  	}
32  	
33  	/**
34  	 * @return Returns true, if and only if this token represents any keyword.
35  	 */
36  	public boolean isKeywordToken() {
37  		return false; // must be overwritten as implementation
38  	}
39  	
40  	/**
41  	 * @return Returns true, if and only if this token represents keyword: "class".
42  	 */
43  	public boolean isClassToken() {
44  		return false; // must be overwritten as implementation
45  	}
46  	
47  	/**
48  	 * @return Returns true, if and only if this token represents keyword: "group".
49  	 */
50  	public boolean isGroupToken() {
51  		return false; // must be overwritten as implementation
52  	}
53  	
54  	/**
55  	 * @return Returns true, if and only if this token represents any class modifier.
56  	 */
57  	public boolean isClassModifierToken() {
58  		return false; // must be overwritten as implementation
59  	}
60  	
61  	/**
62  	 * @return Returns true, if and only if this token represents keyword: "function".
63  	 */
64  	public boolean isOperationToken() {
65  		return false; // must be overwritten as implementation
66  	}
67  	
68  	/**
69  	 * @return Returns true, if and only if this token represents any operation modifier.
70  	 */
71  	public boolean isOperationModifierToken() {
72  		return false; // must be overwritten as implementation
73  	}
74  	
75  	/**
76  	 * @return Returns true, if and only if this token represents operation modifier: "abstract".
77  	 */
78  	public boolean isAbstractOperationToken() {
79  		return false; // must be overwritten as implementation
80  	}
81  	
82  	/**
83  	 * @return Returns true, if and only if this token represents class modifier: "abstract".
84  	 */
85  	public boolean isAbstractModifierToken() {
86  		return false; // must be overwritten as implementation
87  	}
88  	
89  	/**
90  	 * @return Returns true, if and only if this token represents any attribute modifier.
91  	 */
92  	public boolean isAttributeModifierToken() {
93  		return false; // must be overwritten as implementation
94  	}
95  	
96  	/**
97  	 * @return Returns true, if and only if this token represents attribute modifier: "prior".
98  	 */
99  	public boolean isPriorModifierToken() {
100 		return false; // must be overwritten as implementation
101 	}
102 	
103 	/**
104 	 * @return Returns true, if and only if this token represents a comment.
105 	 */
106 	public boolean isCommentToken() {
107 		return false; // must be overwritten as implementation
108 	}
109 	
110 	/**
111 	 * @return Returns true, if and only if this token represents an invalid token. The scanner uses this token to
112 	 *         denote unrecognized characters or unfinished comments.
113 	 */
114 	public boolean isInvalidToken() {
115 		return false; // must be overwritten as implementation
116 	}
117 	
118 	/**
119 	 * @return Returns true, if and only if this token represents an identifier.
120 	 */
121 	public boolean isIdentifierToken() {
122 		return false; // must be overwritten as implementation
123 	}
124 	
125 	/**
126 	 * @return Returns true, if and only if this token represents the end of a stream. This token always is the last
127 	 *         token in a stream.
128 	 */
129 	public boolean isEndToken() {
130 		return false; // must be overwritten as implementation
131 	}
132 	
133 	/**
134 	 * @return Returns true, if and only if this token represents any symbol.
135 	 */
136 	public boolean isSymbolToken() {
137 		return false; // must be overwritten as implementation
138 	}
139 	
140 	/**
141 	 * @return Returns true, if and only if this token represents symbol: "*".
142 	 */
143 	public boolean isAsteriskToken() {
144 		return false; // must be overwritten as implementation
145 	}
146 	
147 	/**
148 	 * @return Returns true, if and only if this token represents symbol: ";".
149 	 */
150 	public boolean isSemicolonToken() {
151 		return false; // must be overwritten as implementation
152 	}
153 	
154 	/**
155 	 * @return @return Returns true, if and only if this token represents symbol: "{".
156 	 */
157 	public boolean isCurlyBracketOpenToken() {
158 		return false; // must be overwritten as implementation
159 	}
160 	
161 	/**
162 	 * @return Returns true, if and only if this token represents symbol: "}".
163 	 */
164 	public boolean isCurlyBracketCloseToken() {
165 		return false; // must be overwritten as implementation
166 	}
167 	
168 	/**
169 	 * @return Returns true, if and only if this token represents symbol: "+".
170 	 */
171 	public boolean isPlusSymbolToken() {
172 		return false; // must be overwritten as implementation
173 	}
174 	
175 	/**
176 	 * @return Returns true, if and only if this token represents symbol: ":".
177 	 */
178 	public boolean isColonToken() {
179 		return false; // must be overwritten as implementation
180 	}
181 	
182 	/**
183 	 * @return Returns true, if and only if this token represents symbol: ">".
184 	 */
185 	public boolean isGreaterSymbolToken() {
186 		return false; // must be overwritten as implementation
187 	}
188 	
189 	/**
190 	 * @return Returns true, if and only if this token represents symbol: "=".
191 	 */
192 	public boolean isEqualToken() {
193 		return false; // must be overwritten as implementation
194 	}
195 	
196 	/**
197 	 * @return Returns true, if and only if this token represents symbol: "[".
198 	 */
199 	public boolean isSquareBracketOpenToken() {
200 		return false; // must be overwritten as implementation
201 	}
202 	
203 	/**
204 	 * @return Returns true, if and only if this token represents symbol: "]".
205 	 */
206 	public boolean isSquareBracketCloseToken() {
207 		return false; // must be overwritten as implementation
208 	}
209 	
210 	/**
211 	 * @return Returns true, if and only if this token represents whitespace.
212 	 */
213 	public boolean isWhitespaceToken() {
214 		return false; // must be overwritten as implementation
215 	}
216 	
217 	/**
218 	 * @return Returns true, if and only if this token represents an exception (keyword: "exception").
219 	 */
220 	public boolean isExceptionToken() {
221 		return false; // must be overwritten as implementation
222 	}
223 	
224 	/**
225 	 * @return Returns true, if and only if this token represents a FindableToken.
226 	 */
227 	public boolean isFindableToken() {
228 		return false; // must be overwritten as implementation
229 	}
230 	
231 	/**
232 	 * @return Returns true, if and only if this token represents a TransientToken.
233 	 */
234 	public boolean isTransientToken() {
235 		return false; // must be overwritten as implementation
236 	}
237 	
238 	/**
239 	 * @return Returns true, if and only if this token represents a ServiceToken.
240 	 */
241 	public boolean isServiceToken() {
242 		return false; // must be overwritten as implementation
243 	}
244 	
245 	/**
246 	 * @return Returns true, if and only if this token represents a HyphenToken.
247 	 */
248 	public boolean isHyphenToken() {
249 		return false; // must be overwritten as implementation
250 	}
251 	
252 	/**
253 	 * @return Returns true, if and only if this token represents a PipeToken.
254 	 */
255 	public boolean isPipeToken() {
256 		return false; // must be overwritten as implementation
257 	}
258 	
259 	/**
260 	 * @return Returns true, if and only if this token represents a BracketOpenToken.
261 	 */
262 	public boolean isBracketOpenToken() {
263 		return false; // must be overwritten as implementation
264 	}
265 	
266 	/**
267 	 * @return Returns true, if and only if this token represents a BracketCloseToken.
268 	 */
269 	public boolean isBracketCloseToken() {
270 		return false; // must be overwritten as implementation
271 	}
272 	
273 	/**
274 	 * @return Returns true, if and only if this token represents a CommaToken.
275 	 */
276 	public boolean isCommaToken() {
277 		return false; // must be overwritten as implementation
278 	}
279 	
280 	/**
281 	 * @return Returns true, if and only if this token represents a MutableToken.
282 	 */
283 	public boolean isMutableToken() {
284 		return false; // must be overwritten as implementation
285 	}
286 	
287 	/**
288 	 * @return Returns true, if and only if this token represents a VisitableToken.
289 	 */
290 	public boolean isVisitableToken() {
291 		return false; // must be overwritten as implementation
292 	}
293 	
294 	/**
295 	 * @return Returns true, if and only if this token represents a SymmetricToken.
296 	 */
297 	public boolean isSymmetricToken() {
298 		return false; // must be overwritten as implementation
299 	}
300 	
301 	/**
302 	 * @return Returns true, if and only if this token represents a DoubleSquareBracketOpenToken.
303 	 */
304 	public boolean isDoubleSquareBracketOpenToken() {
305 		return false; // must be overwritten as implementation
306 	}
307 	
308 	/**
309 	 * @return Returns true, if and only if this token represents a DoubleSquareBracketCloseToken.
310 	 */
311 	public boolean isDoubleSquareBracketCloseToken() {
312 		return false; // must be overwritten as implementation
313 	}
314 	
315 	/**
316 	 * @return Returns true, if and only if this token represents an ArrowToken.
317 	 */
318 	public boolean isArrowToken() {
319 		return false; // must be overwritten as implementation
320 	}
321 	
322 	/**
323 	 * @return Returns true, if and only if this token represents an ExclamationToken.
324 	 */
325 	public boolean isExclamationToken() {
326 		return false; // must be overwritten as implementation
327 	}
328 	
329 	/**
330 	 * @return Returns the Tokenrepresentation length, <br>
331 	 *         e.g. A Token with the representation of "abc" returns 3.
332 	 */
333 	public abstract int getLength();
334 	
335 	@Override
336 	public boolean equals(final Object o) {
337 		if (o instanceof Token) {
338 			final Token t = (Token) o;
339 			return t.getPosition().equals(this.getPosition()) && this.equalsTemplate(t);
340 		}
341 		return false;
342 	}
343 	
344 	@Override
345 	public int hashCode() {
346 		return this.getPosition().hashCode() ^ this.hashCodeTemplate();
347 	}
348 	
349 	/**
350 	 * @param t
351 	 *            equal comparison element
352 	 * @return Returns true if and only if the token t is equal to this<br>
353 	 *         in terms of specialized attributes.
354 	 */
355 	protected abstract boolean equalsTemplate(Token t);
356 	
357 	/**
358 	 * Returns an hashCode-Value that depents on the equalsTemplate.
359 	 * 
360 	 * @return hashCode
361 	 */
362 	protected abstract int hashCodeTemplate();
363 	
364 	/**
365 	 * Creates a string representation of this token the same way as it occurred in the original text.
366 	 * 
367 	 * @return short string representation
368 	 */
369 	public abstract String stringRepresentation();
370 	
371 	@Override
372 	/**
373 	 * Creates a string representation of this token, including the position.
374 	 */
375 	public String toString() {
376 		return this.getClass().getSimpleName() + "[" + this.stringRepresentation() + "]" + " at " + this.getPosition();
377 	}
378 	
379 	/**
380 	 * @return the position of this token.
381 	 */
382 	public Position getPosition() {
383 		return this.position;
384 	}
385 	
386 }