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