Home | History | Annotate | Download | only in parser
      1 /* Generated By:JJTree&JavaCC: Do not edit this line. AddressListParser.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.address.parser;
     18 
     19 public class AddressListParser/*@bgen(jjtree)*/implements AddressListParserTreeConstants, AddressListParserConstants {/*@bgen(jjtree)*/
     20   protected JJTAddressListParserState jjtree = new JJTAddressListParserState();public static void main(String args[]) throws ParseException {
     21                 while (true) {
     22                     try {
     23                                 AddressListParser parser = new AddressListParser(System.in);
     24                         parser.parseLine();
     25                         ((SimpleNode)parser.jjtree.rootNode()).dump("> ");
     26                     } catch (Exception x) {
     27                                 x.printStackTrace();
     28                                 return;
     29                     }
     30                 }
     31     }
     32 
     33     private static void log(String msg) {
     34         System.out.print(msg);
     35     }
     36 
     37     public ASTaddress_list parse() throws ParseException {
     38         try {
     39             parseAll();
     40             return (ASTaddress_list)jjtree.rootNode();
     41         } catch (TokenMgrError tme) {
     42             throw new ParseException(tme.getMessage());
     43         }
     44     }
     45 
     46 
     47     void jjtreeOpenNodeScope(Node n) {
     48         ((SimpleNode)n).firstToken = getToken(1);
     49     }
     50 
     51     void jjtreeCloseNodeScope(Node n) {
     52         ((SimpleNode)n).lastToken = getToken(0);
     53     }
     54 
     55   final public void parseLine() throws ParseException {
     56     address_list();
     57     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     58     case 1:
     59       jj_consume_token(1);
     60       break;
     61     default:
     62       jj_la1[0] = jj_gen;
     63       ;
     64     }
     65     jj_consume_token(2);
     66   }
     67 
     68   final public void parseAll() throws ParseException {
     69     address_list();
     70     jj_consume_token(0);
     71   }
     72 
     73   final public void address_list() throws ParseException {
     74  /*@bgen(jjtree) address_list */
     75   ASTaddress_list jjtn000 = new ASTaddress_list(JJTADDRESS_LIST);
     76   boolean jjtc000 = true;
     77   jjtree.openNodeScope(jjtn000);
     78   jjtreeOpenNodeScope(jjtn000);
     79     try {
     80       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     81       case 6:
     82       case DOTATOM:
     83       case QUOTEDSTRING:
     84         address();
     85         break;
     86       default:
     87         jj_la1[1] = jj_gen;
     88         ;
     89       }
     90       label_1:
     91       while (true) {
     92         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     93         case 3:
     94           ;
     95           break;
     96         default:
     97           jj_la1[2] = jj_gen;
     98           break label_1;
     99         }
    100         jj_consume_token(3);
    101         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    102         case 6:
    103         case DOTATOM:
    104         case QUOTEDSTRING:
    105           address();
    106           break;
    107         default:
    108           jj_la1[3] = jj_gen;
    109           ;
    110         }
    111       }
    112     } catch (Throwable jjte000) {
    113           if (jjtc000) {
    114             jjtree.clearNodeScope(jjtn000);
    115             jjtc000 = false;
    116           } else {
    117             jjtree.popNode();
    118           }
    119           if (jjte000 instanceof RuntimeException) {
    120             {if (true) throw (RuntimeException)jjte000;}
    121           }
    122           if (jjte000 instanceof ParseException) {
    123             {if (true) throw (ParseException)jjte000;}
    124           }
    125           {if (true) throw (Error)jjte000;}
    126     } finally {
    127           if (jjtc000) {
    128             jjtree.closeNodeScope(jjtn000, true);
    129             jjtreeCloseNodeScope(jjtn000);
    130           }
    131     }
    132   }
    133 
    134   final public void address() throws ParseException {
    135  /*@bgen(jjtree) address */
    136   ASTaddress jjtn000 = new ASTaddress(JJTADDRESS);
    137   boolean jjtc000 = true;
    138   jjtree.openNodeScope(jjtn000);
    139   jjtreeOpenNodeScope(jjtn000);
    140     try {
    141       if (jj_2_1(2147483647)) {
    142         addr_spec();
    143       } else {
    144         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    145         case 6:
    146           angle_addr();
    147           break;
    148         case DOTATOM:
    149         case QUOTEDSTRING:
    150           phrase();
    151           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    152           case 4:
    153             group_body();
    154             break;
    155           case 6:
    156             angle_addr();
    157             break;
    158           default:
    159             jj_la1[4] = jj_gen;
    160             jj_consume_token(-1);
    161             throw new ParseException();
    162           }
    163           break;
    164         default:
    165           jj_la1[5] = jj_gen;
    166           jj_consume_token(-1);
    167           throw new ParseException();
    168         }
    169       }
    170     } catch (Throwable jjte000) {
    171           if (jjtc000) {
    172             jjtree.clearNodeScope(jjtn000);
    173             jjtc000 = false;
    174           } else {
    175             jjtree.popNode();
    176           }
    177           if (jjte000 instanceof RuntimeException) {
    178             {if (true) throw (RuntimeException)jjte000;}
    179           }
    180           if (jjte000 instanceof ParseException) {
    181             {if (true) throw (ParseException)jjte000;}
    182           }
    183           {if (true) throw (Error)jjte000;}
    184     } finally {
    185           if (jjtc000) {
    186             jjtree.closeNodeScope(jjtn000, true);
    187             jjtreeCloseNodeScope(jjtn000);
    188           }
    189     }
    190   }
    191 
    192   final public void mailbox() throws ParseException {
    193  /*@bgen(jjtree) mailbox */
    194   ASTmailbox jjtn000 = new ASTmailbox(JJTMAILBOX);
    195   boolean jjtc000 = true;
    196   jjtree.openNodeScope(jjtn000);
    197   jjtreeOpenNodeScope(jjtn000);
    198     try {
    199       if (jj_2_2(2147483647)) {
    200         addr_spec();
    201       } else {
    202         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    203         case 6:
    204           angle_addr();
    205           break;
    206         case DOTATOM:
    207         case QUOTEDSTRING:
    208           name_addr();
    209           break;
    210         default:
    211           jj_la1[6] = jj_gen;
    212           jj_consume_token(-1);
    213           throw new ParseException();
    214         }
    215       }
    216     } catch (Throwable jjte000) {
    217           if (jjtc000) {
    218             jjtree.clearNodeScope(jjtn000);
    219             jjtc000 = false;
    220           } else {
    221             jjtree.popNode();
    222           }
    223           if (jjte000 instanceof RuntimeException) {
    224             {if (true) throw (RuntimeException)jjte000;}
    225           }
    226           if (jjte000 instanceof ParseException) {
    227             {if (true) throw (ParseException)jjte000;}
    228           }
    229           {if (true) throw (Error)jjte000;}
    230     } finally {
    231           if (jjtc000) {
    232             jjtree.closeNodeScope(jjtn000, true);
    233             jjtreeCloseNodeScope(jjtn000);
    234           }
    235     }
    236   }
    237 
    238   final public void name_addr() throws ParseException {
    239  /*@bgen(jjtree) name_addr */
    240   ASTname_addr jjtn000 = new ASTname_addr(JJTNAME_ADDR);
    241   boolean jjtc000 = true;
    242   jjtree.openNodeScope(jjtn000);
    243   jjtreeOpenNodeScope(jjtn000);
    244     try {
    245       phrase();
    246       angle_addr();
    247     } catch (Throwable jjte000) {
    248           if (jjtc000) {
    249             jjtree.clearNodeScope(jjtn000);
    250             jjtc000 = false;
    251           } else {
    252             jjtree.popNode();
    253           }
    254           if (jjte000 instanceof RuntimeException) {
    255             {if (true) throw (RuntimeException)jjte000;}
    256           }
    257           if (jjte000 instanceof ParseException) {
    258             {if (true) throw (ParseException)jjte000;}
    259           }
    260           {if (true) throw (Error)jjte000;}
    261     } finally {
    262           if (jjtc000) {
    263             jjtree.closeNodeScope(jjtn000, true);
    264             jjtreeCloseNodeScope(jjtn000);
    265           }
    266     }
    267   }
    268 
    269   final public void group_body() throws ParseException {
    270  /*@bgen(jjtree) group_body */
    271   ASTgroup_body jjtn000 = new ASTgroup_body(JJTGROUP_BODY);
    272   boolean jjtc000 = true;
    273   jjtree.openNodeScope(jjtn000);
    274   jjtreeOpenNodeScope(jjtn000);
    275     try {
    276       jj_consume_token(4);
    277       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    278       case 6:
    279       case DOTATOM:
    280       case QUOTEDSTRING:
    281         mailbox();
    282         break;
    283       default:
    284         jj_la1[7] = jj_gen;
    285         ;
    286       }
    287       label_2:
    288       while (true) {
    289         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    290         case 3:
    291           ;
    292           break;
    293         default:
    294           jj_la1[8] = jj_gen;
    295           break label_2;
    296         }
    297         jj_consume_token(3);
    298         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    299         case 6:
    300         case DOTATOM:
    301         case QUOTEDSTRING:
    302           mailbox();
    303           break;
    304         default:
    305           jj_la1[9] = jj_gen;
    306           ;
    307         }
    308       }
    309       jj_consume_token(5);
    310     } catch (Throwable jjte000) {
    311           if (jjtc000) {
    312             jjtree.clearNodeScope(jjtn000);
    313             jjtc000 = false;
    314           } else {
    315             jjtree.popNode();
    316           }
    317           if (jjte000 instanceof RuntimeException) {
    318             {if (true) throw (RuntimeException)jjte000;}
    319           }
    320           if (jjte000 instanceof ParseException) {
    321             {if (true) throw (ParseException)jjte000;}
    322           }
    323           {if (true) throw (Error)jjte000;}
    324     } finally {
    325           if (jjtc000) {
    326             jjtree.closeNodeScope(jjtn000, true);
    327             jjtreeCloseNodeScope(jjtn000);
    328           }
    329     }
    330   }
    331 
    332   final public void angle_addr() throws ParseException {
    333  /*@bgen(jjtree) angle_addr */
    334   ASTangle_addr jjtn000 = new ASTangle_addr(JJTANGLE_ADDR);
    335   boolean jjtc000 = true;
    336   jjtree.openNodeScope(jjtn000);
    337   jjtreeOpenNodeScope(jjtn000);
    338     try {
    339       jj_consume_token(6);
    340       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    341       case 8:
    342         route();
    343         break;
    344       default:
    345         jj_la1[10] = jj_gen;
    346         ;
    347       }
    348       addr_spec();
    349       jj_consume_token(7);
    350     } catch (Throwable jjte000) {
    351           if (jjtc000) {
    352             jjtree.clearNodeScope(jjtn000);
    353             jjtc000 = false;
    354           } else {
    355             jjtree.popNode();
    356           }
    357           if (jjte000 instanceof RuntimeException) {
    358             {if (true) throw (RuntimeException)jjte000;}
    359           }
    360           if (jjte000 instanceof ParseException) {
    361             {if (true) throw (ParseException)jjte000;}
    362           }
    363           {if (true) throw (Error)jjte000;}
    364     } finally {
    365           if (jjtc000) {
    366             jjtree.closeNodeScope(jjtn000, true);
    367             jjtreeCloseNodeScope(jjtn000);
    368           }
    369     }
    370   }
    371 
    372   final public void route() throws ParseException {
    373  /*@bgen(jjtree) route */
    374   ASTroute jjtn000 = new ASTroute(JJTROUTE);
    375   boolean jjtc000 = true;
    376   jjtree.openNodeScope(jjtn000);
    377   jjtreeOpenNodeScope(jjtn000);
    378     try {
    379       jj_consume_token(8);
    380       domain();
    381       label_3:
    382       while (true) {
    383         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    384         case 3:
    385         case 8:
    386           ;
    387           break;
    388         default:
    389           jj_la1[11] = jj_gen;
    390           break label_3;
    391         }
    392         label_4:
    393         while (true) {
    394           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    395           case 3:
    396             ;
    397             break;
    398           default:
    399             jj_la1[12] = jj_gen;
    400             break label_4;
    401           }
    402           jj_consume_token(3);
    403         }
    404         jj_consume_token(8);
    405         domain();
    406       }
    407       jj_consume_token(4);
    408     } catch (Throwable jjte000) {
    409           if (jjtc000) {
    410             jjtree.clearNodeScope(jjtn000);
    411             jjtc000 = false;
    412           } else {
    413             jjtree.popNode();
    414           }
    415           if (jjte000 instanceof RuntimeException) {
    416             {if (true) throw (RuntimeException)jjte000;}
    417           }
    418           if (jjte000 instanceof ParseException) {
    419             {if (true) throw (ParseException)jjte000;}
    420           }
    421           {if (true) throw (Error)jjte000;}
    422     } finally {
    423           if (jjtc000) {
    424             jjtree.closeNodeScope(jjtn000, true);
    425             jjtreeCloseNodeScope(jjtn000);
    426           }
    427     }
    428   }
    429 
    430   final public void phrase() throws ParseException {
    431  /*@bgen(jjtree) phrase */
    432   ASTphrase jjtn000 = new ASTphrase(JJTPHRASE);
    433   boolean jjtc000 = true;
    434   jjtree.openNodeScope(jjtn000);
    435   jjtreeOpenNodeScope(jjtn000);
    436     try {
    437       label_5:
    438       while (true) {
    439         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    440         case DOTATOM:
    441           jj_consume_token(DOTATOM);
    442           break;
    443         case QUOTEDSTRING:
    444           jj_consume_token(QUOTEDSTRING);
    445           break;
    446         default:
    447           jj_la1[13] = jj_gen;
    448           jj_consume_token(-1);
    449           throw new ParseException();
    450         }
    451         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    452         case DOTATOM:
    453         case QUOTEDSTRING:
    454           ;
    455           break;
    456         default:
    457           jj_la1[14] = jj_gen;
    458           break label_5;
    459         }
    460       }
    461     } finally {
    462   if (jjtc000) {
    463     jjtree.closeNodeScope(jjtn000, true);
    464     jjtreeCloseNodeScope(jjtn000);
    465   }
    466     }
    467   }
    468 
    469   final public void addr_spec() throws ParseException {
    470  /*@bgen(jjtree) addr_spec */
    471   ASTaddr_spec jjtn000 = new ASTaddr_spec(JJTADDR_SPEC);
    472   boolean jjtc000 = true;
    473   jjtree.openNodeScope(jjtn000);
    474   jjtreeOpenNodeScope(jjtn000);
    475     try {
    476       local_part();
    477       jj_consume_token(8);
    478       domain();
    479     } catch (Throwable jjte000) {
    480           if (jjtc000) {
    481             jjtree.clearNodeScope(jjtn000);
    482             jjtc000 = false;
    483           } else {
    484             jjtree.popNode();
    485           }
    486           if (jjte000 instanceof RuntimeException) {
    487             {if (true) throw (RuntimeException)jjte000;}
    488           }
    489           if (jjte000 instanceof ParseException) {
    490             {if (true) throw (ParseException)jjte000;}
    491           }
    492           {if (true) throw (Error)jjte000;}
    493     } finally {
    494           if (jjtc000) {
    495             jjtree.closeNodeScope(jjtn000, true);
    496             jjtreeCloseNodeScope(jjtn000);
    497           }
    498     }
    499   }
    500 
    501   final public void local_part() throws ParseException {
    502  /*@bgen(jjtree) local_part */
    503   ASTlocal_part jjtn000 = new ASTlocal_part(JJTLOCAL_PART);
    504   boolean jjtc000 = true;
    505   jjtree.openNodeScope(jjtn000);
    506   jjtreeOpenNodeScope(jjtn000);Token t;
    507     try {
    508       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    509       case DOTATOM:
    510         t = jj_consume_token(DOTATOM);
    511         break;
    512       case QUOTEDSTRING:
    513         t = jj_consume_token(QUOTEDSTRING);
    514         break;
    515       default:
    516         jj_la1[15] = jj_gen;
    517         jj_consume_token(-1);
    518         throw new ParseException();
    519       }
    520       label_6:
    521       while (true) {
    522         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    523         case 9:
    524         case DOTATOM:
    525         case QUOTEDSTRING:
    526           ;
    527           break;
    528         default:
    529           jj_la1[16] = jj_gen;
    530           break label_6;
    531         }
    532         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    533         case 9:
    534           t = jj_consume_token(9);
    535           break;
    536         default:
    537           jj_la1[17] = jj_gen;
    538           ;
    539         }
    540                         if (t.image.charAt(t.image.length() - 1) != '.' || t.kind == AddressListParserConstants.QUOTEDSTRING)
    541                                 {if (true) throw new ParseException("Words in local part must be separated by '.'");}
    542         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    543         case DOTATOM:
    544           t = jj_consume_token(DOTATOM);
    545           break;
    546         case QUOTEDSTRING:
    547           t = jj_consume_token(QUOTEDSTRING);
    548           break;
    549         default:
    550           jj_la1[18] = jj_gen;
    551           jj_consume_token(-1);
    552           throw new ParseException();
    553         }
    554       }
    555     } finally {
    556           if (jjtc000) {
    557             jjtree.closeNodeScope(jjtn000, true);
    558             jjtreeCloseNodeScope(jjtn000);
    559           }
    560     }
    561   }
    562 
    563   final public void domain() throws ParseException {
    564  /*@bgen(jjtree) domain */
    565   ASTdomain jjtn000 = new ASTdomain(JJTDOMAIN);
    566   boolean jjtc000 = true;
    567   jjtree.openNodeScope(jjtn000);
    568   jjtreeOpenNodeScope(jjtn000);Token t;
    569     try {
    570       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    571       case DOTATOM:
    572         t = jj_consume_token(DOTATOM);
    573         label_7:
    574         while (true) {
    575           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    576           case 9:
    577           case DOTATOM:
    578             ;
    579             break;
    580           default:
    581             jj_la1[19] = jj_gen;
    582             break label_7;
    583           }
    584           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    585           case 9:
    586             t = jj_consume_token(9);
    587             break;
    588           default:
    589             jj_la1[20] = jj_gen;
    590             ;
    591           }
    592                                 if (t.image.charAt(t.image.length() - 1) != '.')
    593                                         {if (true) throw new ParseException("Atoms in domain names must be separated by '.'");}
    594           t = jj_consume_token(DOTATOM);
    595         }
    596         break;
    597       case DOMAINLITERAL:
    598         jj_consume_token(DOMAINLITERAL);
    599         break;
    600       default:
    601         jj_la1[21] = jj_gen;
    602         jj_consume_token(-1);
    603         throw new ParseException();
    604       }
    605     } finally {
    606           if (jjtc000) {
    607             jjtree.closeNodeScope(jjtn000, true);
    608             jjtreeCloseNodeScope(jjtn000);
    609           }
    610     }
    611   }
    612 
    613   final private boolean jj_2_1(int xla) {
    614     jj_la = xla; jj_lastpos = jj_scanpos = token;
    615     try { return !jj_3_1(); }
    616     catch(LookaheadSuccess ls) { return true; }
    617     finally { jj_save(0, xla); }
    618   }
    619 
    620   final private boolean jj_2_2(int xla) {
    621     jj_la = xla; jj_lastpos = jj_scanpos = token;
    622     try { return !jj_3_2(); }
    623     catch(LookaheadSuccess ls) { return true; }
    624     finally { jj_save(1, xla); }
    625   }
    626 
    627   final private boolean jj_3R_11() {
    628     Token xsp;
    629     xsp = jj_scanpos;
    630     if (jj_scan_token(9)) jj_scanpos = xsp;
    631     xsp = jj_scanpos;
    632     if (jj_scan_token(14)) {
    633     jj_scanpos = xsp;
    634     if (jj_scan_token(31)) return true;
    635     }
    636     return false;
    637   }
    638 
    639   final private boolean jj_3R_13() {
    640     Token xsp;
    641     xsp = jj_scanpos;
    642     if (jj_scan_token(9)) jj_scanpos = xsp;
    643     if (jj_scan_token(DOTATOM)) return true;
    644     return false;
    645   }
    646 
    647   final private boolean jj_3R_8() {
    648     if (jj_3R_9()) return true;
    649     if (jj_scan_token(8)) return true;
    650     if (jj_3R_10()) return true;
    651     return false;
    652   }
    653 
    654   final private boolean jj_3_1() {
    655     if (jj_3R_8()) return true;
    656     return false;
    657   }
    658 
    659   final private boolean jj_3R_12() {
    660     if (jj_scan_token(DOTATOM)) return true;
    661     Token xsp;
    662     while (true) {
    663       xsp = jj_scanpos;
    664       if (jj_3R_13()) { jj_scanpos = xsp; break; }
    665     }
    666     return false;
    667   }
    668 
    669   final private boolean jj_3R_10() {
    670     Token xsp;
    671     xsp = jj_scanpos;
    672     if (jj_3R_12()) {
    673     jj_scanpos = xsp;
    674     if (jj_scan_token(18)) return true;
    675     }
    676     return false;
    677   }
    678 
    679   final private boolean jj_3_2() {
    680     if (jj_3R_8()) return true;
    681     return false;
    682   }
    683 
    684   final private boolean jj_3R_9() {
    685     Token xsp;
    686     xsp = jj_scanpos;
    687     if (jj_scan_token(14)) {
    688     jj_scanpos = xsp;
    689     if (jj_scan_token(31)) return true;
    690     }
    691     while (true) {
    692       xsp = jj_scanpos;
    693       if (jj_3R_11()) { jj_scanpos = xsp; break; }
    694     }
    695     return false;
    696   }
    697 
    698   public AddressListParserTokenManager token_source;
    699   SimpleCharStream jj_input_stream;
    700   public Token token, jj_nt;
    701   private int jj_ntk;
    702   private Token jj_scanpos, jj_lastpos;
    703   private int jj_la;
    704   public boolean lookingAhead = false;
    705   private boolean jj_semLA;
    706   private int jj_gen;
    707   final private int[] jj_la1 = new int[22];
    708   static private int[] jj_la1_0;
    709   static private int[] jj_la1_1;
    710   static {
    711       jj_la1_0();
    712       jj_la1_1();
    713    }
    714    private static void jj_la1_0() {
    715       jj_la1_0 = new int[] {0x2,0x80004040,0x8,0x80004040,0x50,0x80004040,0x80004040,0x80004040,0x8,0x80004040,0x100,0x108,0x8,0x80004000,0x80004000,0x80004000,0x80004200,0x200,0x80004000,0x4200,0x200,0x44000,};
    716    }
    717    private static void jj_la1_1() {
    718       jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    719    }
    720   final private JJCalls[] jj_2_rtns = new JJCalls[2];
    721   private boolean jj_rescan = false;
    722   private int jj_gc = 0;
    723 
    724   public AddressListParser(java.io.InputStream stream) {
    725      this(stream, null);
    726   }
    727   public AddressListParser(java.io.InputStream stream, String encoding) {
    728     try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
    729     token_source = new AddressListParserTokenManager(jj_input_stream);
    730     token = new Token();
    731     jj_ntk = -1;
    732     jj_gen = 0;
    733     for (int i = 0; i < 22; i++) jj_la1[i] = -1;
    734     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    735   }
    736 
    737   public void ReInit(java.io.InputStream stream) {
    738      ReInit(stream, null);
    739   }
    740   public void ReInit(java.io.InputStream stream, String encoding) {
    741     try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
    742     token_source.ReInit(jj_input_stream);
    743     token = new Token();
    744     jj_ntk = -1;
    745     jjtree.reset();
    746     jj_gen = 0;
    747     for (int i = 0; i < 22; i++) jj_la1[i] = -1;
    748     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    749   }
    750 
    751   public AddressListParser(java.io.Reader stream) {
    752     jj_input_stream = new SimpleCharStream(stream, 1, 1);
    753     token_source = new AddressListParserTokenManager(jj_input_stream);
    754     token = new Token();
    755     jj_ntk = -1;
    756     jj_gen = 0;
    757     for (int i = 0; i < 22; i++) jj_la1[i] = -1;
    758     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    759   }
    760 
    761   public void ReInit(java.io.Reader stream) {
    762     jj_input_stream.ReInit(stream, 1, 1);
    763     token_source.ReInit(jj_input_stream);
    764     token = new Token();
    765     jj_ntk = -1;
    766     jjtree.reset();
    767     jj_gen = 0;
    768     for (int i = 0; i < 22; i++) jj_la1[i] = -1;
    769     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    770   }
    771 
    772   public AddressListParser(AddressListParserTokenManager tm) {
    773     token_source = tm;
    774     token = new Token();
    775     jj_ntk = -1;
    776     jj_gen = 0;
    777     for (int i = 0; i < 22; i++) jj_la1[i] = -1;
    778     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    779   }
    780 
    781   public void ReInit(AddressListParserTokenManager tm) {
    782     token_source = tm;
    783     token = new Token();
    784     jj_ntk = -1;
    785     jjtree.reset();
    786     jj_gen = 0;
    787     for (int i = 0; i < 22; i++) jj_la1[i] = -1;
    788     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
    789   }
    790 
    791   final private Token jj_consume_token(int kind) throws ParseException {
    792     Token oldToken;
    793     if ((oldToken = token).next != null) token = token.next;
    794     else token = token.next = token_source.getNextToken();
    795     jj_ntk = -1;
    796     if (token.kind == kind) {
    797       jj_gen++;
    798       if (++jj_gc > 100) {
    799         jj_gc = 0;
    800         for (int i = 0; i < jj_2_rtns.length; i++) {
    801           JJCalls c = jj_2_rtns[i];
    802           while (c != null) {
    803             if (c.gen < jj_gen) c.first = null;
    804             c = c.next;
    805           }
    806         }
    807       }
    808       return token;
    809     }
    810     token = oldToken;
    811     jj_kind = kind;
    812     throw generateParseException();
    813   }
    814 
    815   static private final class LookaheadSuccess extends java.lang.Error { }
    816   final private LookaheadSuccess jj_ls = new LookaheadSuccess();
    817   final private boolean jj_scan_token(int kind) {
    818     if (jj_scanpos == jj_lastpos) {
    819       jj_la--;
    820       if (jj_scanpos.next == null) {
    821         jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
    822       } else {
    823         jj_lastpos = jj_scanpos = jj_scanpos.next;
    824       }
    825     } else {
    826       jj_scanpos = jj_scanpos.next;
    827     }
    828     if (jj_rescan) {
    829       int i = 0; Token tok = token;
    830       while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
    831       if (tok != null) jj_add_error_token(kind, i);
    832     }
    833     if (jj_scanpos.kind != kind) return true;
    834     if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
    835     return false;
    836   }
    837 
    838   final public Token getNextToken() {
    839     if (token.next != null) token = token.next;
    840     else token = token.next = token_source.getNextToken();
    841     jj_ntk = -1;
    842     jj_gen++;
    843     return token;
    844   }
    845 
    846   final public Token getToken(int index) {
    847     Token t = lookingAhead ? jj_scanpos : token;
    848     for (int i = 0; i < index; i++) {
    849       if (t.next != null) t = t.next;
    850       else t = t.next = token_source.getNextToken();
    851     }
    852     return t;
    853   }
    854 
    855   final private int jj_ntk() {
    856     if ((jj_nt=token.next) == null)
    857       return (jj_ntk = (token.next=token_source.getNextToken()).kind);
    858     else
    859       return (jj_ntk = jj_nt.kind);
    860   }
    861 
    862   private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>();
    863   private int[] jj_expentry;
    864   private int jj_kind = -1;
    865   private int[] jj_lasttokens = new int[100];
    866   private int jj_endpos;
    867 
    868   private void jj_add_error_token(int kind, int pos) {
    869     if (pos >= 100) return;
    870     if (pos == jj_endpos + 1) {
    871       jj_lasttokens[jj_endpos++] = kind;
    872     } else if (jj_endpos != 0) {
    873       jj_expentry = new int[jj_endpos];
    874       for (int i = 0; i < jj_endpos; i++) {
    875         jj_expentry[i] = jj_lasttokens[i];
    876       }
    877       boolean exists = false;
    878       for (java.util.Enumeration<int[]> e = jj_expentries.elements(); e.hasMoreElements();) {
    879         int[] oldentry = e.nextElement();
    880         if (oldentry.length == jj_expentry.length) {
    881           exists = true;
    882           for (int i = 0; i < jj_expentry.length; i++) {
    883             if (oldentry[i] != jj_expentry[i]) {
    884               exists = false;
    885               break;
    886             }
    887           }
    888           if (exists) break;
    889         }
    890       }
    891       if (!exists) jj_expentries.addElement(jj_expentry);
    892       if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
    893     }
    894   }
    895 
    896   public ParseException generateParseException() {
    897     jj_expentries.removeAllElements();
    898     boolean[] la1tokens = new boolean[34];
    899     for (int i = 0; i < 34; i++) {
    900       la1tokens[i] = false;
    901     }
    902     if (jj_kind >= 0) {
    903       la1tokens[jj_kind] = true;
    904       jj_kind = -1;
    905     }
    906     for (int i = 0; i < 22; i++) {
    907       if (jj_la1[i] == jj_gen) {
    908         for (int j = 0; j < 32; j++) {
    909           if ((jj_la1_0[i] & (1<<j)) != 0) {
    910             la1tokens[j] = true;
    911           }
    912           if ((jj_la1_1[i] & (1<<j)) != 0) {
    913             la1tokens[32+j] = true;
    914           }
    915         }
    916       }
    917     }
    918     for (int i = 0; i < 34; i++) {
    919       if (la1tokens[i]) {
    920         jj_expentry = new int[1];
    921         jj_expentry[0] = i;
    922         jj_expentries.addElement(jj_expentry);
    923       }
    924     }
    925     jj_endpos = 0;
    926     jj_rescan_token();
    927     jj_add_error_token(0, 0);
    928     int[][] exptokseq = new int[jj_expentries.size()][];
    929     for (int i = 0; i < jj_expentries.size(); i++) {
    930       exptokseq[i] = jj_expentries.elementAt(i);
    931     }
    932     return new ParseException(token, exptokseq, tokenImage);
    933   }
    934 
    935   final public void enable_tracing() {
    936   }
    937 
    938   final public void disable_tracing() {
    939   }
    940 
    941   final private void jj_rescan_token() {
    942     jj_rescan = true;
    943     for (int i = 0; i < 2; i++) {
    944     try {
    945       JJCalls p = jj_2_rtns[i];
    946       do {
    947         if (p.gen > jj_gen) {
    948           jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
    949           switch (i) {
    950             case 0: jj_3_1(); break;
    951             case 1: jj_3_2(); break;
    952           }
    953         }
    954         p = p.next;
    955       } while (p != null);
    956       } catch(LookaheadSuccess ls) { }
    957     }
    958     jj_rescan = false;
    959   }
    960 
    961   final private void jj_save(int index, int xla) {
    962     JJCalls p = jj_2_rtns[index];
    963     while (p.gen > jj_gen) {
    964       if (p.next == null) { p = p.next = new JJCalls(); break; }
    965       p = p.next;
    966     }
    967     p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
    968   }
    969 
    970   static final class JJCalls {
    971     int gen;
    972     Token first;
    973     int arg;
    974     JJCalls next;
    975   }
    976 
    977 }
    978