Home | History | Annotate | Download | only in parser
      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  */
     17 package org.apache.james.mime4j.field.datetime.parser;
     18 
     19 import org.apache.james.mime4j.field.datetime.DateTime;
     20 
     21 import java.util.Vector;
     22 
     23 public 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