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 }