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 }