1 2 package JSci.maths.symbolic; 3 4 import JSci.maths.*; 5 import JSci.maths.fields.*; 6 import JSci.maths.groups.*; 7 8 import java.io.*; 9 import java.util.*; 10 11 13 public class ExpressionParser implements ExpressionParserConstants { 14 15 private static ExpressionParser parser=null; 16 17 private static Map variables; 18 19 26 public synchronized static Expression parse(InputStream is,Map vars) throws ParseException { 27 variables=vars; 28 if (variables==null) variables=new Hashtable(); 29 if (parser==null) parser = new ExpressionParser(is); 30 else parser.ReInit(is); 31 return parser.Input(); 32 } 33 34 40 public static Expression parse(String s,Map vars) throws ParseException { 41 InputStream i=new ByteArrayInputStream(s.getBytes()); 42 return parse(i,vars); 43 } 44 45 50 public static Expression parse(String s) throws ParseException { 51 InputStream i=new ByteArrayInputStream(s.getBytes()); 52 return parse(i,null); 53 } 54 55 60 public static Expression parse(InputStream is) throws ParseException { 61 return parse(is,null); 62 } 63 64 static final public Expression Input() throws ParseException { 65 Expression r=null; 66 if (jj_2_1(60)) { 67 r = expressionP0(); 68 } else { 69 ; 70 } 71 label_1: 72 while (true) { 73 if (jj_2_2(60)) { 74 ; 75 } else { 76 break label_1; 77 } 78 if (jj_2_3(60)) { 79 jj_consume_token(1); 80 } else if (jj_2_4(60)) { 81 jj_consume_token(2); 82 } else { 83 jj_consume_token(-1); 84 throw new ParseException(); 85 } 86 } 87 jj_consume_token(0); 88 {if (true) return r;} 89 throw new Error ("Missing return statement in function"); 90 } 91 92 static final public Expression expressionP0() throws ParseException { 93 Expression[] arg; Expression argb; 94 if (jj_2_5(60)) { 95 arg = expressionP0l(); 96 if (arg.length==1) {if (true) return arg[0];} 97 else {if (true) return new Sum(arg[0],arg[1]);} 98 } else if (jj_2_6(60)) { 99 argb = expressionP1(); 100 {if (true) return argb;} 101 } else { 102 jj_consume_token(-1); 103 throw new ParseException(); 104 } 105 throw new Error ("Missing return statement in function"); 106 } 107 108 static final public Expression[] expressionP0l() throws ParseException { 109 Expression arga=null; Expression argb[]=null; 110 if (jj_2_7(60)) { 111 arga = expressionP1(); 112 jj_consume_token(3); 113 argb = expressionP0l(); 114 if (argb.length==2) {if (true) return new Expression[] {arga,new Sum(argb[0],argb[1])};} 115 else {if (true) return new Expression[] {arga,argb[0]};} 116 } else if (jj_2_8(60)) { 117 arga = expressionP1(); 118 jj_consume_token(4); 119 argb = expressionP0l(); 120 Expression b0neg=Expression.negative(argb[0]); 121 if (argb.length==2) {if (true) return new Expression[] {arga,new Sum(b0neg,argb[1])};} 122 else {if (true) return new Expression[] {arga,b0neg};} 123 } else if (jj_2_9(60)) { 124 arga = expressionP1(); 125 {if (true) return new Expression[] {arga};} 126 } else { 127 jj_consume_token(-1); 128 throw new ParseException(); 129 } 130 throw new Error ("Missing return statement in function"); 131 } 132 133 static final public Expression expressionP1() throws ParseException { 134 Expression[] arg; Expression argb; 135 if (jj_2_10(60)) { 136 arg = expressionP1l(); 137 if (arg.length==1) {if (true) return arg[0];} 138 else {if (true) return new Product(arg[0],arg[1]);} 139 } else if (jj_2_11(60)) { 140 argb = expressionP2(); 141 {if (true) return argb;} 142 } else { 143 jj_consume_token(-1); 144 throw new ParseException(); 145 } 146 throw new Error ("Missing return statement in function"); 147 } 148 149 static final public Expression[] expressionP1l() throws ParseException { 150 Expression arga=null; Expression argb[]=null; 151 if (jj_2_12(60)) { 152 arga = expressionP2(); 153 jj_consume_token(5); 154 argb = expressionP1l(); 155 if (argb.length==2) {if (true) return new Expression[] {arga,new Product(argb[0],argb[1])};} 156 else {if (true) return new Expression[] {arga,argb[0]};} 157 } else if (jj_2_13(60)) { 158 arga = expressionP2(); 159 jj_consume_token(6); 160 argb = expressionP1l(); 161 Expression b0inv=Expression.inverse(argb[0]); 162 if (argb.length==2) {if (true) return new Expression[] {arga,new Product(b0inv,argb[1])};} 163 else {if (true) return new Expression[] {arga,b0inv};} 164 } else if (jj_2_14(60)) { 165 arga = expressionP2(); 166 {if (true) return new Expression[] {arga};} 167 } else { 168 jj_consume_token(-1); 169 throw new ParseException(); 170 } 171 throw new Error ("Missing return statement in function"); 172 } 173 174 static final public Expression expressionP2() throws ParseException { 175 Expression arg=null; 176 if (jj_2_15(60)) { 177 jj_consume_token(4); 178 arg = expressionP3(); 179 {if (true) return Expression.negative(arg);} 180 } else if (jj_2_16(60)) { 181 jj_consume_token(3); 182 arg = expressionP3(); 183 {if (true) return arg;} 184 } else if (jj_2_17(60)) { 185 arg = expressionP3(); 186 {if (true) return arg;} 187 } else { 188 jj_consume_token(-1); 189 throw new ParseException(); 190 } 191 throw new Error ("Missing return statement in function"); 192 } 193 194 static final public Expression expressionP3() throws ParseException { 195 Expression arga=null; Token f; 196 if (jj_2_18(60)) { 197 arga = expressionP4(); 198 jj_consume_token(7); 199 f = jj_consume_token(INUM); 200 {if (true) return new Power(arga,Integer.parseInt(f.toString()));} 201 } else if (jj_2_19(60)) { 202 arga = expressionP4(); 203 {if (true) return arga;} 204 } else { 205 jj_consume_token(-1); 206 throw new ParseException(); 207 } 208 throw new Error ("Missing return statement in function"); 209 } 210 211 static final public Expression expressionP4() throws ParseException { 212 Token f; Expression arg=null; 213 if (jj_2_20(60)) { 214 f = jj_consume_token(DNUM); 215 {if (true) return new Constant(new MathDouble(Double.parseDouble(f.toString())));} 216 } else if (jj_2_21(60)) { 217 f = jj_consume_token(INUM); 218 {if (true) return new Constant(new MathDouble(Integer.parseInt(f.toString())));} 219 } else if (jj_2_22(60)) { 220 f = jj_consume_token(IDENTIFIER); 221 Variable v=(Variable)variables.get(f.toString()); 222 if (v==null) 223 v=new Variable(f.toString(),RealField.getInstance()); 224 variables.put(f.toString(),v); 225 {if (true) return v;} 226 } else if (jj_2_23(60)) { 227 f = jj_consume_token(PI); 228 {if (true) return new Constant(RealField.PI);} 229 } else if (jj_2_24(60)) { 230 f = jj_consume_token(IUNIT); 231 {if (true) return new Constant(Complex.I);} 232 } else if (jj_2_25(60)) { 233 f = jj_consume_token(ONEARGFUNCTION); 234 jj_consume_token(8); 235 arg = expressionP0(); 236 jj_consume_token(9); 237 {if (true) return new Function(f.toString(),arg);} 238 } else if (jj_2_26(60)) { 239 jj_consume_token(8); 240 arg = expressionP0(); 241 jj_consume_token(9); 242 {if (true) return arg;} 243 } else { 244 jj_consume_token(-1); 245 throw new ParseException(); 246 } 247 throw new Error ("Missing return statement in function"); 248 } 249 250 static final private boolean jj_2_1(int xla) { 251 jj_la = xla; jj_lastpos = jj_scanpos = token; 252 try { return !jj_3_1(); } 253 catch(LookaheadSuccess ls) { return true; } 254 finally { jj_save(0, xla); } 255 } 256 257 static final private boolean jj_2_2(int xla) { 258 jj_la = xla; jj_lastpos = jj_scanpos = token; 259 try { return !jj_3_2(); } 260 catch(LookaheadSuccess ls) { return true; } 261 finally { jj_save(1, xla); } 262 } 263 264 static final private boolean jj_2_3(int xla) { 265 jj_la = xla; jj_lastpos = jj_scanpos = token; 266 try { return !jj_3_3(); } 267 catch(LookaheadSuccess ls) { return true; } 268 finally { jj_save(2, xla); } 269 } 270 271 static final private boolean jj_2_4(int xla) { 272 jj_la = xla; jj_lastpos = jj_scanpos = token; 273 try { return !jj_3_4(); } 274 catch(LookaheadSuccess ls) { return true; } 275 finally { jj_save(3, xla); } 276 } 277 278 static final private boolean jj_2_5(int xla) { 279 jj_la = xla; jj_lastpos = jj_scanpos = token; 280 try { return !jj_3_5(); } 281 catch(LookaheadSuccess ls) { return true; } 282 finally { jj_save(4, xla); } 283 } 284 285 static final private boolean jj_2_6(int xla) { 286 jj_la = xla; jj_lastpos = jj_scanpos = token; 287 try { return !jj_3_6(); } 288 catch(LookaheadSuccess ls) { return true; } 289 finally { jj_save(5, xla); } 290 } 291 292 static final private boolean jj_2_7(int xla) { 293 jj_la = xla; jj_lastpos = jj_scanpos = token; 294 try { return !jj_3_7(); } 295 catch(LookaheadSuccess ls) { return true; } 296 finally { jj_save(6, xla); } 297 } 298 299 static final private boolean jj_2_8(int xla) { 300 jj_la = xla; jj_lastpos = jj_scanpos = token; 301 try { return !jj_3_8(); } 302 catch(LookaheadSuccess ls) { return true; } 303 finally { jj_save(7, xla); } 304 } 305 306 static final private boolean jj_2_9(int xla) { 307 jj_la = xla; jj_lastpos = jj_scanpos = token; 308 try { return !jj_3_9(); } 309 catch(LookaheadSuccess ls) { return true; } 310 finally { jj_save(8, xla); } 311 } 312 313 static final private boolean jj_2_10(int xla) { 314 jj_la = xla; jj_lastpos = jj_scanpos = token; 315 try { return !jj_3_10(); } 316 catch(LookaheadSuccess ls) { return true; } 317 finally { jj_save(9, xla); } 318 } 319 320 static final private boolean jj_2_11(int xla) { 321 jj_la = xla; jj_lastpos = jj_scanpos = token; 322 try { return !jj_3_11(); } 323 catch(LookaheadSuccess ls) { return true; } 324 finally { jj_save(10, xla); } 325 } 326 327 static final private boolean jj_2_12(int xla) { 328 jj_la = xla; jj_lastpos = jj_scanpos = token; 329 try { return !jj_3_12(); } 330 catch(LookaheadSuccess ls) { return true; } 331 finally { jj_save(11, xla); } 332 } 333 334 static final private boolean jj_2_13(int xla) { 335 jj_la = xla; jj_lastpos = jj_scanpos = token; 336 try { return !jj_3_13(); } 337 catch(LookaheadSuccess ls) { return true; } 338 finally { jj_save(12, xla); } 339 } 340 341 static final private boolean jj_2_14(int xla) { 342 jj_la = xla; jj_lastpos = jj_scanpos = token; 343 try { return !jj_3_14(); } 344 catch(LookaheadSuccess ls) { return true; } 345 finally { jj_save(13, xla); } 346 } 347 348 static final private boolean jj_2_15(int xla) { 349 jj_la = xla; jj_lastpos = jj_scanpos = token; 350 try { return !jj_3_15(); } 351 catch(LookaheadSuccess ls) { return true; } 352 finally { jj_save(14, xla); } 353 } 354 355 static final private boolean jj_2_16(int xla) { 356 jj_la = xla; jj_lastpos = jj_scanpos = token; 357 try { return !jj_3_16(); } 358 catch(LookaheadSuccess ls) { return true; } 359 finally { jj_save(15, xla); } 360 } 361 362 static final private boolean jj_2_17(int xla) { 363 jj_la = xla; jj_lastpos = jj_scanpos = token; 364 try { return !jj_3_17(); } 365 catch(LookaheadSuccess ls) { return true; } 366 finally { jj_save(16, xla); } 367 } 368 369 static final private boolean jj_2_18(int xla) { 370 jj_la = xla; jj_lastpos = jj_scanpos = token; 371 try { return !jj_3_18(); } 372 catch(LookaheadSuccess ls) { return true; } 373 finally { jj_save(17, xla); } 374 } 375 376 static final private boolean jj_2_19(int xla) { 377 jj_la = xla; jj_lastpos = jj_scanpos = token; 378 try { return !jj_3_19(); } 379 catch(LookaheadSuccess ls) { return true; } 380 finally { jj_save(18, xla); } 381 } 382 383 static final private boolean jj_2_20(int xla) { 384 jj_la = xla; jj_lastpos = jj_scanpos = token; 385 try { return !jj_3_20(); } 386 catch(LookaheadSuccess ls) { return true; } 387 finally { jj_save(19, xla); } 388 } 389 390 static final private boolean jj_2_21(int xla) { 391 jj_la = xla; jj_lastpos = jj_scanpos = token; 392 try { return !jj_3_21(); } 393 catch(LookaheadSuccess ls) { return true; } 394 finally { jj_save(20, xla); } 395 } 396 397 static final private boolean jj_2_22(int xla) { 398 jj_la = xla; jj_lastpos = jj_scanpos = token; 399 try { return !jj_3_22(); } 400 catch(LookaheadSuccess ls) { return true; } 401 finally { jj_save(21, xla); } 402 } 403 404 static final private boolean jj_2_23(int xla) { 405 jj_la = xla; jj_lastpos = jj_scanpos = token; 406 try { return !jj_3_23(); } 407 catch(LookaheadSuccess ls) { return true; } 408 finally { jj_save(22, xla); } 409 } 410 411 static final private boolean jj_2_24(int xla) { 412 jj_la = xla; jj_lastpos = jj_scanpos = token; 413 try { return !jj_3_24(); } 414 catch(LookaheadSuccess ls) { return true; } 415 finally { jj_save(23, xla); } 416 } 417 418 static final private boolean jj_2_25(int xla) { 419 jj_la = xla; jj_lastpos = jj_scanpos = token; 420 try { return !jj_3_25(); } 421 catch(LookaheadSuccess ls) { return true; } 422 finally { jj_save(24, xla); } 423 } 424 425 static final private boolean jj_2_26(int xla) { 426 jj_la = xla; jj_lastpos = jj_scanpos = token; 427 try { return !jj_3_26(); } 428 catch(LookaheadSuccess ls) { return true; } 429 finally { jj_save(25, xla); } 430 } 431 432 static final private boolean jj_3_11() { 433 if (jj_3R_6()) return true; 434 return false; 435 } 436 437 static final private boolean jj_3R_4() { 438 Token xsp; 439 xsp = jj_scanpos; 440 if (jj_3_10()) { 441 jj_scanpos = xsp; 442 if (jj_3_11()) return true; 443 } 444 return false; 445 } 446 447 static final private boolean jj_3_10() { 448 if (jj_3R_5()) return true; 449 return false; 450 } 451 452 static final private boolean jj_3_19() { 453 if (jj_3R_8()) return true; 454 return false; 455 } 456 457 static final private boolean jj_3R_7() { 458 Token xsp; 459 xsp = jj_scanpos; 460 if (jj_3_18()) { 461 jj_scanpos = xsp; 462 if (jj_3_19()) return true; 463 } 464 return false; 465 } 466 467 static final private boolean jj_3_18() { 468 if (jj_3R_8()) return true; 469 if (jj_scan_token(7)) return true; 470 if (jj_scan_token(INUM)) return true; 471 return false; 472 } 473 474 static final private boolean jj_3_9() { 475 if (jj_3R_4()) return true; 476 return false; 477 } 478 479 static final private boolean jj_3_4() { 480 if (jj_scan_token(2)) return true; 481 return false; 482 } 483 484 static final private boolean jj_3_17() { 485 if (jj_3R_7()) return true; 486 return false; 487 } 488 489 static final private boolean jj_3_8() { 490 if (jj_3R_4()) return true; 491 if (jj_scan_token(4)) return true; 492 if (jj_3R_3()) return true; 493 return false; 494 } 495 496 static final private boolean jj_3_16() { 497 if (jj_scan_token(3)) return true; 498 if (jj_3R_7()) return true; 499 return false; 500 } 501 502 static final private boolean jj_3_3() { 503 if (jj_scan_token(1)) return true; 504 return false; 505 } 506 507 static final private boolean jj_3_2() { 508 Token xsp; 509 xsp = jj_scanpos; 510 if (jj_3_3()) { 511 jj_scanpos = xsp; 512 if (jj_3_4()) return true; 513 } 514 return false; 515 } 516 517 static final private boolean jj_3R_6() { 518 Token xsp; 519 xsp = jj_scanpos; 520 if (jj_3_15()) { 521 jj_scanpos = xsp; 522 if (jj_3_16()) { 523 jj_scanpos = xsp; 524 if (jj_3_17()) return true; 525 } 526 } 527 return false; 528 } 529 530 static final private boolean jj_3_15() { 531 if (jj_scan_token(4)) return true; 532 if (jj_3R_7()) return true; 533 return false; 534 } 535 536 static final private boolean jj_3R_3() { 537 Token xsp; 538 xsp = jj_scanpos; 539 if (jj_3_7()) { 540 jj_scanpos = xsp; 541 if (jj_3_8()) { 542 jj_scanpos = xsp; 543 if (jj_3_9()) return true; 544 } 545 } 546 return false; 547 } 548 549 static final private boolean jj_3_26() { 550 if (jj_scan_token(8)) return true; 551 if (jj_3R_2()) return true; 552 if (jj_scan_token(9)) return true; 553 return false; 554 } 555 556 static final private boolean jj_3_7() { 557 if (jj_3R_4()) return true; 558 if (jj_scan_token(3)) return true; 559 if (jj_3R_3()) return true; 560 return false; 561 } 562 563 static final private boolean jj_3_25() { 564 if (jj_scan_token(ONEARGFUNCTION)) return true; 565 if (jj_scan_token(8)) return true; 566 if (jj_3R_2()) return true; 567 if (jj_scan_token(9)) return true; 568 return false; 569 } 570 571 static final private boolean jj_3_24() { 572 if (jj_scan_token(IUNIT)) return true; 573 return false; 574 } 575 576 static final private boolean jj_3_14() { 577 if (jj_3R_6()) return true; 578 return false; 579 } 580 581 static final private boolean jj_3_6() { 582 if (jj_3R_4()) return true; 583 return false; 584 } 585 586 static final private boolean jj_3_23() { 587 if (jj_scan_token(PI)) return true; 588 return false; 589 } 590 591 static final private boolean jj_3R_2() { 592 Token xsp; 593 xsp = jj_scanpos; 594 if (jj_3_5()) { 595 jj_scanpos = xsp; 596 if (jj_3_6()) return true; 597 } 598 return false; 599 } 600 601 static final private boolean jj_3_5() { 602 if (jj_3R_3()) return true; 603 return false; 604 } 605 606 static final private boolean jj_3_13() { 607 if (jj_3R_6()) return true; 608 if (jj_scan_token(6)) return true; 609 if (jj_3R_5()) return true; 610 return false; 611 } 612 613 static final private boolean jj_3R_5() { 614 Token xsp; 615 xsp = jj_scanpos; 616 if (jj_3_12()) { 617 jj_scanpos = xsp; 618 if (jj_3_13()) { 619 jj_scanpos = xsp; 620 if (jj_3_14()) return true; 621 } 622 } 623 return false; 624 } 625 626 static final private boolean jj_3_22() { 627 if (jj_scan_token(IDENTIFIER)) return true; 628 return false; 629 } 630 631 static final private boolean jj_3_1() { 632 if (jj_3R_2()) return true; 633 return false; 634 } 635 636 static final private boolean jj_3_12() { 637 if (jj_3R_6()) return true; 638 if (jj_scan_token(5)) return true; 639 if (jj_3R_5()) return true; 640 return false; 641 } 642 643 static final private boolean jj_3_21() { 644 if (jj_scan_token(INUM)) return true; 645 return false; 646 } 647 648 static final private boolean jj_3R_8() { 649 Token xsp; 650 xsp = jj_scanpos; 651 if (jj_3_20()) { 652 jj_scanpos = xsp; 653 if (jj_3_21()) { 654 jj_scanpos = xsp; 655 if (jj_3_22()) { 656 jj_scanpos = xsp; 657 if (jj_3_23()) { 658 jj_scanpos = xsp; 659 if (jj_3_24()) { 660 jj_scanpos = xsp; 661 if (jj_3_25()) { 662 jj_scanpos = xsp; 663 if (jj_3_26()) return true; 664 } 665 } 666 } 667 } 668 } 669 } 670 return false; 671 } 672 673 static final private boolean jj_3_20() { 674 if (jj_scan_token(DNUM)) return true; 675 return false; 676 } 677 678 static private boolean jj_initialized_once = false; 679 static public ExpressionParserTokenManager token_source; 680 static SimpleCharStream jj_input_stream; 681 static public Token token, jj_nt; 682 static private int jj_ntk; 683 static private Token jj_scanpos, jj_lastpos; 684 static private int jj_la; 685 static public boolean lookingAhead = false; 686 static private boolean jj_semLA; 687 static private int jj_gen; 688 static final private int[] jj_la1 = new int[0]; 689 static private int[] jj_la1_0; 690 static { 691 jj_la1_0(); 692 } 693 private static void jj_la1_0() { 694 jj_la1_0 = new int[] {}; 695 } 696 static final private JJCalls[] jj_2_rtns = new JJCalls[26]; 697 static private boolean jj_rescan = false; 698 static private int jj_gc = 0; 699 700 public ExpressionParser(java.io.InputStream stream) { 701 if (jj_initialized_once) { 702 System.out.println("ERROR: Second call to constructor of static parser. You must"); 703 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false"); 704 System.out.println(" during parser generation."); 705 throw new Error (); 706 } 707 jj_initialized_once = true; 708 jj_input_stream = new SimpleCharStream(stream, 1, 1); 709 token_source = new ExpressionParserTokenManager(jj_input_stream); 710 token = new Token(); 711 jj_ntk = -1; 712 jj_gen = 0; 713 for (int i = 0; i < 0; i++) jj_la1[i] = -1; 714 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 715 } 716 717 static public void ReInit(java.io.InputStream stream) { 718 jj_input_stream.ReInit(stream, 1, 1); 719 token_source.ReInit(jj_input_stream); 720 token = new Token(); 721 jj_ntk = -1; 722 jj_gen = 0; 723 for (int i = 0; i < 0; i++) jj_la1[i] = -1; 724 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 725 } 726 727 public ExpressionParser(java.io.Reader stream) { 728 if (jj_initialized_once) { 729 System.out.println("ERROR: Second call to constructor of static parser. You must"); 730 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false"); 731 System.out.println(" during parser generation."); 732 throw new Error (); 733 } 734 jj_initialized_once = true; 735 jj_input_stream = new SimpleCharStream(stream, 1, 1); 736 token_source = new ExpressionParserTokenManager(jj_input_stream); 737 token = new Token(); 738 jj_ntk = -1; 739 jj_gen = 0; 740 for (int i = 0; i < 0; i++) jj_la1[i] = -1; 741 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 742 } 743 744 static public void ReInit(java.io.Reader stream) { 745 jj_input_stream.ReInit(stream, 1, 1); 746 token_source.ReInit(jj_input_stream); 747 token = new Token(); 748 jj_ntk = -1; 749 jj_gen = 0; 750 for (int i = 0; i < 0; i++) jj_la1[i] = -1; 751 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 752 } 753 754 public ExpressionParser(ExpressionParserTokenManager tm) { 755 if (jj_initialized_once) { 756 System.out.println("ERROR: Second call to constructor of static parser. You must"); 757 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false"); 758 System.out.println(" during parser generation."); 759 throw new Error (); 760 } 761 jj_initialized_once = true; 762 token_source = tm; 763 token = new Token(); 764 jj_ntk = -1; 765 jj_gen = 0; 766 for (int i = 0; i < 0; i++) jj_la1[i] = -1; 767 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 768 } 769 770 public void ReInit(ExpressionParserTokenManager tm) { 771 token_source = tm; 772 token = new Token(); 773 jj_ntk = -1; 774 jj_gen = 0; 775 for (int i = 0; i < 0; i++) jj_la1[i] = -1; 776 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 777 } 778 779 static final private Token jj_consume_token(int kind) throws ParseException { 780 Token oldToken; 781 if ((oldToken = token).next != null) token = token.next; 782 else token = token.next = token_source.getNextToken(); 783 jj_ntk = -1; 784 if (token.kind == kind) { 785 jj_gen++; 786 if (++jj_gc > 100) { 787 jj_gc = 0; 788 for (int i = 0; i < jj_2_rtns.length; i++) { 789 JJCalls c = jj_2_rtns[i]; 790 while (c != null) { 791 if (c.gen < jj_gen) c.first = null; 792 c = c.next; 793 } 794 } 795 } 796 return token; 797 } 798 token = oldToken; 799 jj_kind = kind; 800 throw generateParseException(); 801 } 802 803 static private final class LookaheadSuccess extends java.lang.Error { } 804 static final private LookaheadSuccess jj_ls = new LookaheadSuccess(); 805 static final private boolean jj_scan_token(int kind) { 806 if (jj_scanpos == jj_lastpos) { 807 jj_la--; 808 if (jj_scanpos.next == null) { 809 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); 810 } else { 811 jj_lastpos = jj_scanpos = jj_scanpos.next; 812 } 813 } else { 814 jj_scanpos = jj_scanpos.next; 815 } 816 if (jj_rescan) { 817 int i = 0; Token tok = token; 818 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } 819 if (tok != null) jj_add_error_token(kind, i); 820 } 821 if (jj_scanpos.kind != kind) return true; 822 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; 823 return false; 824 } 825 826 static final public Token getNextToken() { 827 if (token.next != null) token = token.next; 828 else token = token.next = token_source.getNextToken(); 829 jj_ntk = -1; 830 jj_gen++; 831 return token; 832 } 833 834 static final public Token getToken(int index) { 835 Token t = lookingAhead ? jj_scanpos : token; 836 for (int i = 0; i < index; i++) { 837 if (t.next != null) t = t.next; 838 else t = t.next = token_source.getNextToken(); 839 } 840 return t; 841 } 842 843 static final private int jj_ntk() { 844 if ((jj_nt=token.next) == null) 845 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 846 else 847 return (jj_ntk = jj_nt.kind); 848 } 849 850 static private java.util.Vector jj_expentries = new java.util.Vector (); 851 static private int[] jj_expentry; 852 static private int jj_kind = -1; 853 static private int[] jj_lasttokens = new int[100]; 854 static private int jj_endpos; 855 856 static private void jj_add_error_token(int kind, int pos) { 857 if (pos >= 100) return; 858 if (pos == jj_endpos + 1) { 859 jj_lasttokens[jj_endpos++] = kind; 860 } else if (jj_endpos != 0) { 861 jj_expentry = new int[jj_endpos]; 862 for (int i = 0; i < jj_endpos; i++) { 863 jj_expentry[i] = jj_lasttokens[i]; 864 } 865 boolean exists = false; 866 for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { 867 int[] oldentry = (int[])(e.nextElement()); 868 if (oldentry.length == jj_expentry.length) { 869 exists = true; 870 for (int i = 0; i < jj_expentry.length; i++) { 871 if (oldentry[i] != jj_expentry[i]) { 872 exists = false; 873 break; 874 } 875 } 876 if (exists) break; 877 } 878 } 879 if (!exists) jj_expentries.addElement(jj_expentry); 880 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; 881 } 882 } 883 884 static public ParseException generateParseException() { 885 jj_expentries.removeAllElements(); 886 boolean[] la1tokens = new boolean[19]; 887 for (int i = 0; i < 19; i++) { 888 la1tokens[i] = false; 889 } 890 if (jj_kind >= 0) { 891 la1tokens[jj_kind] = true; 892 jj_kind = -1; 893 } 894 for (int i = 0; i < 0; i++) { 895 if (jj_la1[i] == jj_gen) { 896 for (int j = 0; j < 32; j++) { 897 if ((jj_la1_0[i] & (1<<j)) != 0) { 898 la1tokens[j] = true; 899 } 900 } 901 } 902 } 903 for (int i = 0; i < 19; i++) { 904 if (la1tokens[i]) { 905 jj_expentry = new int[1]; 906 jj_expentry[0] = i; 907 jj_expentries.addElement(jj_expentry); 908 } 909 } 910 jj_endpos = 0; 911 jj_rescan_token(); 912 jj_add_error_token(0, 0); 913 int[][] exptokseq = new int[jj_expentries.size()][]; 914 for (int i = 0; i < jj_expentries.size(); i++) { 915 exptokseq[i] = (int[])jj_expentries.elementAt(i); 916 } 917 return new ParseException(token, exptokseq, tokenImage); 918 } 919 920 static final public void enable_tracing() { 921 } 922 923 static final public void disable_tracing() { 924 } 925 926 static final private void jj_rescan_token() { 927 jj_rescan = true; 928 for (int i = 0; i < 26; i++) { 929 JJCalls p = jj_2_rtns[i]; 930 do { 931 if (p.gen > jj_gen) { 932 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; 933 switch (i) { 934 case 0: jj_3_1(); break; 935 case 1: jj_3_2(); break; 936 case 2: jj_3_3(); break; 937 case 3: jj_3_4(); break; 938 case 4: jj_3_5(); break; 939 case 5: jj_3_6(); break; 940 case 6: jj_3_7(); break; 941 case 7: jj_3_8(); break; 942 case 8: jj_3_9(); break; 943 case 9: jj_3_10(); break; 944 case 10: jj_3_11(); break; 945 case 11: jj_3_12(); break; 946 case 12: jj_3_13(); break; 947 case 13: jj_3_14(); break; 948 case 14: jj_3_15(); break; 949 case 15: jj_3_16(); break; 950 case 16: jj_3_17(); break; 951 case 17: jj_3_18(); break; 952 case 18: jj_3_19(); break; 953 case 19: jj_3_20(); break; 954 case 20: jj_3_21(); break; 955 case 21: jj_3_22(); break; 956 case 22: jj_3_23(); break; 957 case 23: jj_3_24(); break; 958 case 24: jj_3_25(); break; 959 case 25: jj_3_26(); break; 960 } 961 } 962 p = p.next; 963 } while (p != null); 964 } 965 jj_rescan = false; 966 } 967 968 static final private void jj_save(int index, int xla) { 969 JJCalls p = jj_2_rtns[index]; 970 while (p.gen > jj_gen) { 971 if (p.next == null) { p = p.next = new JJCalls(); break; } 972 p = p.next; 973 } 974 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; 975 } 976 977 static final class JJCalls { 978 int gen; 979 Token first; 980 int arg; 981 JJCalls next; 982 } 983 984 } 985 | Popular Tags |