1/* Generated By:JavaCC: Do not edit this line. DateTimeParser.java */ 2/* 3 * Copyright 2004 the mime4j project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17package org.apache.james.mime4j.field.datetime.parser; 18 19import org.apache.james.mime4j.field.datetime.DateTime; 20 21import java.util.Vector; 22 23public class DateTimeParser implements DateTimeParserConstants { 24 private static final boolean ignoreMilitaryZoneOffset = true; 25 26 public static void main(String args[]) throws ParseException { 27 while (true) { 28 try { 29 DateTimeParser parser = new DateTimeParser(System.in); 30 parser.parseLine(); 31 } catch (Exception x) { 32 x.printStackTrace(); 33 return; 34 } 35 } 36 } 37 38 private static int parseDigits(Token token) { 39 return Integer.parseInt(token.image, 10); 40 } 41 42 private static int getMilitaryZoneOffset(char c) { 43 if (ignoreMilitaryZoneOffset) 44 return 0; 45 46 c = Character.toUpperCase(c); 47 48 switch (c) { 49 case 'A': return 1; 50 case 'B': return 2; 51 case 'C': return 3; 52 case 'D': return 4; 53 case 'E': return 5; 54 case 'F': return 6; 55 case 'G': return 7; 56 case 'H': return 8; 57 case 'I': return 9; 58 case 'K': return 10; 59 case 'L': return 11; 60 case 'M': return 12; 61 62 case 'N': return -1; 63 case 'O': return -2; 64 case 'P': return -3; 65 case 'Q': return -4; 66 case 'R': return -5; 67 case 'S': return -6; 68 case 'T': return -7; 69 case 'U': return -8; 70 case 'V': return -9; 71 case 'W': return -10; 72 case 'X': return -11; 73 case 'Y': return -12; 74 75 case 'Z': return 0; 76 default: return 0; 77 } 78 } 79 80 private static class Time { 81 private int hour; 82 private int minute; 83 private int second; 84 private int zone; 85 86 public Time(int hour, int minute, int second, int zone) { 87 this.hour = hour; 88 this.minute = minute; 89 this.second = second; 90 this.zone = zone; 91 } 92 93 public int getHour() { return hour; } 94 public int getMinute() { return minute; } 95 public int getSecond() { return second; } 96 public int getZone() { return zone; } 97 } 98 99 private static class Date { 100 private String year; 101 private int month; 102 private int day; 103 104 public Date(String year, int month, int day) { 105 this.year = year; 106 this.month = month; 107 this.day = day; 108 } 109 110 public String getYear() { return year; } 111 public int getMonth() { return month; } 112 public int getDay() { return day; } 113 } 114 115 final public DateTime parseLine() throws ParseException { 116 DateTime dt; 117 dt = date_time(); 118 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 119 case 1: 120 jj_consume_token(1); 121 break; 122 default: 123 jj_la1[0] = jj_gen; 124 ; 125 } 126 jj_consume_token(2); 127 {if (true) return dt;} 128 throw new Error("Missing return statement in function"); 129 } 130 131 final public DateTime parseAll() throws ParseException { 132 DateTime dt; 133 dt = date_time(); 134 jj_consume_token(0); 135 {if (true) return dt;} 136 throw new Error("Missing return statement in function"); 137 } 138 139 final public DateTime date_time() throws ParseException { 140 Date d; Time t; 141 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 142 case 4: 143 case 5: 144 case 6: 145 case 7: 146 case 8: 147 case 9: 148 case 10: 149 day_of_week(); 150 jj_consume_token(3); 151 break; 152 default: 153 jj_la1[1] = jj_gen; 154 ; 155 } 156 d = date(); 157 t = time(); 158 {if (true) return new DateTime( 159 d.getYear(), 160 d.getMonth(), 161 d.getDay(), 162 t.getHour(), 163 t.getMinute(), 164 t.getSecond(), 165 t.getZone());} // time zone offset 166 167 throw new Error("Missing return statement in function"); 168 } 169 170 final public String day_of_week() throws ParseException { 171 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 172 case 4: 173 jj_consume_token(4); 174 break; 175 case 5: 176 jj_consume_token(5); 177 break; 178 case 6: 179 jj_consume_token(6); 180 break; 181 case 7: 182 jj_consume_token(7); 183 break; 184 case 8: 185 jj_consume_token(8); 186 break; 187 case 9: 188 jj_consume_token(9); 189 break; 190 case 10: 191 jj_consume_token(10); 192 break; 193 default: 194 jj_la1[2] = jj_gen; 195 jj_consume_token(-1); 196 throw new ParseException(); 197 } 198 {if (true) return token.image;} 199 throw new Error("Missing return statement in function"); 200 } 201 202 final public Date date() throws ParseException { 203 int d, m; String y; 204 d = day(); 205 m = month(); 206 y = year(); 207 {if (true) return new Date(y, m, d);} 208 throw new Error("Missing return statement in function"); 209 } 210 211 final public int day() throws ParseException { 212 Token t; 213 t = jj_consume_token(DIGITS); 214 {if (true) return parseDigits(t);} 215 throw new Error("Missing return statement in function"); 216 } 217 218 final public int month() throws ParseException { 219 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 220 case 11: 221 jj_consume_token(11); 222 {if (true) return 1;} 223 break; 224 case 12: 225 jj_consume_token(12); 226 {if (true) return 2;} 227 break; 228 case 13: 229 jj_consume_token(13); 230 {if (true) return 3;} 231 break; 232 case 14: 233 jj_consume_token(14); 234 {if (true) return 4;} 235 break; 236 case 15: 237 jj_consume_token(15); 238 {if (true) return 5;} 239 break; 240 case 16: 241 jj_consume_token(16); 242 {if (true) return 6;} 243 break; 244 case 17: 245 jj_consume_token(17); 246 {if (true) return 7;} 247 break; 248 case 18: 249 jj_consume_token(18); 250 {if (true) return 8;} 251 break; 252 case 19: 253 jj_consume_token(19); 254 {if (true) return 9;} 255 break; 256 case 20: 257 jj_consume_token(20); 258 {if (true) return 10;} 259 break; 260 case 21: 261 jj_consume_token(21); 262 {if (true) return 11;} 263 break; 264 case 22: 265 jj_consume_token(22); 266 {if (true) return 12;} 267 break; 268 default: 269 jj_la1[3] = jj_gen; 270 jj_consume_token(-1); 271 throw new ParseException(); 272 } 273 throw new Error("Missing return statement in function"); 274 } 275 276 final public String year() throws ParseException { 277 Token t; 278 t = jj_consume_token(DIGITS); 279 {if (true) return t.image;} 280 throw new Error("Missing return statement in function"); 281 } 282 283 final public Time time() throws ParseException { 284 int h, m, s=0, z; 285 h = hour(); 286 jj_consume_token(23); 287 m = minute(); 288 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 289 case 23: 290 jj_consume_token(23); 291 s = second(); 292 break; 293 default: 294 jj_la1[4] = jj_gen; 295 ; 296 } 297 z = zone(); 298 {if (true) return new Time(h, m, s, z);} 299 throw new Error("Missing return statement in function"); 300 } 301 302 final public int hour() throws ParseException { 303 Token t; 304 t = jj_consume_token(DIGITS); 305 {if (true) return parseDigits(t);} 306 throw new Error("Missing return statement in function"); 307 } 308 309 final public int minute() throws ParseException { 310 Token t; 311 t = jj_consume_token(DIGITS); 312 {if (true) return parseDigits(t);} 313 throw new Error("Missing return statement in function"); 314 } 315 316 final public int second() throws ParseException { 317 Token t; 318 t = jj_consume_token(DIGITS); 319 {if (true) return parseDigits(t);} 320 throw new Error("Missing return statement in function"); 321 } 322 323 final public int zone() throws ParseException { 324 Token t, u; int z; 325 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 326 case OFFSETDIR: 327 t = jj_consume_token(OFFSETDIR); 328 u = jj_consume_token(DIGITS); 329 z=parseDigits(u)*(t.image.equals("-") ? -1 : 1); 330 break; 331 case 25: 332 case 26: 333 case 27: 334 case 28: 335 case 29: 336 case 30: 337 case 31: 338 case 32: 339 case 33: 340 case 34: 341 case MILITARY_ZONE: 342 z = obs_zone(); 343 break; 344 default: 345 jj_la1[5] = jj_gen; 346 jj_consume_token(-1); 347 throw new ParseException(); 348 } 349 {if (true) return z;} 350 throw new Error("Missing return statement in function"); 351 } 352 353 final public int obs_zone() throws ParseException { 354 Token t; int z; 355 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 356 case 25: 357 jj_consume_token(25); 358 z=0; 359 break; 360 case 26: 361 jj_consume_token(26); 362 z=0; 363 break; 364 case 27: 365 jj_consume_token(27); 366 z=-5; 367 break; 368 case 28: 369 jj_consume_token(28); 370 z=-4; 371 break; 372 case 29: 373 jj_consume_token(29); 374 z=-6; 375 break; 376 case 30: 377 jj_consume_token(30); 378 z=-5; 379 break; 380 case 31: 381 jj_consume_token(31); 382 z=-7; 383 break; 384 case 32: 385 jj_consume_token(32); 386 z=-6; 387 break; 388 case 33: 389 jj_consume_token(33); 390 z=-8; 391 break; 392 case 34: 393 jj_consume_token(34); 394 z=-7; 395 break; 396 case MILITARY_ZONE: 397 t = jj_consume_token(MILITARY_ZONE); 398 z=getMilitaryZoneOffset(t.image.charAt(0)); 399 break; 400 default: 401 jj_la1[6] = jj_gen; 402 jj_consume_token(-1); 403 throw new ParseException(); 404 } 405 {if (true) return z * 100;} 406 throw new Error("Missing return statement in function"); 407 } 408 409 public DateTimeParserTokenManager token_source; 410 SimpleCharStream jj_input_stream; 411 public Token token, jj_nt; 412 private int jj_ntk; 413 private int jj_gen; 414 final private int[] jj_la1 = new int[7]; 415 static private int[] jj_la1_0; 416 static private int[] jj_la1_1; 417 static { 418 jj_la1_0(); 419 jj_la1_1(); 420 } 421 private static void jj_la1_0() { 422 jj_la1_0 = new int[] {0x2,0x7f0,0x7f0,0x7ff800,0x800000,0xff000000,0xfe000000,}; 423 } 424 private static void jj_la1_1() { 425 jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0xf,0xf,}; 426 } 427 428 public DateTimeParser(java.io.InputStream stream) { 429 this(stream, null); 430 } 431 public DateTimeParser(java.io.InputStream stream, String encoding) { 432 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 433 token_source = new DateTimeParserTokenManager(jj_input_stream); 434 token = new Token(); 435 jj_ntk = -1; 436 jj_gen = 0; 437 for (int i = 0; i < 7; i++) jj_la1[i] = -1; 438 } 439 440 public void ReInit(java.io.InputStream stream) { 441 ReInit(stream, null); 442 } 443 public void ReInit(java.io.InputStream stream, String encoding) { 444 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 445 token_source.ReInit(jj_input_stream); 446 token = new Token(); 447 jj_ntk = -1; 448 jj_gen = 0; 449 for (int i = 0; i < 7; i++) jj_la1[i] = -1; 450 } 451 452 public DateTimeParser(java.io.Reader stream) { 453 jj_input_stream = new SimpleCharStream(stream, 1, 1); 454 token_source = new DateTimeParserTokenManager(jj_input_stream); 455 token = new Token(); 456 jj_ntk = -1; 457 jj_gen = 0; 458 for (int i = 0; i < 7; i++) jj_la1[i] = -1; 459 } 460 461 public void ReInit(java.io.Reader stream) { 462 jj_input_stream.ReInit(stream, 1, 1); 463 token_source.ReInit(jj_input_stream); 464 token = new Token(); 465 jj_ntk = -1; 466 jj_gen = 0; 467 for (int i = 0; i < 7; i++) jj_la1[i] = -1; 468 } 469 470 public DateTimeParser(DateTimeParserTokenManager tm) { 471 token_source = tm; 472 token = new Token(); 473 jj_ntk = -1; 474 jj_gen = 0; 475 for (int i = 0; i < 7; i++) jj_la1[i] = -1; 476 } 477 478 public void ReInit(DateTimeParserTokenManager tm) { 479 token_source = tm; 480 token = new Token(); 481 jj_ntk = -1; 482 jj_gen = 0; 483 for (int i = 0; i < 7; i++) jj_la1[i] = -1; 484 } 485 486 final private Token jj_consume_token(int kind) throws ParseException { 487 Token oldToken; 488 if ((oldToken = token).next != null) token = token.next; 489 else token = token.next = token_source.getNextToken(); 490 jj_ntk = -1; 491 if (token.kind == kind) { 492 jj_gen++; 493 return token; 494 } 495 token = oldToken; 496 jj_kind = kind; 497 throw generateParseException(); 498 } 499 500 final public Token getNextToken() { 501 if (token.next != null) token = token.next; 502 else token = token.next = token_source.getNextToken(); 503 jj_ntk = -1; 504 jj_gen++; 505 return token; 506 } 507 508 final public Token getToken(int index) { 509 Token t = token; 510 for (int i = 0; i < index; i++) { 511 if (t.next != null) t = t.next; 512 else t = t.next = token_source.getNextToken(); 513 } 514 return t; 515 } 516 517 final private int jj_ntk() { 518 if ((jj_nt=token.next) == null) 519 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 520 else 521 return (jj_ntk = jj_nt.kind); 522 } 523 524 private Vector<int[]> jj_expentries = new Vector<int[]>(); 525 private int[] jj_expentry; 526 private int jj_kind = -1; 527 528 public ParseException generateParseException() { 529 jj_expentries.removeAllElements(); 530 boolean[] la1tokens = new boolean[49]; 531 for (int i = 0; i < 49; i++) { 532 la1tokens[i] = false; 533 } 534 if (jj_kind >= 0) { 535 la1tokens[jj_kind] = true; 536 jj_kind = -1; 537 } 538 for (int i = 0; i < 7; i++) { 539 if (jj_la1[i] == jj_gen) { 540 for (int j = 0; j < 32; j++) { 541 if ((jj_la1_0[i] & (1<<j)) != 0) { 542 la1tokens[j] = true; 543 } 544 if ((jj_la1_1[i] & (1<<j)) != 0) { 545 la1tokens[32+j] = true; 546 } 547 } 548 } 549 } 550 for (int i = 0; i < 49; i++) { 551 if (la1tokens[i]) { 552 jj_expentry = new int[1]; 553 jj_expentry[0] = i; 554 jj_expentries.addElement(jj_expentry); 555 } 556 } 557 int[][] exptokseq = new int[jj_expentries.size()][]; 558 for (int i = 0; i < jj_expentries.size(); i++) { 559 exptokseq[i] = jj_expentries.elementAt(i); 560 } 561 return new ParseException(token, exptokseq, tokenImage); 562 } 563 564 final public void enable_tracing() { 565 } 566 567 final public void disable_tracing() { 568 } 569 570} 571