1 /*
   2  * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 /* Generated By:JavaCC: Do not edit this line. ExpressionParser.java */
  27 package com.sun.tools.example.debug.expr;
  28 
  29 import com.sun.jdi.*;
  30 import java.util.Stack;
  31 import java.util.List;
  32 import java.util.ArrayList;
  33 
  34 public class ExpressionParser implements ExpressionParserConstants {
  35 
  36   Stack stack = new Stack();
  37   VirtualMachine vm = null;
  38   GetFrame frameGetter = null;
  39   private static GetFrame lastFrameGetter;
  40   private static LValue lastLValue;
  41 
  42   LValue peek() {
  43     return (LValue)stack.peek();
  44   }
  45 
  46   LValue pop() {
  47     return (LValue)stack.pop();
  48   }
  49 
  50   void push(LValue lval) {
  51     stack.push(lval);
  52   }
  53 
  54   public static Value getMassagedValue() throws ParseException {
  55         return lastLValue.getMassagedValue(lastFrameGetter);
  56   }
  57 
  58   public interface GetFrame {
  59         StackFrame get() throws IncompatibleThreadStateException;
  60   }
  61 
  62   public static Value evaluate(String expr, VirtualMachine vm,
  63                                GetFrame frameGetter) throws ParseException,
  64                                             InvocationException,
  65                                             InvalidTypeException,
  66                                             ClassNotLoadedException,
  67                                             IncompatibleThreadStateException {
  68         // TODO StringBufferInputStream is deprecated.
  69         java.io.InputStream in = new java.io.StringBufferInputStream(expr);
  70         ExpressionParser parser = new ExpressionParser(in);
  71         parser.vm = vm;
  72         parser.frameGetter = frameGetter;
  73         Value value = null;
  74         parser.Expression();
  75         lastFrameGetter = frameGetter;
  76         lastLValue = parser.pop();
  77         return lastLValue.getValue();
  78   }
  79 
  80   public static void main(String args[]) {
  81     ExpressionParser parser;
  82     System.out.print("Java Expression Parser:  ");
  83     if (args.length == 0) {
  84       System.out.println("Reading from standard input . . .");
  85       parser = new ExpressionParser(System.in);
  86     } else if (args.length == 1) {
  87       System.out.println("Reading from file " + args[0] + " . . .");
  88       try {
  89         parser = new ExpressionParser(new java.io.FileInputStream(args[0]));
  90       } catch (java.io.FileNotFoundException e) {
  91         System.out.println("Java Parser Version 1.0.2:  File " +
  92                            args[0] + " not found.");
  93         return;
  94       }
  95     } else {
  96       System.out.println("Usage is one of:");
  97       System.out.println("         java ExpressionParser < inputfile");
  98       System.out.println("OR");
  99       System.out.println("         java ExpressionParser inputfile");
 100       return;
 101     }
 102     try {
 103         parser.Expression();
 104         System.out.print("Java Expression Parser:  ");
 105         System.out.println("Java program parsed successfully.");
 106     } catch (ParseException e) {
 107         System.out.print("Java Expression Parser:  ");
 108         System.out.println("Encountered errors during parse.");
 109     }
 110   }
 111 
 112 /*****************************************
 113  * THE JAVA LANGUAGE GRAMMAR STARTS HERE *
 114  *****************************************/
 115 
 116 /*
 117  * Type, name and expression syntax follows.
 118  */
 119   final public void Type() throws ParseException {
 120     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 121     case BOOLEAN:
 122     case BYTE:
 123     case CHAR:
 124     case DOUBLE:
 125     case FLOAT:
 126     case INT:
 127     case LONG:
 128     case SHORT:
 129       PrimitiveType();
 130       break;
 131     case IDENTIFIER:
 132       Name();
 133       break;
 134     default:
 135       jj_la1[0] = jj_gen;
 136       jj_consume_token(-1);
 137       throw new ParseException();
 138     }
 139     label_1:
 140     while (true) {
 141       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 142       case LBRACKET:
 143         ;
 144         break;
 145       default:
 146         jj_la1[1] = jj_gen;
 147         break label_1;
 148       }
 149       jj_consume_token(LBRACKET);
 150       jj_consume_token(RBRACKET);
 151     }
 152   }
 153 
 154   final public void PrimitiveType() throws ParseException {
 155     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 156     case BOOLEAN:
 157       jj_consume_token(BOOLEAN);
 158       break;
 159     case CHAR:
 160       jj_consume_token(CHAR);
 161       break;
 162     case BYTE:
 163       jj_consume_token(BYTE);
 164       break;
 165     case SHORT:
 166       jj_consume_token(SHORT);
 167       break;
 168     case INT:
 169       jj_consume_token(INT);
 170       break;
 171     case LONG:
 172       jj_consume_token(LONG);
 173       break;
 174     case FLOAT:
 175       jj_consume_token(FLOAT);
 176       break;
 177     case DOUBLE:
 178       jj_consume_token(DOUBLE);
 179       break;
 180     default:
 181       jj_la1[2] = jj_gen;
 182       jj_consume_token(-1);
 183       throw new ParseException();
 184     }
 185   }
 186 
 187   final public String Name() throws ParseException {
 188     StringBuilder sb = new StringBuilder();
 189     jj_consume_token(IDENTIFIER);
 190                  sb.append(token);
 191     label_2:
 192     while (true) {
 193       if (jj_2_1(2)) {
 194         ;
 195       } else {
 196         break label_2;
 197       }
 198       jj_consume_token(DOT);
 199       jj_consume_token(IDENTIFIER);
 200                                     sb.append('.'); sb.append(token);
 201     }
 202           {if (true) return sb.toString();}
 203     throw new Error("Missing return statement in function");
 204   }
 205 
 206   final public void NameList() throws ParseException {
 207     Name();
 208     label_3:
 209     while (true) {
 210       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 211       case COMMA:
 212         ;
 213         break;
 214       default:
 215         jj_la1[3] = jj_gen;
 216         break label_3;
 217       }
 218       jj_consume_token(COMMA);
 219       Name();
 220     }
 221   }
 222 
 223 /*
 224  * Expression syntax follows.
 225  */
 226   final public void Expression() throws ParseException {
 227     if (jj_2_2(2147483647)) {
 228       Assignment();
 229     } else {
 230       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 231       case FALSE:
 232       case NEW:
 233       case NULL:
 234       case SUPER:
 235       case THIS:
 236       case TRUE:
 237       case INTEGER_LITERAL:
 238       case FLOATING_POINT_LITERAL:
 239       case CHARACTER_LITERAL:
 240       case STRING_LITERAL:
 241       case IDENTIFIER:
 242       case LPAREN:
 243       case BANG:
 244       case TILDE:
 245       case INCR:
 246       case DECR:
 247       case PLUS:
 248       case MINUS:
 249         ConditionalExpression();
 250         break;
 251       default:
 252         jj_la1[4] = jj_gen;
 253         jj_consume_token(-1);
 254         throw new ParseException();
 255       }
 256     }
 257   }
 258 
 259   final public void Assignment() throws ParseException {
 260     PrimaryExpression();
 261     AssignmentOperator();
 262     Expression();
 263           LValue exprVal = pop(); pop().setValue(exprVal); push(exprVal);
 264   }
 265 
 266   final public void AssignmentOperator() throws ParseException {
 267     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 268     case ASSIGN:
 269       jj_consume_token(ASSIGN);
 270       break;
 271     case STARASSIGN:
 272       jj_consume_token(STARASSIGN);
 273       break;
 274     case SLASHASSIGN:
 275       jj_consume_token(SLASHASSIGN);
 276       break;
 277     case REMASSIGN:
 278       jj_consume_token(REMASSIGN);
 279       break;
 280     case PLUSASSIGN:
 281       jj_consume_token(PLUSASSIGN);
 282       break;
 283     case MINUSASSIGN:
 284       jj_consume_token(MINUSASSIGN);
 285       break;
 286     case LSHIFTASSIGN:
 287       jj_consume_token(LSHIFTASSIGN);
 288       break;
 289     case RSIGNEDSHIFTASSIGN:
 290       jj_consume_token(RSIGNEDSHIFTASSIGN);
 291       break;
 292     case RUNSIGNEDSHIFTASSIGN:
 293       jj_consume_token(RUNSIGNEDSHIFTASSIGN);
 294       break;
 295     case ANDASSIGN:
 296       jj_consume_token(ANDASSIGN);
 297       break;
 298     case XORASSIGN:
 299       jj_consume_token(XORASSIGN);
 300       break;
 301     case ORASSIGN:
 302       jj_consume_token(ORASSIGN);
 303       break;
 304     default:
 305       jj_la1[5] = jj_gen;
 306       jj_consume_token(-1);
 307       throw new ParseException();
 308     }
 309   }
 310 
 311   final public void ConditionalExpression() throws ParseException {
 312     ConditionalOrExpression();
 313     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 314     case HOOK:
 315       jj_consume_token(HOOK);
 316       Expression();
 317       jj_consume_token(COLON);
 318       ConditionalExpression();
 319                   LValue falseBranch = pop(); LValue trueBranch = pop();
 320                   Value cond = pop().interiorGetValue();
 321                   if (cond instanceof BooleanValue) {
 322                         push(((BooleanValue)cond).booleanValue()?
 323                                         trueBranch : falseBranch);
 324                   } else {
 325                         {if (true) throw new ParseException("Condition must be boolean");}
 326                   }
 327       break;
 328     default:
 329       jj_la1[6] = jj_gen;
 330       ;
 331     }
 332   }
 333 
 334   final public void ConditionalOrExpression() throws ParseException {
 335     ConditionalAndExpression();
 336     label_4:
 337     while (true) {
 338       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 339       case SC_OR:
 340         ;
 341         break;
 342       default:
 343         jj_la1[7] = jj_gen;
 344         break label_4;
 345       }
 346       jj_consume_token(SC_OR);
 347       ConditionalAndExpression();
 348                           {if (true) throw new ParseException("operation not yet supported");}
 349     }
 350   }
 351 
 352   final public void ConditionalAndExpression() throws ParseException {
 353     InclusiveOrExpression();
 354     label_5:
 355     while (true) {
 356       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 357       case SC_AND:
 358         ;
 359         break;
 360       default:
 361         jj_la1[8] = jj_gen;
 362         break label_5;
 363       }
 364       jj_consume_token(SC_AND);
 365       InclusiveOrExpression();
 366                           {if (true) throw new ParseException("operation not yet supported");}
 367     }
 368   }
 369 
 370   final public void InclusiveOrExpression() throws ParseException {
 371     ExclusiveOrExpression();
 372     label_6:
 373     while (true) {
 374       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 375       case BIT_OR:
 376         ;
 377         break;
 378       default:
 379         jj_la1[9] = jj_gen;
 380         break label_6;
 381       }
 382       jj_consume_token(BIT_OR);
 383       ExclusiveOrExpression();
 384                           {if (true) throw new ParseException("operation not yet supported");}
 385     }
 386   }
 387 
 388   final public void ExclusiveOrExpression() throws ParseException {
 389     AndExpression();
 390     label_7:
 391     while (true) {
 392       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 393       case XOR:
 394         ;
 395         break;
 396       default:
 397         jj_la1[10] = jj_gen;
 398         break label_7;
 399       }
 400       jj_consume_token(XOR);
 401       AndExpression();
 402                           {if (true) throw new ParseException("operation not yet supported");}
 403     }
 404   }
 405 
 406   final public void AndExpression() throws ParseException {
 407     EqualityExpression();
 408     label_8:
 409     while (true) {
 410       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 411       case BIT_AND:
 412         ;
 413         break;
 414       default:
 415         jj_la1[11] = jj_gen;
 416         break label_8;
 417       }
 418       jj_consume_token(BIT_AND);
 419       EqualityExpression();
 420                           {if (true) throw new ParseException("operation not yet supported");}
 421     }
 422   }
 423 
 424   final public void EqualityExpression() throws ParseException {
 425  Token tok;
 426     InstanceOfExpression();
 427     label_9:
 428     while (true) {
 429       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 430       case EQ:
 431       case NE:
 432         ;
 433         break;
 434       default:
 435         jj_la1[12] = jj_gen;
 436         break label_9;
 437       }
 438       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 439       case EQ:
 440         tok = jj_consume_token(EQ);
 441         break;
 442       case NE:
 443         tok = jj_consume_token(NE);
 444         break;
 445       default:
 446         jj_la1[13] = jj_gen;
 447         jj_consume_token(-1);
 448         throw new ParseException();
 449       }
 450       InstanceOfExpression();
 451                   LValue left = pop();
 452                   push( LValue.booleanOperation(vm, tok, pop(), left) );
 453     }
 454   }
 455 
 456   final public void InstanceOfExpression() throws ParseException {
 457     RelationalExpression();
 458     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 459     case INSTANCEOF:
 460       jj_consume_token(INSTANCEOF);
 461       Type();
 462                           {if (true) throw new ParseException("operation not yet supported");}
 463       break;
 464     default:
 465       jj_la1[14] = jj_gen;
 466       ;
 467     }
 468   }
 469 
 470   final public void RelationalExpression() throws ParseException {
 471  Token tok;
 472     ShiftExpression();
 473     label_10:
 474     while (true) {
 475       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 476       case GT:
 477       case LT:
 478       case LE:
 479       case GE:
 480         ;
 481         break;
 482       default:
 483         jj_la1[15] = jj_gen;
 484         break label_10;
 485       }
 486       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 487       case LT:
 488         tok = jj_consume_token(LT);
 489         break;
 490       case GT:
 491         tok = jj_consume_token(GT);
 492         break;
 493       case LE:
 494         tok = jj_consume_token(LE);
 495         break;
 496       case GE:
 497         tok = jj_consume_token(GE);
 498         break;
 499       default:
 500         jj_la1[16] = jj_gen;
 501         jj_consume_token(-1);
 502         throw new ParseException();
 503       }
 504       ShiftExpression();
 505                   LValue left = pop();
 506                   push( LValue.booleanOperation(vm, tok, pop(), left) );
 507     }
 508   }
 509 
 510   final public void ShiftExpression() throws ParseException {
 511     AdditiveExpression();
 512     label_11:
 513     while (true) {
 514       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 515       case LSHIFT:
 516       case RSIGNEDSHIFT:
 517       case RUNSIGNEDSHIFT:
 518         ;
 519         break;
 520       default:
 521         jj_la1[17] = jj_gen;
 522         break label_11;
 523       }
 524       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 525       case LSHIFT:
 526         jj_consume_token(LSHIFT);
 527         break;
 528       case RSIGNEDSHIFT:
 529         jj_consume_token(RSIGNEDSHIFT);
 530         break;
 531       case RUNSIGNEDSHIFT:
 532         jj_consume_token(RUNSIGNEDSHIFT);
 533         break;
 534       default:
 535         jj_la1[18] = jj_gen;
 536         jj_consume_token(-1);
 537         throw new ParseException();
 538       }
 539       AdditiveExpression();
 540                           {if (true) throw new ParseException("operation not yet supported");}
 541     }
 542   }
 543 
 544   final public void AdditiveExpression() throws ParseException {
 545  Token tok;
 546     MultiplicativeExpression();
 547     label_12:
 548     while (true) {
 549       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 550       case PLUS:
 551       case MINUS:
 552         ;
 553         break;
 554       default:
 555         jj_la1[19] = jj_gen;
 556         break label_12;
 557       }
 558       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 559       case PLUS:
 560         tok = jj_consume_token(PLUS);
 561         break;
 562       case MINUS:
 563         tok = jj_consume_token(MINUS);
 564         break;
 565       default:
 566         jj_la1[20] = jj_gen;
 567         jj_consume_token(-1);
 568         throw new ParseException();
 569       }
 570       MultiplicativeExpression();
 571                   LValue left = pop();
 572                   push( LValue.operation(vm, tok, pop(), left, frameGetter) );
 573     }
 574   }
 575 
 576   final public void MultiplicativeExpression() throws ParseException {
 577  Token tok;
 578     UnaryExpression();
 579     label_13:
 580     while (true) {
 581       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 582       case STAR:
 583       case SLASH:
 584       case REM:
 585         ;
 586         break;
 587       default:
 588         jj_la1[21] = jj_gen;
 589         break label_13;
 590       }
 591       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 592       case STAR:
 593         tok = jj_consume_token(STAR);
 594         break;
 595       case SLASH:
 596         tok = jj_consume_token(SLASH);
 597         break;
 598       case REM:
 599         tok = jj_consume_token(REM);
 600         break;
 601       default:
 602         jj_la1[22] = jj_gen;
 603         jj_consume_token(-1);
 604         throw new ParseException();
 605       }
 606       UnaryExpression();
 607                   LValue left = pop();
 608                   push( LValue.operation(vm, tok, pop(), left, frameGetter) );
 609     }
 610   }
 611 
 612   final public void UnaryExpression() throws ParseException {
 613  Token tok;
 614     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 615     case PLUS:
 616     case MINUS:
 617       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 618       case PLUS:
 619         tok = jj_consume_token(PLUS);
 620         break;
 621       case MINUS:
 622         tok = jj_consume_token(MINUS);
 623         break;
 624       default:
 625         jj_la1[23] = jj_gen;
 626         jj_consume_token(-1);
 627         throw new ParseException();
 628       }
 629       UnaryExpression();
 630                   push( LValue.operation(vm, tok, pop(), frameGetter) );
 631       break;
 632     case INCR:
 633       PreIncrementExpression();
 634       break;
 635     case DECR:
 636       PreDecrementExpression();
 637       break;
 638     case FALSE:
 639     case NEW:
 640     case NULL:
 641     case SUPER:
 642     case THIS:
 643     case TRUE:
 644     case INTEGER_LITERAL:
 645     case FLOATING_POINT_LITERAL:
 646     case CHARACTER_LITERAL:
 647     case STRING_LITERAL:
 648     case IDENTIFIER:
 649     case LPAREN:
 650     case BANG:
 651     case TILDE:
 652       UnaryExpressionNotPlusMinus();
 653       break;
 654     default:
 655       jj_la1[24] = jj_gen;
 656       jj_consume_token(-1);
 657       throw new ParseException();
 658     }
 659   }
 660 
 661   final public void PreIncrementExpression() throws ParseException {
 662     jj_consume_token(INCR);
 663     PrimaryExpression();
 664                           {if (true) throw new ParseException("operation not yet supported");}
 665   }
 666 
 667   final public void PreDecrementExpression() throws ParseException {
 668     jj_consume_token(DECR);
 669     PrimaryExpression();
 670                           {if (true) throw new ParseException("operation not yet supported");}
 671   }
 672 
 673   final public void UnaryExpressionNotPlusMinus() throws ParseException {
 674  Token tok;
 675     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 676     case BANG:
 677     case TILDE:
 678       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 679       case TILDE:
 680         tok = jj_consume_token(TILDE);
 681         break;
 682       case BANG:
 683         tok = jj_consume_token(BANG);
 684         break;
 685       default:
 686         jj_la1[25] = jj_gen;
 687         jj_consume_token(-1);
 688         throw new ParseException();
 689       }
 690       UnaryExpression();
 691                   push( LValue.operation(vm, tok, pop(), frameGetter) );
 692       break;
 693     default:
 694       jj_la1[26] = jj_gen;
 695       if (jj_2_3(2147483647)) {
 696         CastExpression();
 697       } else {
 698         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 699         case FALSE:
 700         case NEW:
 701         case NULL:
 702         case SUPER:
 703         case THIS:
 704         case TRUE:
 705         case INTEGER_LITERAL:
 706         case FLOATING_POINT_LITERAL:
 707         case CHARACTER_LITERAL:
 708         case STRING_LITERAL:
 709         case IDENTIFIER:
 710         case LPAREN:
 711           PostfixExpression();
 712           break;
 713         default:
 714           jj_la1[27] = jj_gen;
 715           jj_consume_token(-1);
 716           throw new ParseException();
 717         }
 718       }
 719     }
 720   }
 721 
 722 // This production is to determine lookahead only.  The LOOKAHEAD specifications
 723 // below are not used, but they are there just to indicate that we know about
 724 // this.
 725   final public void CastLookahead() throws ParseException {
 726     if (jj_2_4(2)) {
 727       jj_consume_token(LPAREN);
 728       PrimitiveType();
 729     } else if (jj_2_5(2147483647)) {
 730       jj_consume_token(LPAREN);
 731       Name();
 732       jj_consume_token(LBRACKET);
 733       jj_consume_token(RBRACKET);
 734     } else {
 735       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 736       case LPAREN:
 737         jj_consume_token(LPAREN);
 738         Name();
 739         jj_consume_token(RPAREN);
 740         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 741         case TILDE:
 742           jj_consume_token(TILDE);
 743           break;
 744         case BANG:
 745           jj_consume_token(BANG);
 746           break;
 747         case LPAREN:
 748           jj_consume_token(LPAREN);
 749           break;
 750         case IDENTIFIER:
 751           jj_consume_token(IDENTIFIER);
 752           break;
 753         case THIS:
 754           jj_consume_token(THIS);
 755           break;
 756         case SUPER:
 757           jj_consume_token(SUPER);
 758           break;
 759         case NEW:
 760           jj_consume_token(NEW);
 761           break;
 762         case FALSE:
 763         case NULL:
 764         case TRUE:
 765         case INTEGER_LITERAL:
 766         case FLOATING_POINT_LITERAL:
 767         case CHARACTER_LITERAL:
 768         case STRING_LITERAL:
 769           Literal();
 770           break;
 771         default:
 772           jj_la1[28] = jj_gen;
 773           jj_consume_token(-1);
 774           throw new ParseException();
 775         }
 776         break;
 777       default:
 778         jj_la1[29] = jj_gen;
 779         jj_consume_token(-1);
 780         throw new ParseException();
 781       }
 782     }
 783   }
 784 
 785   final public void PostfixExpression() throws ParseException {
 786     PrimaryExpression();
 787     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 788     case INCR:
 789     case DECR:
 790       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 791       case INCR:
 792         jj_consume_token(INCR);
 793         break;
 794       case DECR:
 795         jj_consume_token(DECR);
 796                           {if (true) throw new ParseException("operation not yet supported");}
 797         break;
 798       default:
 799         jj_la1[30] = jj_gen;
 800         jj_consume_token(-1);
 801         throw new ParseException();
 802       }
 803       break;
 804     default:
 805       jj_la1[31] = jj_gen;
 806       ;
 807     }
 808   }
 809 
 810   final public void CastExpression() throws ParseException {
 811     if (jj_2_6(2)) {
 812       jj_consume_token(LPAREN);
 813       PrimitiveType();
 814       label_14:
 815       while (true) {
 816         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 817         case LBRACKET:
 818           ;
 819           break;
 820         default:
 821           jj_la1[32] = jj_gen;
 822           break label_14;
 823         }
 824         jj_consume_token(LBRACKET);
 825         jj_consume_token(RBRACKET);
 826       }
 827       jj_consume_token(RPAREN);
 828       UnaryExpression();
 829     } else {
 830       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 831       case LPAREN:
 832         jj_consume_token(LPAREN);
 833         Name();
 834         label_15:
 835         while (true) {
 836           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 837           case LBRACKET:
 838             ;
 839             break;
 840           default:
 841             jj_la1[33] = jj_gen;
 842             break label_15;
 843           }
 844           jj_consume_token(LBRACKET);
 845           jj_consume_token(RBRACKET);
 846         }
 847         jj_consume_token(RPAREN);
 848         UnaryExpressionNotPlusMinus();
 849         break;
 850       default:
 851         jj_la1[34] = jj_gen;
 852         jj_consume_token(-1);
 853         throw new ParseException();
 854       }
 855     }
 856   }
 857 
 858   final public void PrimaryExpression() throws ParseException {
 859     PrimaryPrefix();
 860     label_16:
 861     while (true) {
 862       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 863       case LPAREN:
 864       case LBRACKET:
 865       case DOT:
 866         ;
 867         break;
 868       default:
 869         jj_la1[35] = jj_gen;
 870         break label_16;
 871       }
 872       PrimarySuffix();
 873     }
 874   }
 875 
 876   final public void PrimaryPrefix() throws ParseException {
 877  String name;
 878     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 879     case FALSE:
 880     case NULL:
 881     case TRUE:
 882     case INTEGER_LITERAL:
 883     case FLOATING_POINT_LITERAL:
 884     case CHARACTER_LITERAL:
 885     case STRING_LITERAL:
 886       Literal();
 887       break;
 888     case IDENTIFIER:
 889       name = Name();
 890                           push(LValue.makeName(vm, frameGetter, name));
 891       break;
 892     case THIS:
 893       jj_consume_token(THIS);
 894                           push(LValue.makeThisObject(vm, frameGetter, token));
 895       break;
 896     case SUPER:
 897       jj_consume_token(SUPER);
 898       jj_consume_token(DOT);
 899       jj_consume_token(IDENTIFIER);
 900                           {if (true) throw new ParseException("operation not yet supported");}
 901       break;
 902     case LPAREN:
 903       jj_consume_token(LPAREN);
 904       Expression();
 905       jj_consume_token(RPAREN);
 906       break;
 907     case NEW:
 908       AllocationExpression();
 909       break;
 910     default:
 911       jj_la1[36] = jj_gen;
 912       jj_consume_token(-1);
 913       throw new ParseException();
 914     }
 915   }
 916 
 917   final public void PrimarySuffix() throws ParseException {
 918  List argList;
 919     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 920     case LBRACKET:
 921       jj_consume_token(LBRACKET);
 922       Expression();
 923       jj_consume_token(RBRACKET);
 924                           LValue index = pop();
 925                           push(pop().arrayElementLValue(index));
 926       break;
 927     case DOT:
 928       jj_consume_token(DOT);
 929       jj_consume_token(IDENTIFIER);
 930                           push(pop().memberLValue(frameGetter, token.image));
 931       break;
 932     case LPAREN:
 933       argList = Arguments();
 934                           peek().invokeWith(argList);
 935       break;
 936     default:
 937       jj_la1[37] = jj_gen;
 938       jj_consume_token(-1);
 939       throw new ParseException();
 940     }
 941   }
 942 
 943   final public void Literal() throws ParseException {
 944     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 945     case INTEGER_LITERAL:
 946       jj_consume_token(INTEGER_LITERAL);
 947                           push(LValue.makeInteger(vm, token));
 948       break;
 949     case FLOATING_POINT_LITERAL:
 950       jj_consume_token(FLOATING_POINT_LITERAL);
 951                           push(LValue.makeFloat(vm, token));
 952       break;
 953     case CHARACTER_LITERAL:
 954       jj_consume_token(CHARACTER_LITERAL);
 955                           push(LValue.makeCharacter(vm, token));
 956       break;
 957     case STRING_LITERAL:
 958       jj_consume_token(STRING_LITERAL);
 959                           push(LValue.makeString(vm, token));
 960       break;
 961     case FALSE:
 962     case TRUE:
 963       BooleanLiteral();
 964                           push(LValue.makeBoolean(vm, token));
 965       break;
 966     case NULL:
 967       NullLiteral();
 968                           push(LValue.makeNull(vm, token));
 969       break;
 970     default:
 971       jj_la1[38] = jj_gen;
 972       jj_consume_token(-1);
 973       throw new ParseException();
 974     }
 975   }
 976 
 977   final public void BooleanLiteral() throws ParseException {
 978     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
 979     case TRUE:
 980       jj_consume_token(TRUE);
 981       break;
 982     case FALSE:
 983       jj_consume_token(FALSE);
 984       break;
 985     default:
 986       jj_la1[39] = jj_gen;
 987       jj_consume_token(-1);
 988       throw new ParseException();
 989     }
 990   }
 991 
 992   final public void NullLiteral() throws ParseException {
 993     jj_consume_token(NULL);
 994   }
 995 
 996   final public List Arguments() throws ParseException {
 997  List argList = new ArrayList();
 998     jj_consume_token(LPAREN);
 999     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1000     case FALSE:
1001     case NEW:
1002     case NULL:
1003     case SUPER:
1004     case THIS:
1005     case TRUE:
1006     case INTEGER_LITERAL:
1007     case FLOATING_POINT_LITERAL:
1008     case CHARACTER_LITERAL:
1009     case STRING_LITERAL:
1010     case IDENTIFIER:
1011     case LPAREN:
1012     case BANG:
1013     case TILDE:
1014     case INCR:
1015     case DECR:
1016     case PLUS:
1017     case MINUS:
1018       ArgumentList(argList);
1019       break;
1020     default:
1021       jj_la1[40] = jj_gen;
1022       ;
1023     }
1024     jj_consume_token(RPAREN);
1025     {if (true) return argList;}
1026     throw new Error("Missing return statement in function");
1027   }
1028 
1029   final public void ArgumentList(List argList) throws ParseException {
1030     Expression();
1031                 argList.add(pop().interiorGetValue());
1032     label_17:
1033     while (true) {
1034       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1035       case COMMA:
1036         ;
1037         break;
1038       default:
1039         jj_la1[41] = jj_gen;
1040         break label_17;
1041       }
1042       jj_consume_token(COMMA);
1043       Expression();
1044                       argList.add(pop().interiorGetValue());
1045     }
1046   }
1047 
1048   final public void AllocationExpression() throws ParseException {
1049  List argList; String className;
1050     if (jj_2_7(2)) {
1051       jj_consume_token(NEW);
1052       PrimitiveType();
1053       ArrayDimensions();
1054     } else {
1055       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1056       case NEW:
1057         jj_consume_token(NEW);
1058         className = Name();
1059         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1060         case LPAREN:
1061           argList = Arguments();
1062                           push(LValue.makeNewObject(vm, frameGetter, className, argList));
1063           break;
1064         case LBRACKET:
1065           ArrayDimensions();
1066                           {if (true) throw new ParseException("operation not yet supported");}
1067           break;
1068         default:
1069           jj_la1[42] = jj_gen;
1070           jj_consume_token(-1);
1071           throw new ParseException();
1072         }
1073         break;
1074       default:
1075         jj_la1[43] = jj_gen;
1076         jj_consume_token(-1);
1077         throw new ParseException();
1078       }
1079     }
1080   }
1081 
1082 /*
1083  * The second LOOKAHEAD specification below is to parse to PrimarySuffix
1084  * if there is an expression between the "[...]".
1085  */
1086   final public void ArrayDimensions() throws ParseException {
1087     label_18:
1088     while (true) {
1089       jj_consume_token(LBRACKET);
1090       Expression();
1091       jj_consume_token(RBRACKET);
1092       if (jj_2_8(2)) {
1093         ;
1094       } else {
1095         break label_18;
1096       }
1097     }
1098     label_19:
1099     while (true) {
1100       if (jj_2_9(2)) {
1101         ;
1102       } else {
1103         break label_19;
1104       }
1105       jj_consume_token(LBRACKET);
1106       jj_consume_token(RBRACKET);
1107     }
1108   }
1109 
1110   private boolean jj_2_1(int xla) {
1111     jj_la = xla; jj_lastpos = jj_scanpos = token;
1112     try { return !jj_3_1(); }
1113     catch(LookaheadSuccess ls) { return true; }
1114     finally { jj_save(0, xla); }
1115   }
1116 
1117   private boolean jj_2_2(int xla) {
1118     jj_la = xla; jj_lastpos = jj_scanpos = token;
1119     try { return !jj_3_2(); }
1120     catch(LookaheadSuccess ls) { return true; }
1121     finally { jj_save(1, xla); }
1122   }
1123 
1124   private boolean jj_2_3(int xla) {
1125     jj_la = xla; jj_lastpos = jj_scanpos = token;
1126     try { return !jj_3_3(); }
1127     catch(LookaheadSuccess ls) { return true; }
1128     finally { jj_save(2, xla); }
1129   }
1130 
1131   private boolean jj_2_4(int xla) {
1132     jj_la = xla; jj_lastpos = jj_scanpos = token;
1133     try { return !jj_3_4(); }
1134     catch(LookaheadSuccess ls) { return true; }
1135     finally { jj_save(3, xla); }
1136   }
1137 
1138   private boolean jj_2_5(int xla) {
1139     jj_la = xla; jj_lastpos = jj_scanpos = token;
1140     try { return !jj_3_5(); }
1141     catch(LookaheadSuccess ls) { return true; }
1142     finally { jj_save(4, xla); }
1143   }
1144 
1145   private boolean jj_2_6(int xla) {
1146     jj_la = xla; jj_lastpos = jj_scanpos = token;
1147     try { return !jj_3_6(); }
1148     catch(LookaheadSuccess ls) { return true; }
1149     finally { jj_save(5, xla); }
1150   }
1151 
1152   private boolean jj_2_7(int xla) {
1153     jj_la = xla; jj_lastpos = jj_scanpos = token;
1154     try { return !jj_3_7(); }
1155     catch(LookaheadSuccess ls) { return true; }
1156     finally { jj_save(6, xla); }
1157   }
1158 
1159   private boolean jj_2_8(int xla) {
1160     jj_la = xla; jj_lastpos = jj_scanpos = token;
1161     try { return !jj_3_8(); }
1162     catch(LookaheadSuccess ls) { return true; }
1163     finally { jj_save(7, xla); }
1164   }
1165 
1166   private boolean jj_2_9(int xla) {
1167     jj_la = xla; jj_lastpos = jj_scanpos = token;
1168     try { return !jj_3_9(); }
1169     catch(LookaheadSuccess ls) { return true; }
1170     finally { jj_save(8, xla); }
1171   }
1172 
1173   private boolean jj_3R_94() {
1174     if (jj_scan_token(DECR)) return true;
1175     if (jj_3R_20()) return true;
1176     return false;
1177   }
1178 
1179   private boolean jj_3R_86() {
1180     if (jj_3R_24()) return true;
1181     return false;
1182   }
1183 
1184   private boolean jj_3R_93() {
1185     if (jj_scan_token(INCR)) return true;
1186     if (jj_3R_20()) return true;
1187     return false;
1188   }
1189 
1190   private boolean jj_3R_91() {
1191     if (jj_3R_95()) return true;
1192     return false;
1193   }
1194 
1195   private boolean jj_3R_23() {
1196     Token xsp;
1197     xsp = jj_scanpos;
1198     if (jj_scan_token(10)) {
1199     jj_scanpos = xsp;
1200     if (jj_scan_token(15)) {
1201     jj_scanpos = xsp;
1202     if (jj_scan_token(12)) {
1203     jj_scanpos = xsp;
1204     if (jj_scan_token(45)) {
1205     jj_scanpos = xsp;
1206     if (jj_scan_token(34)) {
1207     jj_scanpos = xsp;
1208     if (jj_scan_token(36)) {
1209     jj_scanpos = xsp;
1210     if (jj_scan_token(27)) {
1211     jj_scanpos = xsp;
1212     if (jj_scan_token(21)) return true;
1213     }
1214     }
1215     }
1216     }
1217     }
1218     }
1219     }
1220     return false;
1221   }
1222 
1223   private boolean jj_3R_90() {
1224     if (jj_3R_94()) return true;
1225     return false;
1226   }
1227 
1228   private boolean jj_3R_89() {
1229     if (jj_3R_93()) return true;
1230     return false;
1231   }
1232 
1233   private boolean jj_3R_85() {
1234     if (jj_3R_23()) return true;
1235     return false;
1236   }
1237 
1238   private boolean jj_3R_60() {
1239     if (jj_3R_58()) return true;
1240     return false;
1241   }
1242 
1243   private boolean jj_3R_88() {
1244     Token xsp;
1245     xsp = jj_scanpos;
1246     if (jj_scan_token(94)) {
1247     jj_scanpos = xsp;
1248     if (jj_scan_token(95)) return true;
1249     }
1250     if (jj_3R_83()) return true;
1251     return false;
1252   }
1253 
1254   private boolean jj_3R_83() {
1255     Token xsp;
1256     xsp = jj_scanpos;
1257     if (jj_3R_88()) {
1258     jj_scanpos = xsp;
1259     if (jj_3R_89()) {
1260     jj_scanpos = xsp;
1261     if (jj_3R_90()) {
1262     jj_scanpos = xsp;
1263     if (jj_3R_91()) return true;
1264     }
1265     }
1266     }
1267     return false;
1268   }
1269 
1270   private boolean jj_3R_82() {
1271     Token xsp;
1272     xsp = jj_scanpos;
1273     if (jj_3R_85()) {
1274     jj_scanpos = xsp;
1275     if (jj_3R_86()) return true;
1276     }
1277     while (true) {
1278       xsp = jj_scanpos;
1279       if (jj_3R_87()) { jj_scanpos = xsp; break; }
1280     }
1281     return false;
1282   }
1283 
1284   private boolean jj_3R_59() {
1285     if (jj_3R_55()) return true;
1286     return false;
1287   }
1288 
1289   private boolean jj_3R_96() {
1290     Token xsp;
1291     xsp = jj_scanpos;
1292     if (jj_scan_token(96)) {
1293     jj_scanpos = xsp;
1294     if (jj_scan_token(97)) {
1295     jj_scanpos = xsp;
1296     if (jj_scan_token(101)) return true;
1297     }
1298     }
1299     if (jj_3R_83()) return true;
1300     return false;
1301   }
1302 
1303   private boolean jj_3R_80() {
1304     if (jj_3R_83()) return true;
1305     Token xsp;
1306     while (true) {
1307       xsp = jj_scanpos;
1308       if (jj_3R_96()) { jj_scanpos = xsp; break; }
1309     }
1310     return false;
1311   }
1312 
1313   private boolean jj_3R_92() {
1314     Token xsp;
1315     xsp = jj_scanpos;
1316     if (jj_scan_token(94)) {
1317     jj_scanpos = xsp;
1318     if (jj_scan_token(95)) return true;
1319     }
1320     if (jj_3R_80()) return true;
1321     return false;
1322   }
1323 
1324   private boolean jj_3_8() {
1325     if (jj_scan_token(LBRACKET)) return true;
1326     if (jj_3R_25()) return true;
1327     if (jj_scan_token(RBRACKET)) return true;
1328     return false;
1329   }
1330 
1331   private boolean jj_3R_58() {
1332     Token xsp;
1333     if (jj_3_8()) return true;
1334     while (true) {
1335       xsp = jj_scanpos;
1336       if (jj_3_8()) { jj_scanpos = xsp; break; }
1337     }
1338     while (true) {
1339       xsp = jj_scanpos;
1340       if (jj_3_9()) { jj_scanpos = xsp; break; }
1341     }
1342     return false;
1343   }
1344 
1345   private boolean jj_3R_84() {
1346     Token xsp;
1347     xsp = jj_scanpos;
1348     if (jj_scan_token(102)) {
1349     jj_scanpos = xsp;
1350     if (jj_scan_token(103)) {
1351     jj_scanpos = xsp;
1352     if (jj_scan_token(104)) return true;
1353     }
1354     }
1355     if (jj_3R_78()) return true;
1356     return false;
1357   }
1358 
1359   private boolean jj_3R_78() {
1360     if (jj_3R_80()) return true;
1361     Token xsp;
1362     while (true) {
1363       xsp = jj_scanpos;
1364       if (jj_3R_92()) { jj_scanpos = xsp; break; }
1365     }
1366     return false;
1367   }
1368 
1369   private boolean jj_3R_54() {
1370     if (jj_scan_token(NEW)) return true;
1371     if (jj_3R_24()) return true;
1372     Token xsp;
1373     xsp = jj_scanpos;
1374     if (jj_3R_59()) {
1375     jj_scanpos = xsp;
1376     if (jj_3R_60()) return true;
1377     }
1378     return false;
1379   }
1380 
1381   private boolean jj_3R_76() {
1382     if (jj_3R_78()) return true;
1383     Token xsp;
1384     while (true) {
1385       xsp = jj_scanpos;
1386       if (jj_3R_84()) { jj_scanpos = xsp; break; }
1387     }
1388     return false;
1389   }
1390 
1391   private boolean jj_3R_81() {
1392     Token xsp;
1393     xsp = jj_scanpos;
1394     if (jj_scan_token(81)) {
1395     jj_scanpos = xsp;
1396     if (jj_scan_token(80)) {
1397     jj_scanpos = xsp;
1398     if (jj_scan_token(87)) {
1399     jj_scanpos = xsp;
1400     if (jj_scan_token(88)) return true;
1401     }
1402     }
1403     }
1404     if (jj_3R_76()) return true;
1405     return false;
1406   }
1407 
1408   private boolean jj_3R_43() {
1409     Token xsp;
1410     xsp = jj_scanpos;
1411     if (jj_3_7()) {
1412     jj_scanpos = xsp;
1413     if (jj_3R_54()) return true;
1414     }
1415     return false;
1416   }
1417 
1418   private boolean jj_3_7() {
1419     if (jj_scan_token(NEW)) return true;
1420     if (jj_3R_23()) return true;
1421     if (jj_3R_58()) return true;
1422     return false;
1423   }
1424 
1425   private boolean jj_3R_67() {
1426     if (jj_scan_token(COMMA)) return true;
1427     if (jj_3R_25()) return true;
1428     return false;
1429   }
1430 
1431   private boolean jj_3R_64() {
1432     if (jj_3R_25()) return true;
1433     Token xsp;
1434     while (true) {
1435       xsp = jj_scanpos;
1436       if (jj_3R_67()) { jj_scanpos = xsp; break; }
1437     }
1438     return false;
1439   }
1440 
1441   private boolean jj_3R_61() {
1442     if (jj_3R_64()) return true;
1443     return false;
1444   }
1445 
1446   private boolean jj_3R_79() {
1447     if (jj_scan_token(INSTANCEOF)) return true;
1448     if (jj_3R_82()) return true;
1449     return false;
1450   }
1451 
1452   private boolean jj_3R_74() {
1453     if (jj_3R_76()) return true;
1454     Token xsp;
1455     while (true) {
1456       xsp = jj_scanpos;
1457       if (jj_3R_81()) { jj_scanpos = xsp; break; }
1458     }
1459     return false;
1460   }
1461 
1462   private boolean jj_3R_55() {
1463     if (jj_scan_token(LPAREN)) return true;
1464     Token xsp;
1465     xsp = jj_scanpos;
1466     if (jj_3R_61()) jj_scanpos = xsp;
1467     if (jj_scan_token(RPAREN)) return true;
1468     return false;
1469   }
1470 
1471   private boolean jj_3R_72() {
1472     if (jj_3R_74()) return true;
1473     Token xsp;
1474     xsp = jj_scanpos;
1475     if (jj_3R_79()) jj_scanpos = xsp;
1476     return false;
1477   }
1478 
1479   private boolean jj_3R_77() {
1480     Token xsp;
1481     xsp = jj_scanpos;
1482     if (jj_scan_token(86)) {
1483     jj_scanpos = xsp;
1484     if (jj_scan_token(89)) return true;
1485     }
1486     if (jj_3R_72()) return true;
1487     return false;
1488   }
1489 
1490   private boolean jj_3R_75() {
1491     if (jj_scan_token(BIT_AND)) return true;
1492     if (jj_3R_70()) return true;
1493     return false;
1494   }
1495 
1496   private boolean jj_3R_70() {
1497     if (jj_3R_72()) return true;
1498     Token xsp;
1499     while (true) {
1500       xsp = jj_scanpos;
1501       if (jj_3R_77()) { jj_scanpos = xsp; break; }
1502     }
1503     return false;
1504   }
1505 
1506   private boolean jj_3R_57() {
1507     Token xsp;
1508     xsp = jj_scanpos;
1509     if (jj_scan_token(54)) {
1510     jj_scanpos = xsp;
1511     if (jj_scan_token(24)) return true;
1512     }
1513     return false;
1514   }
1515 
1516   private boolean jj_3R_53() {
1517     if (jj_scan_token(39)) return true;
1518     return false;
1519   }
1520 
1521   private boolean jj_3R_39() {
1522     if (jj_3R_42()) return true;
1523     return false;
1524   }
1525 
1526   private boolean jj_3R_68() {
1527     if (jj_3R_70()) return true;
1528     Token xsp;
1529     while (true) {
1530       xsp = jj_scanpos;
1531       if (jj_3R_75()) { jj_scanpos = xsp; break; }
1532     }
1533     return false;
1534   }
1535 
1536   private boolean jj_3R_73() {
1537     if (jj_scan_token(XOR)) return true;
1538     if (jj_3R_68()) return true;
1539     return false;
1540   }
1541 
1542   private boolean jj_3R_52() {
1543     if (jj_3R_57()) return true;
1544     return false;
1545   }
1546 
1547   private boolean jj_3R_51() {
1548     if (jj_scan_token(STRING_LITERAL)) return true;
1549     return false;
1550   }
1551 
1552   private boolean jj_3R_50() {
1553     if (jj_scan_token(CHARACTER_LITERAL)) return true;
1554     return false;
1555   }
1556 
1557   private boolean jj_3R_65() {
1558     if (jj_3R_68()) return true;
1559     Token xsp;
1560     while (true) {
1561       xsp = jj_scanpos;
1562       if (jj_3R_73()) { jj_scanpos = xsp; break; }
1563     }
1564     return false;
1565   }
1566 
1567   private boolean jj_3R_71() {
1568     if (jj_scan_token(BIT_OR)) return true;
1569     if (jj_3R_65()) return true;
1570     return false;
1571   }
1572 
1573   private boolean jj_3R_49() {
1574     if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
1575     return false;
1576   }
1577 
1578   private boolean jj_3R_42() {
1579     Token xsp;
1580     xsp = jj_scanpos;
1581     if (jj_3R_48()) {
1582     jj_scanpos = xsp;
1583     if (jj_3R_49()) {
1584     jj_scanpos = xsp;
1585     if (jj_3R_50()) {
1586     jj_scanpos = xsp;
1587     if (jj_3R_51()) {
1588     jj_scanpos = xsp;
1589     if (jj_3R_52()) {
1590     jj_scanpos = xsp;
1591     if (jj_3R_53()) return true;
1592     }
1593     }
1594     }
1595     }
1596     }
1597     return false;
1598   }
1599 
1600   private boolean jj_3R_48() {
1601     if (jj_scan_token(INTEGER_LITERAL)) return true;
1602     return false;
1603   }
1604 
1605   private boolean jj_3R_62() {
1606     if (jj_3R_65()) return true;
1607     Token xsp;
1608     while (true) {
1609       xsp = jj_scanpos;
1610       if (jj_3R_71()) { jj_scanpos = xsp; break; }
1611     }
1612     return false;
1613   }
1614 
1615   private boolean jj_3R_69() {
1616     if (jj_scan_token(SC_AND)) return true;
1617     if (jj_3R_62()) return true;
1618     return false;
1619   }
1620 
1621   private boolean jj_3R_46() {
1622     if (jj_3R_55()) return true;
1623     return false;
1624   }
1625 
1626   private boolean jj_3R_45() {
1627     if (jj_scan_token(DOT)) return true;
1628     if (jj_scan_token(IDENTIFIER)) return true;
1629     return false;
1630   }
1631 
1632   private boolean jj_3R_56() {
1633     if (jj_3R_62()) return true;
1634     Token xsp;
1635     while (true) {
1636       xsp = jj_scanpos;
1637       if (jj_3R_69()) { jj_scanpos = xsp; break; }
1638     }
1639     return false;
1640   }
1641 
1642   private boolean jj_3R_66() {
1643     if (jj_scan_token(SC_OR)) return true;
1644     if (jj_3R_56()) return true;
1645     return false;
1646   }
1647 
1648   private boolean jj_3R_44() {
1649     if (jj_scan_token(LBRACKET)) return true;
1650     if (jj_3R_25()) return true;
1651     if (jj_scan_token(RBRACKET)) return true;
1652     return false;
1653   }
1654 
1655   private boolean jj_3R_38() {
1656     Token xsp;
1657     xsp = jj_scanpos;
1658     if (jj_3R_44()) {
1659     jj_scanpos = xsp;
1660     if (jj_3R_45()) {
1661     jj_scanpos = xsp;
1662     if (jj_3R_46()) return true;
1663     }
1664     }
1665     return false;
1666   }
1667 
1668   private boolean jj_3R_37() {
1669     if (jj_3R_43()) return true;
1670     return false;
1671   }
1672 
1673   private boolean jj_3R_27() {
1674     if (jj_3R_38()) return true;
1675     return false;
1676   }
1677 
1678   private boolean jj_3R_36() {
1679     if (jj_scan_token(LPAREN)) return true;
1680     if (jj_3R_25()) return true;
1681     if (jj_scan_token(RPAREN)) return true;
1682     return false;
1683   }
1684 
1685   private boolean jj_3R_47() {
1686     if (jj_3R_56()) return true;
1687     Token xsp;
1688     while (true) {
1689       xsp = jj_scanpos;
1690       if (jj_3R_66()) { jj_scanpos = xsp; break; }
1691     }
1692     return false;
1693   }
1694 
1695   private boolean jj_3R_104() {
1696     if (jj_scan_token(LBRACKET)) return true;
1697     if (jj_scan_token(RBRACKET)) return true;
1698     return false;
1699   }
1700 
1701   private boolean jj_3R_35() {
1702     if (jj_scan_token(SUPER)) return true;
1703     if (jj_scan_token(DOT)) return true;
1704     if (jj_scan_token(IDENTIFIER)) return true;
1705     return false;
1706   }
1707 
1708   private boolean jj_3R_34() {
1709     if (jj_scan_token(THIS)) return true;
1710     return false;
1711   }
1712 
1713   private boolean jj_3R_63() {
1714     if (jj_scan_token(HOOK)) return true;
1715     if (jj_3R_25()) return true;
1716     if (jj_scan_token(COLON)) return true;
1717     if (jj_3R_41()) return true;
1718     return false;
1719   }
1720 
1721   private boolean jj_3R_33() {
1722     if (jj_3R_24()) return true;
1723     return false;
1724   }
1725 
1726   private boolean jj_3R_105() {
1727     if (jj_scan_token(LBRACKET)) return true;
1728     if (jj_scan_token(RBRACKET)) return true;
1729     return false;
1730   }
1731 
1732   private boolean jj_3R_32() {
1733     if (jj_3R_42()) return true;
1734     return false;
1735   }
1736 
1737   private boolean jj_3R_26() {
1738     Token xsp;
1739     xsp = jj_scanpos;
1740     if (jj_3R_32()) {
1741     jj_scanpos = xsp;
1742     if (jj_3R_33()) {
1743     jj_scanpos = xsp;
1744     if (jj_3R_34()) {
1745     jj_scanpos = xsp;
1746     if (jj_3R_35()) {
1747     jj_scanpos = xsp;
1748     if (jj_3R_36()) {
1749     jj_scanpos = xsp;
1750     if (jj_3R_37()) return true;
1751     }
1752     }
1753     }
1754     }
1755     }
1756     return false;
1757   }
1758 
1759   private boolean jj_3R_20() {
1760     if (jj_3R_26()) return true;
1761     Token xsp;
1762     while (true) {
1763       xsp = jj_scanpos;
1764       if (jj_3R_27()) { jj_scanpos = xsp; break; }
1765     }
1766     return false;
1767   }
1768 
1769   private boolean jj_3R_41() {
1770     if (jj_3R_47()) return true;
1771     Token xsp;
1772     xsp = jj_scanpos;
1773     if (jj_3R_63()) jj_scanpos = xsp;
1774     return false;
1775   }
1776 
1777   private boolean jj_3R_106() {
1778     if (jj_scan_token(DECR)) return true;
1779     return false;
1780   }
1781 
1782   private boolean jj_3R_102() {
1783     if (jj_scan_token(LPAREN)) return true;
1784     if (jj_3R_24()) return true;
1785     Token xsp;
1786     while (true) {
1787       xsp = jj_scanpos;
1788       if (jj_3R_105()) { jj_scanpos = xsp; break; }
1789     }
1790     if (jj_scan_token(RPAREN)) return true;
1791     if (jj_3R_95()) return true;
1792     return false;
1793   }
1794 
1795   private boolean jj_3R_21() {
1796     Token xsp;
1797     xsp = jj_scanpos;
1798     if (jj_scan_token(79)) {
1799     jj_scanpos = xsp;
1800     if (jj_scan_token(107)) {
1801     jj_scanpos = xsp;
1802     if (jj_scan_token(108)) {
1803     jj_scanpos = xsp;
1804     if (jj_scan_token(112)) {
1805     jj_scanpos = xsp;
1806     if (jj_scan_token(105)) {
1807     jj_scanpos = xsp;
1808     if (jj_scan_token(106)) {
1809     jj_scanpos = xsp;
1810     if (jj_scan_token(113)) {
1811     jj_scanpos = xsp;
1812     if (jj_scan_token(114)) {
1813     jj_scanpos = xsp;
1814     if (jj_scan_token(115)) {
1815     jj_scanpos = xsp;
1816     if (jj_scan_token(109)) {
1817     jj_scanpos = xsp;
1818     if (jj_scan_token(111)) {
1819     jj_scanpos = xsp;
1820     if (jj_scan_token(110)) return true;
1821     }
1822     }
1823     }
1824     }
1825     }
1826     }
1827     }
1828     }
1829     }
1830     }
1831     }
1832     return false;
1833   }
1834 
1835   private boolean jj_3R_103() {
1836     Token xsp;
1837     xsp = jj_scanpos;
1838     if (jj_scan_token(92)) {
1839     jj_scanpos = xsp;
1840     if (jj_3R_106()) return true;
1841     }
1842     return false;
1843   }
1844 
1845   private boolean jj_3R_100() {
1846     Token xsp;
1847     xsp = jj_scanpos;
1848     if (jj_3_6()) {
1849     jj_scanpos = xsp;
1850     if (jj_3R_102()) return true;
1851     }
1852     return false;
1853   }
1854 
1855   private boolean jj_3_6() {
1856     if (jj_scan_token(LPAREN)) return true;
1857     if (jj_3R_23()) return true;
1858     Token xsp;
1859     while (true) {
1860       xsp = jj_scanpos;
1861       if (jj_3R_104()) { jj_scanpos = xsp; break; }
1862     }
1863     if (jj_scan_token(RPAREN)) return true;
1864     if (jj_3R_83()) return true;
1865     return false;
1866   }
1867 
1868   private boolean jj_3_2() {
1869     if (jj_3R_20()) return true;
1870     if (jj_3R_21()) return true;
1871     return false;
1872   }
1873 
1874   private boolean jj_3R_40() {
1875     if (jj_3R_20()) return true;
1876     if (jj_3R_21()) return true;
1877     if (jj_3R_25()) return true;
1878     return false;
1879   }
1880 
1881   private boolean jj_3_5() {
1882     if (jj_scan_token(LPAREN)) return true;
1883     if (jj_3R_24()) return true;
1884     if (jj_scan_token(LBRACKET)) return true;
1885     return false;
1886   }
1887 
1888   private boolean jj_3R_101() {
1889     if (jj_3R_20()) return true;
1890     Token xsp;
1891     xsp = jj_scanpos;
1892     if (jj_3R_103()) jj_scanpos = xsp;
1893     return false;
1894   }
1895 
1896   private boolean jj_3R_31() {
1897     if (jj_3R_41()) return true;
1898     return false;
1899   }
1900 
1901   private boolean jj_3R_30() {
1902     if (jj_3R_40()) return true;
1903     return false;
1904   }
1905 
1906   private boolean jj_3R_25() {
1907     Token xsp;
1908     xsp = jj_scanpos;
1909     if (jj_3R_30()) {
1910     jj_scanpos = xsp;
1911     if (jj_3R_31()) return true;
1912     }
1913     return false;
1914   }
1915 
1916   private boolean jj_3R_29() {
1917     if (jj_scan_token(LPAREN)) return true;
1918     if (jj_3R_24()) return true;
1919     if (jj_scan_token(RPAREN)) return true;
1920     Token xsp;
1921     xsp = jj_scanpos;
1922     if (jj_scan_token(83)) {
1923     jj_scanpos = xsp;
1924     if (jj_scan_token(82)) {
1925     jj_scanpos = xsp;
1926     if (jj_scan_token(70)) {
1927     jj_scanpos = xsp;
1928     if (jj_scan_token(67)) {
1929     jj_scanpos = xsp;
1930     if (jj_scan_token(50)) {
1931     jj_scanpos = xsp;
1932     if (jj_scan_token(47)) {
1933     jj_scanpos = xsp;
1934     if (jj_scan_token(38)) {
1935     jj_scanpos = xsp;
1936     if (jj_3R_39()) return true;
1937     }
1938     }
1939     }
1940     }
1941     }
1942     }
1943     }
1944     return false;
1945   }
1946 
1947   private boolean jj_3R_28() {
1948     if (jj_scan_token(LPAREN)) return true;
1949     if (jj_3R_24()) return true;
1950     if (jj_scan_token(LBRACKET)) return true;
1951     if (jj_scan_token(RBRACKET)) return true;
1952     return false;
1953   }
1954 
1955   private boolean jj_3_4() {
1956     if (jj_scan_token(LPAREN)) return true;
1957     if (jj_3R_23()) return true;
1958     return false;
1959   }
1960 
1961   private boolean jj_3R_22() {
1962     Token xsp;
1963     xsp = jj_scanpos;
1964     if (jj_3_4()) {
1965     jj_scanpos = xsp;
1966     if (jj_3R_28()) {
1967     jj_scanpos = xsp;
1968     if (jj_3R_29()) return true;
1969     }
1970     }
1971     return false;
1972   }
1973 
1974   private boolean jj_3_3() {
1975     if (jj_3R_22()) return true;
1976     return false;
1977   }
1978 
1979   private boolean jj_3R_99() {
1980     if (jj_3R_101()) return true;
1981     return false;
1982   }
1983 
1984   private boolean jj_3R_87() {
1985     if (jj_scan_token(LBRACKET)) return true;
1986     if (jj_scan_token(RBRACKET)) return true;
1987     return false;
1988   }
1989 
1990   private boolean jj_3R_98() {
1991     if (jj_3R_100()) return true;
1992     return false;
1993   }
1994 
1995   private boolean jj_3_1() {
1996     if (jj_scan_token(DOT)) return true;
1997     if (jj_scan_token(IDENTIFIER)) return true;
1998     return false;
1999   }
2000 
2001   private boolean jj_3_9() {
2002     if (jj_scan_token(LBRACKET)) return true;
2003     if (jj_scan_token(RBRACKET)) return true;
2004     return false;
2005   }
2006 
2007   private boolean jj_3R_97() {
2008     Token xsp;
2009     xsp = jj_scanpos;
2010     if (jj_scan_token(83)) {
2011     jj_scanpos = xsp;
2012     if (jj_scan_token(82)) return true;
2013     }
2014     if (jj_3R_83()) return true;
2015     return false;
2016   }
2017 
2018   private boolean jj_3R_95() {
2019     Token xsp;
2020     xsp = jj_scanpos;
2021     if (jj_3R_97()) {
2022     jj_scanpos = xsp;
2023     if (jj_3R_98()) {
2024     jj_scanpos = xsp;
2025     if (jj_3R_99()) return true;
2026     }
2027     }
2028     return false;
2029   }
2030 
2031   private boolean jj_3R_24() {
2032     if (jj_scan_token(IDENTIFIER)) return true;
2033     Token xsp;
2034     while (true) {
2035       xsp = jj_scanpos;
2036       if (jj_3_1()) { jj_scanpos = xsp; break; }
2037     }
2038     return false;
2039   }
2040 
2041   /** Generated Token Manager. */
2042   public ExpressionParserTokenManager token_source;
2043   JavaCharStream jj_input_stream;
2044   /** Current token. */
2045   public Token token;
2046   /** Next token. */
2047   public Token jj_nt;
2048   private int jj_ntk;
2049   private Token jj_scanpos, jj_lastpos;
2050   private int jj_la;
2051   private int jj_gen;
2052   final private int[] jj_la1 = new int[44];
2053   static private int[] jj_la1_0;
2054   static private int[] jj_la1_1;
2055   static private int[] jj_la1_2;
2056   static private int[] jj_la1_3;
2057   static {
2058       jj_la1_init_0();
2059       jj_la1_init_1();
2060       jj_la1_init_2();
2061       jj_la1_init_3();
2062    }
2063    private static void jj_la1_init_0() {
2064       jj_la1_0 = new int[] {0x8209400,0x0,0x8209400,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x1000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x1000000,0x1000000,0x1000000,0x0,0x0,0x0,};
2065    }
2066    private static void jj_la1_init_1() {
2067       jj_la1_1 = new int[] {0x2014,0x0,0x2014,0x0,0x884480c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x884480c0,0x0,0x0,0x884480c0,0x884480c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x884480c0,0x0,0x88400080,0x400000,0x884480c0,0x0,0x0,0x40,};
2068    }
2069    private static void jj_la1_init_2() {
2070       jj_la1_2 = new int[] {0x8,0x400,0x0,0x2000,0xf00c004e,0x8000,0x100000,0x4000000,0x8000000,0x0,0x0,0x0,0x2400000,0x2400000,0x0,0x1830000,0x1830000,0x0,0x0,0xc0000000,0xc0000000,0x0,0x0,0xc0000000,0xf00c004e,0xc0000,0xc0000,0x4e,0xc004e,0x40,0x30000000,0x30000000,0x400,0x400,0x40,0x4440,0x4e,0x4440,0x6,0x0,0xf00c004e,0x2000,0x440,0x0,};
2071    }
2072    private static void jj_la1_init_3() {
2073       jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0xffe00,0x0,0x0,0x0,0x8,0x10,0x4,0x0,0x0,0x0,0x0,0x0,0x1c0,0x1c0,0x0,0x0,0x23,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
2074    }
2075   final private JJCalls[] jj_2_rtns = new JJCalls[9];
2076   private boolean jj_rescan = false;
2077   private int jj_gc = 0;
2078 
2079   /** Constructor with InputStream. */
2080   public ExpressionParser(java.io.InputStream stream) {
2081      this(stream, null);
2082   }
2083   /** Constructor with InputStream and supplied encoding */
2084   public ExpressionParser(java.io.InputStream stream, String encoding) {
2085     try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
2086     token_source = new ExpressionParserTokenManager(jj_input_stream);
2087     token = new Token();
2088     jj_ntk = -1;
2089     jj_gen = 0;
2090     for (int i = 0; i < 44; i++) jj_la1[i] = -1;
2091     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2092   }
2093 
2094   /** Reinitialise. */
2095   public void ReInit(java.io.InputStream stream) {
2096      ReInit(stream, null);
2097   }
2098   /** Reinitialise. */
2099   public void ReInit(java.io.InputStream stream, String encoding) {
2100     try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
2101     token_source.ReInit(jj_input_stream);
2102     token = new Token();
2103     jj_ntk = -1;
2104     jj_gen = 0;
2105     for (int i = 0; i < 44; i++) jj_la1[i] = -1;
2106     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2107   }
2108 
2109   /** Constructor. */
2110   public ExpressionParser(java.io.Reader stream) {
2111     jj_input_stream = new JavaCharStream(stream, 1, 1);
2112     token_source = new ExpressionParserTokenManager(jj_input_stream);
2113     token = new Token();
2114     jj_ntk = -1;
2115     jj_gen = 0;
2116     for (int i = 0; i < 44; i++) jj_la1[i] = -1;
2117     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2118   }
2119 
2120   /** Reinitialise. */
2121   public void ReInit(java.io.Reader stream) {
2122     jj_input_stream.ReInit(stream, 1, 1);
2123     token_source.ReInit(jj_input_stream);
2124     token = new Token();
2125     jj_ntk = -1;
2126     jj_gen = 0;
2127     for (int i = 0; i < 44; i++) jj_la1[i] = -1;
2128     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2129   }
2130 
2131   /** Constructor with generated Token Manager. */
2132   public ExpressionParser(ExpressionParserTokenManager tm) {
2133     token_source = tm;
2134     token = new Token();
2135     jj_ntk = -1;
2136     jj_gen = 0;
2137     for (int i = 0; i < 44; i++) jj_la1[i] = -1;
2138     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2139   }
2140 
2141   /** Reinitialise. */
2142   public void ReInit(ExpressionParserTokenManager tm) {
2143     token_source = tm;
2144     token = new Token();
2145     jj_ntk = -1;
2146     jj_gen = 0;
2147     for (int i = 0; i < 44; i++) jj_la1[i] = -1;
2148     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
2149   }
2150 
2151   private Token jj_consume_token(int kind) throws ParseException {
2152     Token oldToken;
2153     if ((oldToken = token).next != null) token = token.next;
2154     else token = token.next = token_source.getNextToken();
2155     jj_ntk = -1;
2156     if (token.kind == kind) {
2157       jj_gen++;
2158       if (++jj_gc > 100) {
2159         jj_gc = 0;
2160         for (int i = 0; i < jj_2_rtns.length; i++) {
2161           JJCalls c = jj_2_rtns[i];
2162           while (c != null) {
2163             if (c.gen < jj_gen) c.first = null;
2164             c = c.next;
2165           }
2166         }
2167       }
2168       return token;
2169     }
2170     token = oldToken;
2171     jj_kind = kind;
2172     throw generateParseException();
2173   }
2174 
2175   @SuppressWarnings("serial") // JDK implementation class
2176   static private final class LookaheadSuccess extends java.lang.Error { }
2177   final private LookaheadSuccess jj_ls = new LookaheadSuccess();
2178   private boolean jj_scan_token(int kind) {
2179     if (jj_scanpos == jj_lastpos) {
2180       jj_la--;
2181       if (jj_scanpos.next == null) {
2182         jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
2183       } else {
2184         jj_lastpos = jj_scanpos = jj_scanpos.next;
2185       }
2186     } else {
2187       jj_scanpos = jj_scanpos.next;
2188     }
2189     if (jj_rescan) {
2190       int i = 0; Token tok = token;
2191       while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
2192       if (tok != null) jj_add_error_token(kind, i);
2193     }
2194     if (jj_scanpos.kind != kind) return true;
2195     if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
2196     return false;
2197   }
2198 
2199 
2200 /** Get the next Token. */
2201   final public Token getNextToken() {
2202     if (token.next != null) token = token.next;
2203     else token = token.next = token_source.getNextToken();
2204     jj_ntk = -1;
2205     jj_gen++;
2206     return token;
2207   }
2208 
2209 /** Get the specific Token. */
2210   final public Token getToken(int index) {
2211     Token t = token;
2212     for (int i = 0; i < index; i++) {
2213       if (t.next != null) t = t.next;
2214       else t = t.next = token_source.getNextToken();
2215     }
2216     return t;
2217   }
2218 
2219   private int jj_ntk() {
2220     if ((jj_nt=token.next) == null)
2221       return (jj_ntk = (token.next=token_source.getNextToken()).kind);
2222     else
2223       return (jj_ntk = jj_nt.kind);
2224   }
2225 
2226   private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
2227   private int[] jj_expentry;
2228   private int jj_kind = -1;
2229   private int[] jj_lasttokens = new int[100];
2230   private int jj_endpos;
2231 
2232   private void jj_add_error_token(int kind, int pos) {
2233     if (pos >= 100) return;
2234     if (pos == jj_endpos + 1) {
2235       jj_lasttokens[jj_endpos++] = kind;
2236     } else if (jj_endpos != 0) {
2237       jj_expentry = new int[jj_endpos];
2238       for (int i = 0; i < jj_endpos; i++) {
2239         jj_expentry[i] = jj_lasttokens[i];
2240       }
2241       jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
2242         int[] oldentry = (int[])(it.next());
2243         if (oldentry.length == jj_expentry.length) {
2244           for (int i = 0; i < jj_expentry.length; i++) {
2245             if (oldentry[i] != jj_expentry[i]) {
2246               continue jj_entries_loop;
2247             }
2248           }
2249           jj_expentries.add(jj_expentry);
2250           break jj_entries_loop;
2251         }
2252       }
2253       if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
2254     }
2255   }
2256 
2257   /** Generate ParseException. */
2258   public ParseException generateParseException() {
2259     jj_expentries.clear();
2260     boolean[] la1tokens = new boolean[116];
2261     if (jj_kind >= 0) {
2262       la1tokens[jj_kind] = true;
2263       jj_kind = -1;
2264     }
2265     for (int i = 0; i < 44; i++) {
2266       if (jj_la1[i] == jj_gen) {
2267         for (int j = 0; j < 32; j++) {
2268           if ((jj_la1_0[i] & (1<<j)) != 0) {
2269             la1tokens[j] = true;
2270           }
2271           if ((jj_la1_1[i] & (1<<j)) != 0) {
2272             la1tokens[32+j] = true;
2273           }
2274           if ((jj_la1_2[i] & (1<<j)) != 0) {
2275             la1tokens[64+j] = true;
2276           }
2277           if ((jj_la1_3[i] & (1<<j)) != 0) {
2278             la1tokens[96+j] = true;
2279           }
2280         }
2281       }
2282     }
2283     for (int i = 0; i < 116; i++) {
2284       if (la1tokens[i]) {
2285         jj_expentry = new int[1];
2286         jj_expentry[0] = i;
2287         jj_expentries.add(jj_expentry);
2288       }
2289     }
2290     jj_endpos = 0;
2291     jj_rescan_token();
2292     jj_add_error_token(0, 0);
2293     int[][] exptokseq = new int[jj_expentries.size()][];
2294     for (int i = 0; i < jj_expentries.size(); i++) {
2295       exptokseq[i] = jj_expentries.get(i);
2296     }
2297     return new ParseException(token, exptokseq, tokenImage);
2298   }
2299 
2300   /** Enable tracing. */
2301   final public void enable_tracing() {
2302   }
2303 
2304   /** Disable tracing. */
2305   final public void disable_tracing() {
2306   }
2307 
2308   private void jj_rescan_token() {
2309     jj_rescan = true;
2310     for (int i = 0; i < 9; i++) {
2311     try {
2312       JJCalls p = jj_2_rtns[i];
2313       do {
2314         if (p.gen > jj_gen) {
2315           jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
2316           switch (i) {
2317             case 0: jj_3_1(); break;
2318             case 1: jj_3_2(); break;
2319             case 2: jj_3_3(); break;
2320             case 3: jj_3_4(); break;
2321             case 4: jj_3_5(); break;
2322             case 5: jj_3_6(); break;
2323             case 6: jj_3_7(); break;
2324             case 7: jj_3_8(); break;
2325             case 8: jj_3_9(); break;
2326           }
2327         }
2328         p = p.next;
2329       } while (p != null);
2330       } catch(LookaheadSuccess ls) { }
2331     }
2332     jj_rescan = false;
2333   }
2334 
2335   private void jj_save(int index, int xla) {
2336     JJCalls p = jj_2_rtns[index];
2337     while (p.gen > jj_gen) {
2338       if (p.next == null) { p = p.next = new JJCalls(); break; }
2339       p = p.next;
2340     }
2341     p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
2342   }
2343 
2344   static final class JJCalls {
2345     int gen;
2346     Token first;
2347     int arg;
2348     JJCalls next;
2349   }
2350 
2351 }