1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 /* Generated By:JJTree&JavaCC: Do not edit this line. MiniParser.java */ 19 package Mini; 20 21 public class MiniParser/*@bgen(jjtree)*/implements MiniParserTreeConstants, MiniParserConstants {/*@bgen(jjtree)*/ 22 protected static JJTMiniParserState jjtree = new JJTMiniParserState();private static Token expr_token; 23 jjtreeOpenNodeScope(Node n)24 final static void jjtreeOpenNodeScope(Node n) {} jjtreeCloseNodeScope(Node n)25 final static void jjtreeCloseNodeScope(Node n) {((SimpleNode)n).closeNode();} 26 27 /* A program consists of a number of function declarations with a 28 * distinguished function `main' that starts the program. 29 */ Program()30 static public void Program() throws ParseException { 31 /*@bgen(jjtree) Program */ 32 ASTProgram jjtn000 = new ASTProgram(JJTPROGRAM); 33 boolean jjtc000 = true; 34 jjtree.openNodeScope(jjtn000); 35 jjtreeOpenNodeScope(jjtn000); 36 try { 37 label_1: 38 while (true) { 39 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 40 case 9: 41 break; 42 default: 43 jj_la1[0] = jj_gen; 44 break label_1; 45 } 46 FunDecl(); 47 } 48 jj_consume_token(0); 49 } catch (Throwable jjte000) { 50 if (jjtc000) { 51 jjtree.clearNodeScope(jjtn000); 52 jjtc000 = false; 53 } else { 54 jjtree.popNode(); 55 } 56 if (jjte000 instanceof ParseException) { 57 {if (true) { 58 throw (ParseException)jjte000; 59 }} 60 } 61 if (jjte000 instanceof RuntimeException) { 62 {if (true) { 63 throw (RuntimeException)jjte000; 64 }} 65 } 66 {if (true) { 67 throw (Error)jjte000; 68 }} 69 } finally { 70 if (jjtc000) { 71 jjtree.closeNodeScope(jjtn000, true); 72 jjtreeCloseNodeScope(jjtn000); 73 } 74 } 75 } 76 77 /* "FUN" Ident() "(" NameList() ")" = Expr() 78 */ FunDecl()79 static public void FunDecl() throws ParseException { 80 /*@bgen(jjtree) FunDecl */ 81 ASTFunDecl jjtn000 = new ASTFunDecl(JJTFUNDECL); 82 boolean jjtc000 = true; 83 jjtree.openNodeScope(jjtn000); 84 jjtreeOpenNodeScope(jjtn000);Token t; 85 try { 86 t = jj_consume_token(9); 87 jjtn000.setPosition(t.beginLine, t.beginColumn); 88 Ident(); 89 jj_consume_token(LPAREN); 90 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 91 case FALSE: 92 case TRUE: 93 case READ: 94 case WRITE: 95 case IDENT: 96 Ident(); 97 label_2: 98 while (true) { 99 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 100 case COMMA: 101 break; 102 default: 103 jj_la1[1] = jj_gen; 104 break label_2; 105 } 106 jj_consume_token(COMMA); 107 Ident(); 108 } 109 break; 110 default: 111 jj_la1[2] = jj_gen; 112 } 113 jj_consume_token(RPAREN); 114 jj_consume_token(ASSIGN); 115 Expr(); 116 } catch (Throwable jjte000) { 117 if (jjtc000) { 118 jjtree.clearNodeScope(jjtn000); 119 jjtc000 = false; 120 } else { 121 jjtree.popNode(); 122 } 123 if (jjte000 instanceof ParseException) { 124 {if (true) { 125 throw (ParseException)jjte000; 126 }} 127 } 128 if (jjte000 instanceof RuntimeException) { 129 {if (true) { 130 throw (RuntimeException)jjte000; 131 }} 132 } 133 {if (true) { 134 throw (Error)jjte000; 135 }} 136 } finally { 137 if (jjtc000) { 138 jjtree.closeNodeScope(jjtn000, true); 139 jjtreeCloseNodeScope(jjtn000); 140 } 141 } 142 } 143 Expr()144 static public void Expr() throws ParseException { 145 /*@bgen(jjtree) Expr */ 146 ASTExpr jjtn000 = new ASTExpr(JJTEXPR); 147 boolean jjtc000 = true; 148 jjtree.openNodeScope(jjtn000); 149 jjtreeOpenNodeScope(jjtn000);int kind=-1; 150 int un_op=-1; 151 try { 152 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 153 case 10: 154 IfExpr(); 155 break; 156 case 14: 157 LetExpr(); 158 break; 159 case FALSE: 160 case TRUE: 161 case LPAREN: 162 case READ: 163 case WRITE: 164 case IDENT: 165 case INTEGER: 166 Term(); 167 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 168 case OR: 169 case PLUS: 170 case MINUS: 171 kind = AddOp(); 172 Expr(); 173 jjtn000.setKind(kind); 174 break; 175 default: 176 jj_la1[3] = jj_gen; 177 } 178 break; 179 case NOT: 180 case MINUS: 181 un_op = UnOp(); 182 jjtn000.setUnOp(un_op); 183 Expr(); 184 break; 185 default: 186 jj_la1[4] = jj_gen; 187 jj_consume_token(-1); 188 throw new ParseException(); 189 } 190 } catch (Throwable jjte000) { 191 if (jjtc000) { 192 jjtree.clearNodeScope(jjtn000); 193 jjtc000 = false; 194 } else { 195 jjtree.popNode(); 196 } 197 if (jjte000 instanceof ParseException) { 198 {if (true) { 199 throw (ParseException)jjte000; 200 }} 201 } 202 if (jjte000 instanceof RuntimeException) { 203 {if (true) { 204 throw (RuntimeException)jjte000; 205 }} 206 } 207 {if (true) { 208 throw (Error)jjte000; 209 }} 210 } finally { 211 if (jjtc000) { 212 jjtree.closeNodeScope(jjtn000, true); 213 jjtreeCloseNodeScope(jjtn000); 214 } 215 } 216 } 217 218 /* 219 * The disambiguating algorithm of JavaCC automatically binds dangling 220 * else's to the innermost if statement. The LOOKAHEAD specification 221 * is to tell JavaCC that we know what we are doing. 222 */ IfExpr()223 static public void IfExpr() throws ParseException { 224 /*@bgen(jjtree) IfExpr */ 225 ASTIfExpr jjtn000 = new ASTIfExpr(JJTIFEXPR); 226 boolean jjtc000 = true; 227 jjtree.openNodeScope(jjtn000); 228 jjtreeOpenNodeScope(jjtn000);Token t=null; 229 try { 230 t = jj_consume_token(10); 231 jjtn000.setPosition(t.beginLine, t.beginColumn); 232 Expr(); 233 jj_consume_token(11); 234 Expr(); 235 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 236 case 12: 237 jj_consume_token(12); 238 Expr(); 239 break; 240 default: 241 jj_la1[5] = jj_gen; 242 } 243 jj_consume_token(13); 244 } catch (Throwable jjte000) { 245 if (jjtc000) { 246 jjtree.clearNodeScope(jjtn000); 247 jjtc000 = false; 248 } else { 249 jjtree.popNode(); 250 } 251 if (jjte000 instanceof ParseException) { 252 {if (true) { 253 throw (ParseException)jjte000; 254 }} 255 } 256 if (jjte000 instanceof RuntimeException) { 257 {if (true) { 258 throw (RuntimeException)jjte000; 259 }} 260 } 261 {if (true) { 262 throw (Error)jjte000; 263 }} 264 } finally { 265 if (jjtc000) { 266 jjtree.closeNodeScope(jjtn000, true); 267 jjtreeCloseNodeScope(jjtn000); 268 } 269 } 270 } 271 LetExpr()272 static public void LetExpr() throws ParseException { 273 /*@bgen(jjtree) LetExpr */ 274 ASTLetExpr jjtn000 = new ASTLetExpr(JJTLETEXPR); 275 boolean jjtc000 = true; 276 jjtree.openNodeScope(jjtn000); 277 jjtreeOpenNodeScope(jjtn000);Token t=null; 278 try { 279 t = jj_consume_token(14); 280 jjtn000.setPosition(t.beginLine, t.beginColumn); 281 label_3: 282 while (true) { 283 Ident(); 284 jj_consume_token(ASSIGN); 285 Expr(); 286 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 287 case FALSE: 288 case TRUE: 289 case READ: 290 case WRITE: 291 case IDENT: 292 break; 293 default: 294 jj_la1[6] = jj_gen; 295 break label_3; 296 } 297 } 298 jj_consume_token(15); 299 Expr(); 300 } catch (Throwable jjte000) { 301 if (jjtc000) { 302 jjtree.clearNodeScope(jjtn000); 303 jjtc000 = false; 304 } else { 305 jjtree.popNode(); 306 } 307 if (jjte000 instanceof ParseException) { 308 {if (true) { 309 throw (ParseException)jjte000; 310 }} 311 } 312 if (jjte000 instanceof RuntimeException) { 313 {if (true) { 314 throw (RuntimeException)jjte000; 315 }} 316 } 317 {if (true) { 318 throw (Error)jjte000; 319 }} 320 } finally { 321 if (jjtc000) { 322 jjtree.closeNodeScope(jjtn000, true); 323 jjtreeCloseNodeScope(jjtn000); 324 } 325 } 326 } 327 FunAppl()328 static public Token FunAppl() throws ParseException { 329 /*@bgen(jjtree) FunAppl */ 330 ASTFunAppl jjtn000 = new ASTFunAppl(JJTFUNAPPL); 331 boolean jjtc000 = true; 332 jjtree.openNodeScope(jjtn000); 333 jjtreeOpenNodeScope(jjtn000);Token t=null; 334 try { 335 t = Ident(); 336 jjtn000.setPosition(t.beginLine, t.beginColumn); 337 jj_consume_token(LPAREN); 338 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 339 case 10: 340 case 14: 341 case NOT: 342 case FALSE: 343 case TRUE: 344 case MINUS: 345 case LPAREN: 346 case READ: 347 case WRITE: 348 case IDENT: 349 case INTEGER: 350 Expr(); 351 label_4: 352 while (true) { 353 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 354 case COMMA: 355 break; 356 default: 357 jj_la1[7] = jj_gen; 358 break label_4; 359 } 360 jj_consume_token(COMMA); 361 Expr(); 362 } 363 break; 364 default: 365 jj_la1[8] = jj_gen; 366 } 367 jj_consume_token(RPAREN); 368 jjtree.closeNodeScope(jjtn000, true); 369 jjtc000 = false; 370 jjtreeCloseNodeScope(jjtn000); 371 {if (true) { 372 return t; 373 }} 374 } catch (Throwable jjte000) { 375 if (jjtc000) { 376 jjtree.clearNodeScope(jjtn000); 377 jjtc000 = false; 378 } else { 379 jjtree.popNode(); 380 } 381 if (jjte000 instanceof ParseException) { 382 {if (true) { 383 throw (ParseException)jjte000; 384 }} 385 } 386 if (jjte000 instanceof RuntimeException) { 387 {if (true) { 388 throw (RuntimeException)jjte000; 389 }} 390 } 391 {if (true) { 392 throw (Error)jjte000; 393 }} 394 } finally { 395 if (jjtc000) { 396 jjtree.closeNodeScope(jjtn000, true); 397 jjtreeCloseNodeScope(jjtn000); 398 } 399 } 400 throw new Error("Missing return statement in function"); 401 } 402 Term()403 static public void Term() throws ParseException { 404 /*@bgen(jjtree) Term */ 405 ASTTerm jjtn000 = new ASTTerm(JJTTERM); 406 boolean jjtc000 = true; 407 jjtree.openNodeScope(jjtn000); 408 jjtreeOpenNodeScope(jjtn000);int kind=-1; 409 try { 410 Factor(); 411 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 412 case AND: 413 case MULT: 414 case MOD: 415 case DIV: 416 kind = MultOp(); 417 jjtn000.setKind(kind); 418 Term(); 419 break; 420 default: 421 jj_la1[9] = jj_gen; 422 } 423 jjtree.closeNodeScope(jjtn000, true); 424 jjtc000 = false; 425 jjtreeCloseNodeScope(jjtn000); 426 jjtn000.setPosition(expr_token.beginLine, expr_token.beginColumn); 427 } catch (Throwable jjte000) { 428 if (jjtc000) { 429 jjtree.clearNodeScope(jjtn000); 430 jjtc000 = false; 431 } else { 432 jjtree.popNode(); 433 } 434 if (jjte000 instanceof ParseException) { 435 {if (true) { 436 throw (ParseException)jjte000; 437 }} 438 } 439 if (jjte000 instanceof RuntimeException) { 440 {if (true) { 441 throw (RuntimeException)jjte000; 442 }} 443 } 444 {if (true) { 445 throw (Error)jjte000; 446 }} 447 } finally { 448 if (jjtc000) { 449 jjtree.closeNodeScope(jjtn000, true); 450 jjtreeCloseNodeScope(jjtn000); 451 } 452 } 453 } 454 Factor()455 static public void Factor() throws ParseException { 456 /*@bgen(jjtree) Factor */ 457 ASTFactor jjtn000 = new ASTFactor(JJTFACTOR); 458 boolean jjtc000 = true; 459 jjtree.openNodeScope(jjtn000); 460 jjtreeOpenNodeScope(jjtn000);int kind=-1; 461 try { 462 Element(); 463 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 464 case GT: 465 case LT: 466 case GEQ: 467 case LEQ: 468 case EQ: 469 case NEQ: 470 kind = CmpOp(); 471 jjtn000.setKind(kind); 472 Factor(); 473 break; 474 default: 475 jj_la1[10] = jj_gen; 476 } 477 jjtree.closeNodeScope(jjtn000, true); 478 jjtc000 = false; 479 jjtreeCloseNodeScope(jjtn000); 480 jjtn000.setPosition(expr_token.beginLine, expr_token.beginColumn); 481 } catch (Throwable jjte000) { 482 if (jjtc000) { 483 jjtree.clearNodeScope(jjtn000); 484 jjtc000 = false; 485 } else { 486 jjtree.popNode(); 487 } 488 if (jjte000 instanceof ParseException) { 489 {if (true) { 490 throw (ParseException)jjte000; 491 }} 492 } 493 if (jjte000 instanceof RuntimeException) { 494 {if (true) { 495 throw (RuntimeException)jjte000; 496 }} 497 } 498 {if (true) { 499 throw (Error)jjte000; 500 }} 501 } finally { 502 if (jjtc000) { 503 jjtree.closeNodeScope(jjtn000, true); 504 jjtreeCloseNodeScope(jjtn000); 505 } 506 } 507 } 508 Element()509 static public void Element() throws ParseException { 510 if (jj_2_1(2)) { 511 expr_token = FunAppl(); 512 } else { 513 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 514 case FALSE: 515 case TRUE: 516 case READ: 517 case WRITE: 518 case IDENT: 519 expr_token = Ident(); 520 break; 521 case INTEGER: 522 expr_token = Integer(); 523 break; 524 case LPAREN: 525 expr_token = jj_consume_token(LPAREN); 526 Expr(); 527 jj_consume_token(RPAREN); 528 break; 529 default: 530 jj_la1[11] = jj_gen; 531 jj_consume_token(-1); 532 throw new ParseException(); 533 } 534 } 535 } 536 Integer()537 static public Token Integer() throws ParseException { 538 /*@bgen(jjtree) Integer */ 539 ASTInteger jjtn000 = new ASTInteger(JJTINTEGER); 540 boolean jjtc000 = true; 541 jjtree.openNodeScope(jjtn000); 542 jjtreeOpenNodeScope(jjtn000);Token t; 543 try { 544 t = jj_consume_token(INTEGER); 545 jjtree.closeNodeScope(jjtn000, true); 546 jjtc000 = false; 547 jjtreeCloseNodeScope(jjtn000); 548 jjtn000.setValue(Integer.parseInt(t.image)); 549 jjtn000.setPosition(t.beginLine, t.beginColumn); 550 {if (true) { 551 return t; 552 }} 553 } finally { 554 if (jjtc000) { 555 jjtree.closeNodeScope(jjtn000, true); 556 jjtreeCloseNodeScope(jjtn000); 557 } 558 } 559 throw new Error("Missing return statement in function"); 560 } 561 Ident()562 static public Token Ident() throws ParseException { 563 /*@bgen(jjtree) Ident */ 564 ASTIdent jjtn000 = new ASTIdent(JJTIDENT); 565 boolean jjtc000 = true; 566 jjtree.openNodeScope(jjtn000); 567 jjtreeOpenNodeScope(jjtn000);Token t; 568 try { 569 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 570 case TRUE: 571 t = jj_consume_token(TRUE); 572 break; 573 case FALSE: 574 t = jj_consume_token(FALSE); 575 break; 576 case READ: 577 t = jj_consume_token(READ); 578 break; 579 case WRITE: 580 t = jj_consume_token(WRITE); 581 break; 582 case IDENT: 583 t = jj_consume_token(IDENT); 584 break; 585 default: 586 jj_la1[12] = jj_gen; 587 jj_consume_token(-1); 588 throw new ParseException(); 589 } 590 jjtree.closeNodeScope(jjtn000, true); 591 jjtc000 = false; 592 jjtreeCloseNodeScope(jjtn000); 593 jjtn000.setName(t.image); 594 jjtn000.setPosition(t.beginLine, t.beginColumn); 595 {if (true) { 596 return t; 597 }} 598 } finally { 599 if (jjtc000) { 600 jjtree.closeNodeScope(jjtn000, true); 601 jjtreeCloseNodeScope(jjtn000); 602 } 603 } 604 throw new Error("Missing return statement in function"); 605 } 606 AddOp()607 static public int AddOp() throws ParseException { 608 Token t=null; 609 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 610 case PLUS: 611 t = jj_consume_token(PLUS); 612 break; 613 case MINUS: 614 t = jj_consume_token(MINUS); 615 break; 616 case OR: 617 t = jj_consume_token(OR); 618 break; 619 default: 620 jj_la1[13] = jj_gen; 621 jj_consume_token(-1); 622 throw new ParseException(); 623 } 624 {if (true) { 625 return t.kind; 626 }} 627 throw new Error("Missing return statement in function"); 628 } 629 MultOp()630 static public int MultOp() throws ParseException { 631 Token t=null; 632 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 633 case MULT: 634 t = jj_consume_token(MULT); 635 break; 636 case DIV: 637 t = jj_consume_token(DIV); 638 break; 639 case MOD: 640 t = jj_consume_token(MOD); 641 break; 642 case AND: 643 t = jj_consume_token(AND); 644 break; 645 default: 646 jj_la1[14] = jj_gen; 647 jj_consume_token(-1); 648 throw new ParseException(); 649 } 650 {if (true) { 651 return t.kind; 652 }} 653 throw new Error("Missing return statement in function"); 654 } 655 CmpOp()656 static public int CmpOp() throws ParseException { 657 Token t=null; 658 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 659 case EQ: 660 t = jj_consume_token(EQ); 661 break; 662 case NEQ: 663 t = jj_consume_token(NEQ); 664 break; 665 case LEQ: 666 t = jj_consume_token(LEQ); 667 break; 668 case GEQ: 669 t = jj_consume_token(GEQ); 670 break; 671 case GT: 672 t = jj_consume_token(GT); 673 break; 674 case LT: 675 t = jj_consume_token(LT); 676 break; 677 default: 678 jj_la1[15] = jj_gen; 679 jj_consume_token(-1); 680 throw new ParseException(); 681 } 682 {if (true) { 683 return t.kind; 684 }} 685 throw new Error("Missing return statement in function"); 686 } 687 UnOp()688 static final public int UnOp() throws ParseException { 689 Token t=null; 690 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 691 case MINUS: 692 t = jj_consume_token(MINUS); 693 break; 694 case NOT: 695 t = jj_consume_token(NOT); 696 break; 697 default: 698 jj_la1[16] = jj_gen; 699 jj_consume_token(-1); 700 throw new ParseException(); 701 } 702 {if (true) { 703 return t.kind; 704 }} 705 throw new Error("Missing return statement in function"); 706 } 707 jj_2_1(int xla)708 static private boolean jj_2_1(int xla) { 709 jj_la = xla; jj_lastpos = jj_scanpos = token; 710 boolean retval = !jj_3_1(); 711 jj_save(0, xla); 712 return retval; 713 } 714 jj_3R_8()715 static private boolean jj_3R_8() { 716 if (jj_scan_token(FALSE)) { 717 return true; 718 } 719 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 720 return false; 721 } 722 return false; 723 } 724 jj_3R_11()725 static private boolean jj_3R_11() { 726 if (jj_scan_token(IDENT)) { 727 return true; 728 } 729 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 730 return false; 731 } 732 return false; 733 } 734 jj_3R_7()735 static private boolean jj_3R_7() { 736 if (jj_scan_token(TRUE)) { 737 return true; 738 } 739 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 740 return false; 741 } 742 return false; 743 } 744 jj_3R_6()745 static private boolean jj_3R_6() { 746 Token xsp; 747 xsp = jj_scanpos; 748 if (jj_3R_7()) { 749 jj_scanpos = xsp; 750 if (jj_3R_8()) { 751 jj_scanpos = xsp; 752 if (jj_3R_9()) { 753 jj_scanpos = xsp; 754 if (jj_3R_10()) { 755 jj_scanpos = xsp; 756 if (jj_3R_11()) { 757 return true; 758 } 759 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 760 return false; 761 } 762 } else if (jj_la == 0 && jj_scanpos == jj_lastpos) { 763 return false; 764 } 765 } else if (jj_la == 0 && jj_scanpos == jj_lastpos) { 766 return false; 767 } 768 } else if (jj_la == 0 && jj_scanpos == jj_lastpos) { 769 return false; 770 } 771 } else if (jj_la == 0 && jj_scanpos == jj_lastpos) { 772 return false; 773 } 774 return false; 775 } 776 jj_3_1()777 static private boolean jj_3_1() { 778 if (jj_3R_5()) { 779 return true; 780 } 781 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 782 return false; 783 } 784 return false; 785 } 786 jj_3R_5()787 static private boolean jj_3R_5() { 788 if (jj_3R_6()) { 789 return true; 790 } 791 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 792 return false; 793 } 794 if (jj_scan_token(LPAREN)) { 795 return true; 796 } 797 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 798 return false; 799 } 800 return false; 801 } 802 jj_3R_10()803 static private boolean jj_3R_10() { 804 if (jj_scan_token(WRITE)) { 805 return true; 806 } 807 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 808 return false; 809 } 810 return false; 811 } 812 jj_3R_9()813 static private boolean jj_3R_9() { 814 if (jj_scan_token(READ)) { 815 return true; 816 } 817 if (jj_la == 0 && jj_scanpos == jj_lastpos) { 818 return false; 819 } 820 return false; 821 } 822 823 static private boolean jj_initialized_once = false; 824 static public MiniParserTokenManager token_source; 825 static ASCII_CharStream jj_input_stream; 826 static public Token token, jj_nt; 827 static private int jj_ntk; 828 static private Token jj_scanpos, jj_lastpos; 829 static private int jj_la; 830 static public boolean lookingAhead = false; 831 // static private boolean jj_semLA; 832 static private int jj_gen; 833 static final private int[] jj_la1 = new int[17]; 834 static final private int[] jj_la1_0 = {0x200,0x0,0x1800000,0x1c000000,0x11c04400,0x1000,0x1800000,0x0,0x11c04400, 835 0xe2000000,0x3f0000,0x1800000,0x1800000,0x1c000000,0xe2000000,0x3f0000,0x10400000,}; 836 static final private int[] jj_la1_1 = {0x0,0x8,0x130,0x0,0x331,0x0,0x130,0x8,0x331,0x0,0x0,0x331,0x130,0x0,0x0,0x0,0x0,}; 837 static final private JJCalls[] jj_2_rtns = new JJCalls[1]; 838 static private boolean jj_rescan = false; 839 static private int jj_gc = 0; 840 MiniParser(java.io.InputStream stream)841 public MiniParser(java.io.InputStream stream) { 842 if (jj_initialized_once) { 843 System.out.println("ERROR: Second call to constructor of static parser. You must"); 844 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false"); 845 System.out.println(" during parser generation."); 846 throw new Error(); 847 } 848 jj_initialized_once = true; 849 jj_input_stream = new ASCII_CharStream(stream, 1, 1); 850 token_source = new MiniParserTokenManager(jj_input_stream); 851 token = new Token(); 852 jj_ntk = -1; 853 jj_gen = 0; 854 for (int i = 0; i < 17; i++) { 855 jj_la1[i] = -1; 856 } 857 for (int i = 0; i < jj_2_rtns.length; i++) { 858 jj_2_rtns[i] = new JJCalls(); 859 } 860 } 861 ReInit(java.io.InputStream stream)862 static public void ReInit(java.io.InputStream stream) { 863 ASCII_CharStream.ReInit(stream, 1, 1); 864 MiniParserTokenManager.ReInit(jj_input_stream); 865 token = new Token(); 866 jj_ntk = -1; 867 jjtree.reset(); 868 jj_gen = 0; 869 for (int i = 0; i < 17; i++) { 870 jj_la1[i] = -1; 871 } 872 for (int i = 0; i < jj_2_rtns.length; i++) { 873 jj_2_rtns[i] = new JJCalls(); 874 } 875 } 876 MiniParser(java.io.Reader stream)877 public MiniParser(java.io.Reader stream) { 878 if (jj_initialized_once) { 879 System.out.println("ERROR: Second call to constructor of static parser. You must"); 880 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false"); 881 System.out.println(" during parser generation."); 882 throw new Error(); 883 } 884 jj_initialized_once = true; 885 jj_input_stream = new ASCII_CharStream(stream, 1, 1); 886 token_source = new MiniParserTokenManager(jj_input_stream); 887 token = new Token(); 888 jj_ntk = -1; 889 jj_gen = 0; 890 for (int i = 0; i < 17; i++) { 891 jj_la1[i] = -1; 892 } 893 for (int i = 0; i < jj_2_rtns.length; i++) { 894 jj_2_rtns[i] = new JJCalls(); 895 } 896 } 897 ReInit(java.io.Reader stream)898 static public void ReInit(java.io.Reader stream) { 899 ASCII_CharStream.ReInit(stream, 1, 1); 900 MiniParserTokenManager.ReInit(jj_input_stream); 901 token = new Token(); 902 jj_ntk = -1; 903 jjtree.reset(); 904 jj_gen = 0; 905 for (int i = 0; i < 17; i++) { 906 jj_la1[i] = -1; 907 } 908 for (int i = 0; i < jj_2_rtns.length; i++) { 909 jj_2_rtns[i] = new JJCalls(); 910 } 911 } 912 MiniParser(MiniParserTokenManager tm)913 public MiniParser(MiniParserTokenManager tm) { 914 if (jj_initialized_once) { 915 System.out.println("ERROR: Second call to constructor of static parser. You must"); 916 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false"); 917 System.out.println(" during parser generation."); 918 throw new Error(); 919 } 920 jj_initialized_once = true; 921 token_source = tm; 922 token = new Token(); 923 jj_ntk = -1; 924 jj_gen = 0; 925 for (int i = 0; i < 17; i++) { 926 jj_la1[i] = -1; 927 } 928 for (int i = 0; i < jj_2_rtns.length; i++) { 929 jj_2_rtns[i] = new JJCalls(); 930 } 931 } 932 ReInit(MiniParserTokenManager tm)933 public void ReInit(MiniParserTokenManager tm) { 934 token_source = tm; 935 token = new Token(); 936 jj_ntk = -1; 937 jjtree.reset(); 938 jj_gen = 0; 939 for (int i = 0; i < 17; i++) { 940 jj_la1[i] = -1; 941 } 942 for (int i = 0; i < jj_2_rtns.length; i++) { 943 jj_2_rtns[i] = new JJCalls(); 944 } 945 } 946 jj_consume_token(int kind)947 static private Token jj_consume_token(int kind) throws ParseException { 948 Token oldToken; 949 if ((oldToken = token).next != null) { 950 token = token.next; 951 } else { 952 token = token.next = MiniParserTokenManager.getNextToken(); 953 } 954 jj_ntk = -1; 955 if (token.kind == kind) { 956 jj_gen++; 957 if (++jj_gc > 100) { 958 jj_gc = 0; 959 for (int i = 0; i < jj_2_rtns.length; i++) { 960 JJCalls c = jj_2_rtns[i]; 961 while (c != null) { 962 if (c.gen < jj_gen) { 963 c.first = null; 964 } 965 c = c.next; 966 } 967 } 968 } 969 return token; 970 } 971 token = oldToken; 972 jj_kind = kind; 973 throw generateParseException(); 974 } 975 jj_scan_token(int kind)976 static private boolean jj_scan_token(int kind) { 977 if (jj_scanpos == jj_lastpos) { 978 jj_la--; 979 if (jj_scanpos.next == null) { 980 jj_lastpos = jj_scanpos = jj_scanpos.next = MiniParserTokenManager.getNextToken(); 981 } else { 982 jj_lastpos = jj_scanpos = jj_scanpos.next; 983 } 984 } else { 985 jj_scanpos = jj_scanpos.next; 986 } 987 if (jj_rescan) { 988 int i = 0; Token tok = token; 989 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } 990 if (tok != null) { 991 jj_add_error_token(kind, i); 992 } 993 } 994 return (jj_scanpos.kind != kind); 995 } 996 getNextToken()997 static public Token getNextToken() { 998 if (token.next != null) { 999 token = token.next; 1000 } else { 1001 token = token.next = MiniParserTokenManager.getNextToken(); 1002 } 1003 jj_ntk = -1; 1004 jj_gen++; 1005 return token; 1006 } 1007 getToken(int index)1008 static public Token getToken(int index) { 1009 Token t = lookingAhead ? jj_scanpos : token; 1010 for (int i = 0; i < index; i++) { 1011 if (t.next != null) { 1012 t = t.next; 1013 } else { 1014 t = t.next = MiniParserTokenManager.getNextToken(); 1015 } 1016 } 1017 return t; 1018 } 1019 jj_ntk()1020 static private int jj_ntk() { 1021 if ((jj_nt=token.next) == null) { 1022 return (jj_ntk = (token.next=MiniParserTokenManager.getNextToken()).kind); 1023 } else { 1024 return (jj_ntk = jj_nt.kind); 1025 } 1026 } 1027 1028 static private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>(); 1029 static private int[] jj_expentry; 1030 static private int jj_kind = -1; 1031 static private int[] jj_lasttokens = new int[100]; 1032 static private int jj_endpos; 1033 jj_add_error_token(int kind, int pos)1034 static private void jj_add_error_token(int kind, int pos) { 1035 if (pos >= 100) { 1036 return; 1037 } 1038 if (pos == jj_endpos + 1) { 1039 jj_lasttokens[jj_endpos++] = kind; 1040 } else if (jj_endpos != 0) { 1041 jj_expentry = new int[jj_endpos]; 1042 for (int i = 0; i < jj_endpos; i++) { 1043 jj_expentry[i] = jj_lasttokens[i]; 1044 } 1045 boolean exists = false; 1046 for (java.util.Enumeration<int[]> e = jj_expentries.elements(); e.hasMoreElements();) { 1047 int[] oldentry = (e.nextElement()); 1048 if (oldentry.length == jj_expentry.length) { 1049 exists = true; 1050 for (int i = 0; i < jj_expentry.length; i++) { 1051 if (oldentry[i] != jj_expentry[i]) { 1052 exists = false; 1053 break; 1054 } 1055 } 1056 if (exists) { 1057 break; 1058 } 1059 } 1060 } 1061 if (!exists) { 1062 jj_expentries.addElement(jj_expentry); 1063 } 1064 if (pos != 0) { 1065 jj_lasttokens[(jj_endpos = pos) - 1] = kind; 1066 } 1067 } 1068 } 1069 generateParseException()1070 static public ParseException generateParseException() { 1071 jj_expentries.removeAllElements(); 1072 boolean[] la1tokens = new boolean[43]; 1073 for (int i = 0; i < 43; i++) { 1074 la1tokens[i] = false; 1075 } 1076 if (jj_kind >= 0) { 1077 la1tokens[jj_kind] = true; 1078 jj_kind = -1; 1079 } 1080 for (int i = 0; i < 17; i++) { 1081 if (jj_la1[i] == jj_gen) { 1082 for (int j = 0; j < 32; j++) { 1083 if ((jj_la1_0[i] & (1<<j)) != 0) { 1084 la1tokens[j] = true; 1085 } 1086 if ((jj_la1_1[i] & (1<<j)) != 0) { 1087 la1tokens[32+j] = true; 1088 } 1089 } 1090 } 1091 } 1092 for (int i = 0; i < 43; i++) { 1093 if (la1tokens[i]) { 1094 jj_expentry = new int[1]; 1095 jj_expentry[0] = i; 1096 jj_expentries.addElement(jj_expentry); 1097 } 1098 } 1099 jj_endpos = 0; 1100 jj_rescan_token(); 1101 jj_add_error_token(0, 0); 1102 int[][] exptokseq = new int[jj_expentries.size()][]; 1103 for (int i = 0; i < jj_expentries.size(); i++) { 1104 exptokseq[i] = jj_expentries.elementAt(i); 1105 } 1106 return new ParseException(token, exptokseq, tokenImage); 1107 } 1108 enable_tracing()1109 static public void enable_tracing() { 1110 } 1111 disable_tracing()1112 static public void disable_tracing() { 1113 } 1114 jj_rescan_token()1115 static private void jj_rescan_token() { 1116 jj_rescan = true; 1117 for (int i = 0; i < 1; i++) { 1118 JJCalls p = jj_2_rtns[i]; 1119 do { 1120 if (p.gen > jj_gen) { 1121 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; 1122 switch (i) { 1123 case 0: jj_3_1(); break; 1124 } 1125 } 1126 p = p.next; 1127 } while (p != null); 1128 } 1129 jj_rescan = false; 1130 } 1131 jj_save(int index, int xla)1132 static private void jj_save(int index, int xla) { 1133 JJCalls p = jj_2_rtns[index]; 1134 while (p.gen > jj_gen) { 1135 if (p.next == null) { p = p.next = new JJCalls(); break; } 1136 p = p.next; 1137 } 1138 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; 1139 } 1140 1141 private static final class JJCalls { 1142 int gen; 1143 Token first; 1144 int arg; 1145 JJCalls next; 1146 } 1147 1148 } 1149