001/** 002 * Copyright (C) 2007 - 2016, Jens Lehmann 003 * 004 * This file is part of DL-Learner. 005 * 006 * DL-Learner is free software; you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation; either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * DL-Learner is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with this program. If not, see <http://www.gnu.org/licenses/>. 018 */ 019/* Generated By:JavaCC: Do not edit this line. PrologParser.java */ 020package org.dllearner.parser; 021 022@SuppressWarnings("all") 023public class PrologParser implements PrologParserConstants { 024 public PrologParser() { 025 this(new java.io.StringReader("")); 026 } 027 028 public org.dllearner.prolog.Term parseTerm(String src) throws ParseException { 029 reinitToString(src); 030 return term(); 031 } 032 033 public java.util.ArrayList parseTermList(String src) throws ParseException { 034 reinitToString(src); 035 return termList(); 036 } 037 038 public org.dllearner.prolog.Atom parseAtom(String src) throws ParseException { 039 reinitToString(src); 040 return atom(); 041 } 042 043 public org.dllearner.prolog.Clause parseClause(String src) throws ParseException { 044 reinitToString(src); 045 return clause(); 046 } 047 048 public org.dllearner.prolog.Program parseProgram(String src) throws ParseException { 049 reinitToString(src); 050 return program(); 051 } 052 053 private void reinitToString(String src) { 054 ReInit(new java.io.StringReader(src)); 055 } 056 057////////////////////////////////////////////////////////////////////////////////////////// 058 final public org.dllearner.prolog.Program program() throws ParseException { 059 org.dllearner.prolog.Program p = new org.dllearner.prolog.Program(); 060 org.dllearner.prolog.Clause c; 061 label_1: 062 while (true) { 063 c = clause(); 064 p.addClause(c); 065 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 066 case IDENTIFIER: 067 ; 068 break; 069 default: 070 jj_la1[0] = jj_gen; 071 break label_1; 072 } 073 } 074 jj_consume_token(0); 075 {if (true) return p;} 076 throw new Error("Missing return statement in function"); 077 } 078 079 final public org.dllearner.prolog.Clause clause() throws ParseException { 080 org.dllearner.prolog.Atom head; 081 org.dllearner.prolog.Body body = null; 082 head = atom(); 083 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 084 case 19: 085 jj_consume_token(19); 086 body = body(); 087 break; 088 default: 089 jj_la1[1] = jj_gen; 090 ; 091 } 092 jj_consume_token(20); 093 {if (true) return new org.dllearner.prolog.Clause(head, body);} 094 throw new Error("Missing return statement in function"); 095 } 096 097 final public org.dllearner.prolog.Body body() throws ParseException { 098 org.dllearner.prolog.Literal l; 099 org.dllearner.prolog.Body b = new org.dllearner.prolog.Body(); 100 l = literal(); 101 b.addLiteral(l); 102 label_2: 103 while (true) { 104 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 105 case 21: 106 ; 107 break; 108 default: 109 jj_la1[2] = jj_gen; 110 break label_2; 111 } 112 jj_consume_token(21); 113 l = literal(); 114 b.addLiteral(l); 115 } 116 {if (true) return b;} 117 throw new Error("Missing return statement in function"); 118 } 119 120 final public org.dllearner.prolog.Atom atom() throws ParseException { 121 Token atom; 122 java.util.ArrayList arguments = new java.util.ArrayList() ; 123 atom = jj_consume_token(IDENTIFIER); 124 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 125 case 22: 126 jj_consume_token(22); 127 arguments = termList(); 128 jj_consume_token(23); 129 break; 130 default: 131 jj_la1[3] = jj_gen; 132 ; 133 } 134 {if (true) return new org.dllearner.prolog.Atom(atom.image, arguments);} 135 throw new Error("Missing return statement in function"); 136 } 137 138 final public org.dllearner.prolog.Literal literal() throws ParseException { 139 org.dllearner.prolog.Atom a; 140 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 141 case IDENTIFIER: 142 a = atom(); 143 {if (true) return new org.dllearner.prolog.Literal(a, true);} 144 break; 145 case NOT: 146 jj_consume_token(NOT); 147 a = atom(); 148 {if (true) return new org.dllearner.prolog.Literal(a, false);} 149 break; 150 default: 151 jj_la1[4] = jj_gen; 152 jj_consume_token(-1); 153 throw new ParseException(); 154 } 155 throw new Error("Missing return statement in function"); 156 } 157 158 final public org.dllearner.prolog.Term term() throws ParseException { 159 Token v; 160 String o; 161 Token f; 162 java.util.ArrayList arguments = null; 163 org.dllearner.prolog.Term t1, t2; 164 if (jj_2_1(2147483647)) { 165 o = prefixOp(); 166 t2 = simpleTerm(); 167 {if (true) return new org.dllearner.prolog.Function(o, t2);} 168 } else if (jj_2_2(2147483647)) { 169 t1 = simpleTerm(); 170 o = infixOp(); 171 t2 = simpleTerm(); 172 {if (true) return new org.dllearner.prolog.Function(t1, o, t2);} 173 } else if (jj_2_3(2147483647)) { 174 t1 = simpleTerm(); 175 o = postfixOp(); 176 {if (true) return new org.dllearner.prolog.Function(t1, o);} 177 } else if (jj_2_4(2147483647)) { 178 t1 = simpleTerm(); 179 {if (true) return t1;} 180 } else { 181 jj_consume_token(-1); 182 throw new ParseException(); 183 } 184 throw new Error("Missing return statement in function"); 185 } 186 187 final public org.dllearner.prolog.Term simpleTerm() throws ParseException { 188 Token v; 189 String o; 190 Token f; 191 java.util.ArrayList arguments = null; 192 org.dllearner.prolog.Term l; 193 org.dllearner.prolog.Number n; 194 if (jj_2_5(2)) { 195 f = jj_consume_token(IDENTIFIER); 196 jj_consume_token(22); 197 arguments = termList(); 198 jj_consume_token(23); 199 {if (true) return new org.dllearner.prolog.Function(f.image, arguments);} 200 } else if (jj_2_6(2)) { 201 f = jj_consume_token(IDENTIFIER); 202 {if (true) return new org.dllearner.prolog.PrologConstant(f.image);} 203 } else { 204 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 205 case VAR: 206 v = jj_consume_token(VAR); 207 {if (true) return new org.dllearner.prolog.Variable(v.image);} 208 break; 209 case DOUBLE: 210 v = jj_consume_token(DOUBLE); 211 {if (true) return new org.dllearner.prolog.Number(v.image);} 212 break; 213 case STRINGCONSTANT: 214 v = jj_consume_token(STRINGCONSTANT); 215 {if (true) return new org.dllearner.prolog.StringConstant(v.image);} 216 break; 217 case 24: 218 case 25: 219 l = list(); 220 {if (true) return l;} 221 break; 222 default: 223 jj_la1[5] = jj_gen; 224 jj_consume_token(-1); 225 throw new ParseException(); 226 } 227 } 228 throw new Error("Missing return statement in function"); 229 } 230 231 final public String prefixOp() throws ParseException { 232 Token f; 233 f = jj_consume_token(OPERATOR); 234 {if (true) return f.image;} 235 throw new Error("Missing return statement in function"); 236 } 237 238 final public String infixOp() throws ParseException { 239 Token f; 240 f = jj_consume_token(OPERATOR); 241 {if (true) return f.image;} 242 throw new Error("Missing return statement in function"); 243 } 244 245 final public String postfixOp() throws ParseException { 246 Token f; 247 f = jj_consume_token(OPERATOR); 248 {if (true) return f.image;} 249 throw new Error("Missing return statement in function"); 250 } 251 252 final public java.util.ArrayList termList() throws ParseException { 253 org.dllearner.prolog.Term t; 254 java.util.ArrayList l = new java.util.ArrayList(); 255 t = term(); 256 l.add(t); 257 label_3: 258 while (true) { 259 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 260 case 21: 261 ; 262 break; 263 default: 264 jj_la1[6] = jj_gen; 265 break label_3; 266 } 267 jj_consume_token(21); 268 t = term(); 269 l.add(t); 270 } 271 {if (true) return l;} 272 throw new Error("Missing return statement in function"); 273 } 274 275 final public org.dllearner.prolog.List list() throws ParseException { 276 java.util.ArrayList content = null; 277 org.dllearner.prolog.Term head, tmp; 278 org.dllearner.prolog.List l; 279 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 280 case 24: 281 jj_consume_token(24); 282 {if (true) return new org.dllearner.prolog.List();} 283 break; 284 default: 285 jj_la1[7] = jj_gen; 286 if (jj_2_8(3)) { 287 jj_consume_token(25); 288 head = term(); 289 jj_consume_token(26); 290 {if (true) return new org.dllearner.prolog.List(head, null);} 291 } else if (jj_2_9(3)) { 292 jj_consume_token(25); 293 head = term(); 294 jj_consume_token(27); 295 l = list(); 296 jj_consume_token(26); 297 {if (true) return new org.dllearner.prolog.List(head, l);} 298 } else { 299 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 300 case 25: 301 content = new java.util.ArrayList(); 302 jj_consume_token(25); 303 label_4: 304 while (true) { 305 if (jj_2_7(2)) { 306 ; 307 } else { 308 break label_4; 309 } 310 tmp = term(); 311 content.add(tmp); 312 jj_consume_token(21); 313 } 314 tmp = term(); 315 content.add(tmp); 316 jj_consume_token(26); 317 {if (true) return org.dllearner.prolog.List.compose(content);} 318 break; 319 default: 320 jj_la1[8] = jj_gen; 321 jj_consume_token(-1); 322 throw new ParseException(); 323 } 324 } 325 } 326 throw new Error("Missing return statement in function"); 327 } 328 329 private boolean jj_2_1(int xla) { 330 jj_la = xla; jj_lastpos = jj_scanpos = token; 331 try { return !jj_3_1(); } 332 catch(LookaheadSuccess ls) { return true; } 333 finally { jj_save(0, xla); } 334 } 335 336 private boolean jj_2_2(int xla) { 337 jj_la = xla; jj_lastpos = jj_scanpos = token; 338 try { return !jj_3_2(); } 339 catch(LookaheadSuccess ls) { return true; } 340 finally { jj_save(1, xla); } 341 } 342 343 private boolean jj_2_3(int xla) { 344 jj_la = xla; jj_lastpos = jj_scanpos = token; 345 try { return !jj_3_3(); } 346 catch(LookaheadSuccess ls) { return true; } 347 finally { jj_save(2, xla); } 348 } 349 350 private boolean jj_2_4(int xla) { 351 jj_la = xla; jj_lastpos = jj_scanpos = token; 352 try { return !jj_3_4(); } 353 catch(LookaheadSuccess ls) { return true; } 354 finally { jj_save(3, xla); } 355 } 356 357 private boolean jj_2_5(int xla) { 358 jj_la = xla; jj_lastpos = jj_scanpos = token; 359 try { return !jj_3_5(); } 360 catch(LookaheadSuccess ls) { return true; } 361 finally { jj_save(4, xla); } 362 } 363 364 private boolean jj_2_6(int xla) { 365 jj_la = xla; jj_lastpos = jj_scanpos = token; 366 try { return !jj_3_6(); } 367 catch(LookaheadSuccess ls) { return true; } 368 finally { jj_save(5, xla); } 369 } 370 371 private boolean jj_2_7(int xla) { 372 jj_la = xla; jj_lastpos = jj_scanpos = token; 373 try { return !jj_3_7(); } 374 catch(LookaheadSuccess ls) { return true; } 375 finally { jj_save(6, xla); } 376 } 377 378 private boolean jj_2_8(int xla) { 379 jj_la = xla; jj_lastpos = jj_scanpos = token; 380 try { return !jj_3_8(); } 381 catch(LookaheadSuccess ls) { return true; } 382 finally { jj_save(7, xla); } 383 } 384 385 private boolean jj_2_9(int xla) { 386 jj_la = xla; jj_lastpos = jj_scanpos = token; 387 try { return !jj_3_9(); } 388 catch(LookaheadSuccess ls) { return true; } 389 finally { jj_save(8, xla); } 390 } 391 392 private boolean jj_3R_5() { 393 if (jj_scan_token(OPERATOR)) return true; 394 return false; 395 } 396 397 private boolean jj_3_7() { 398 if (jj_3R_9()) return true; 399 if (jj_scan_token(21)) return true; 400 return false; 401 } 402 403 private boolean jj_3R_13() { 404 if (jj_3R_15()) return true; 405 return false; 406 } 407 408 private boolean jj_3R_12() { 409 if (jj_scan_token(STRINGCONSTANT)) return true; 410 return false; 411 } 412 413 private boolean jj_3R_11() { 414 if (jj_scan_token(DOUBLE)) return true; 415 return false; 416 } 417 418 private boolean jj_3R_10() { 419 if (jj_scan_token(VAR)) return true; 420 return false; 421 } 422 423 private boolean jj_3_6() { 424 if (jj_scan_token(IDENTIFIER)) return true; 425 return false; 426 } 427 428 private boolean jj_3R_18() { 429 if (jj_scan_token(25)) return true; 430 Token xsp; 431 while (true) { 432 xsp = jj_scanpos; 433 if (jj_3_7()) { jj_scanpos = xsp; break; } 434 } 435 if (jj_3R_9()) return true; 436 if (jj_scan_token(26)) return true; 437 return false; 438 } 439 440 private boolean jj_3_5() { 441 if (jj_scan_token(IDENTIFIER)) return true; 442 if (jj_scan_token(22)) return true; 443 if (jj_3R_14()) return true; 444 if (jj_scan_token(23)) return true; 445 return false; 446 } 447 448 private boolean jj_3R_6() { 449 Token xsp; 450 xsp = jj_scanpos; 451 if (jj_3_5()) { 452 jj_scanpos = xsp; 453 if (jj_3_6()) { 454 jj_scanpos = xsp; 455 if (jj_3R_10()) { 456 jj_scanpos = xsp; 457 if (jj_3R_11()) { 458 jj_scanpos = xsp; 459 if (jj_3R_12()) { 460 jj_scanpos = xsp; 461 if (jj_3R_13()) return true; 462 } 463 } 464 } 465 } 466 } 467 return false; 468 } 469 470 private boolean jj_3_9() { 471 if (jj_scan_token(25)) return true; 472 if (jj_3R_9()) return true; 473 if (jj_scan_token(27)) return true; 474 if (jj_3R_15()) return true; 475 if (jj_scan_token(26)) return true; 476 return false; 477 } 478 479 private boolean jj_3_8() { 480 if (jj_scan_token(25)) return true; 481 if (jj_3R_9()) return true; 482 if (jj_scan_token(26)) return true; 483 return false; 484 } 485 486 private boolean jj_3R_17() { 487 if (jj_scan_token(24)) return true; 488 return false; 489 } 490 491 private boolean jj_3R_15() { 492 Token xsp; 493 xsp = jj_scanpos; 494 if (jj_3R_17()) { 495 jj_scanpos = xsp; 496 if (jj_3_8()) { 497 jj_scanpos = xsp; 498 if (jj_3_9()) { 499 jj_scanpos = xsp; 500 if (jj_3R_18()) return true; 501 } 502 } 503 } 504 return false; 505 } 506 507 private boolean jj_3_4() { 508 if (jj_3R_6()) return true; 509 return false; 510 } 511 512 private boolean jj_3R_16() { 513 if (jj_scan_token(21)) return true; 514 if (jj_3R_9()) return true; 515 return false; 516 } 517 518 private boolean jj_3_3() { 519 if (jj_3R_6()) return true; 520 if (jj_3R_8()) return true; 521 return false; 522 } 523 524 private boolean jj_3_2() { 525 if (jj_3R_6()) return true; 526 if (jj_3R_7()) return true; 527 if (jj_3R_6()) return true; 528 return false; 529 } 530 531 private boolean jj_3R_14() { 532 if (jj_3R_9()) return true; 533 Token xsp; 534 while (true) { 535 xsp = jj_scanpos; 536 if (jj_3R_16()) { jj_scanpos = xsp; break; } 537 } 538 return false; 539 } 540 541 private boolean jj_3_1() { 542 if (jj_3R_5()) return true; 543 if (jj_3R_6()) return true; 544 return false; 545 } 546 547 private boolean jj_3R_9() { 548 Token xsp; 549 xsp = jj_scanpos; 550 if (jj_3_1()) { 551 jj_scanpos = xsp; 552 if (jj_3_2()) { 553 jj_scanpos = xsp; 554 if (jj_3_3()) { 555 jj_scanpos = xsp; 556 if (jj_3_4()) return true; 557 } 558 } 559 } 560 return false; 561 } 562 563 private boolean jj_3R_8() { 564 if (jj_scan_token(OPERATOR)) return true; 565 return false; 566 } 567 568 private boolean jj_3R_7() { 569 if (jj_scan_token(OPERATOR)) return true; 570 return false; 571 } 572 573 /** Generated Token Manager. */ 574 public PrologParserTokenManager token_source; 575 SimpleCharStream jj_input_stream; 576 /** Current token. */ 577 public Token token; 578 /** Next token. */ 579 public Token jj_nt; 580 private int jj_ntk; 581 private Token jj_scanpos, jj_lastpos; 582 private int jj_la; 583 private int jj_gen; 584 final private int[] jj_la1 = new int[9]; 585 static private int[] jj_la1_0; 586 static { 587 jj_la1_init_0(); 588 } 589 private static void jj_la1_init_0() { 590 jj_la1_0 = new int[] {0x2000,0x80000,0x200000,0x400000,0x2080,0x3001900,0x200000,0x1000000,0x2000000,}; 591 } 592 final private JJCalls[] jj_2_rtns = new JJCalls[9]; 593 private boolean jj_rescan = false; 594 private int jj_gc = 0; 595 596 /** Constructor with InputStream. */ 597 public PrologParser(java.io.InputStream stream) { 598 this(stream, null); 599 } 600 /** Constructor with InputStream and supplied encoding */ 601 public PrologParser(java.io.InputStream stream, String encoding) { 602 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 603 token_source = new PrologParserTokenManager(jj_input_stream); 604 token = new Token(); 605 jj_ntk = -1; 606 jj_gen = 0; 607 for (int i = 0; i < 9; i++) jj_la1[i] = -1; 608 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 609 } 610 611 /** Reinitialise. */ 612 public void ReInit(java.io.InputStream stream) { 613 ReInit(stream, null); 614 } 615 /** Reinitialise. */ 616 public void ReInit(java.io.InputStream stream, String encoding) { 617 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); } 618 token_source.ReInit(jj_input_stream); 619 token = new Token(); 620 jj_ntk = -1; 621 jj_gen = 0; 622 for (int i = 0; i < 9; i++) jj_la1[i] = -1; 623 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 624 } 625 626 /** Constructor. */ 627 public PrologParser(java.io.Reader stream) { 628 jj_input_stream = new SimpleCharStream(stream, 1, 1); 629 token_source = new PrologParserTokenManager(jj_input_stream); 630 token = new Token(); 631 jj_ntk = -1; 632 jj_gen = 0; 633 for (int i = 0; i < 9; i++) jj_la1[i] = -1; 634 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 635 } 636 637 /** Reinitialise. */ 638 public void ReInit(java.io.Reader stream) { 639 jj_input_stream.ReInit(stream, 1, 1); 640 token_source.ReInit(jj_input_stream); 641 token = new Token(); 642 jj_ntk = -1; 643 jj_gen = 0; 644 for (int i = 0; i < 9; i++) jj_la1[i] = -1; 645 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 646 } 647 648 /** Constructor with generated Token Manager. */ 649 public PrologParser(PrologParserTokenManager tm) { 650 token_source = tm; 651 token = new Token(); 652 jj_ntk = -1; 653 jj_gen = 0; 654 for (int i = 0; i < 9; i++) jj_la1[i] = -1; 655 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 656 } 657 658 /** Reinitialise. */ 659 public void ReInit(PrologParserTokenManager tm) { 660 token_source = tm; 661 token = new Token(); 662 jj_ntk = -1; 663 jj_gen = 0; 664 for (int i = 0; i < 9; i++) jj_la1[i] = -1; 665 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); 666 } 667 668 private Token jj_consume_token(int kind) throws ParseException { 669 Token oldToken; 670 if ((oldToken = token).next != null) token = token.next; 671 else token = token.next = token_source.getNextToken(); 672 jj_ntk = -1; 673 if (token.kind == kind) { 674 jj_gen++; 675 if (++jj_gc > 100) { 676 jj_gc = 0; 677 for (int i = 0; i < jj_2_rtns.length; i++) { 678 JJCalls c = jj_2_rtns[i]; 679 while (c != null) { 680 if (c.gen < jj_gen) c.first = null; 681 c = c.next; 682 } 683 } 684 } 685 return token; 686 } 687 token = oldToken; 688 jj_kind = kind; 689 throw generateParseException(); 690 } 691 692 static private final class LookaheadSuccess extends java.lang.Error { } 693 final private LookaheadSuccess jj_ls = new LookaheadSuccess(); 694 private boolean jj_scan_token(int kind) { 695 if (jj_scanpos == jj_lastpos) { 696 jj_la--; 697 if (jj_scanpos.next == null) { 698 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); 699 } else { 700 jj_lastpos = jj_scanpos = jj_scanpos.next; 701 } 702 } else { 703 jj_scanpos = jj_scanpos.next; 704 } 705 if (jj_rescan) { 706 int i = 0; Token tok = token; 707 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } 708 if (tok != null) jj_add_error_token(kind, i); 709 } 710 if (jj_scanpos.kind != kind) return true; 711 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; 712 return false; 713 } 714 715/** Get the next Token. */ 716 final public Token getNextToken() { 717 if (token.next != null) token = token.next; 718 else token = token.next = token_source.getNextToken(); 719 jj_ntk = -1; 720 jj_gen++; 721 return token; 722 } 723 724/** Get the specific Token. */ 725 final public Token getToken(int index) { 726 Token t = token; 727 for (int i = 0; i < index; i++) { 728 if (t.next != null) t = t.next; 729 else t = t.next = token_source.getNextToken(); 730 } 731 return t; 732 } 733 734 private int jj_ntk() { 735 if ((jj_nt=token.next) == null) 736 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 737 else 738 return (jj_ntk = jj_nt.kind); 739 } 740 741 private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>(); 742 private int[] jj_expentry; 743 private int jj_kind = -1; 744 private int[] jj_lasttokens = new int[100]; 745 private int jj_endpos; 746 747 private void jj_add_error_token(int kind, int pos) { 748 if (pos >= 100) return; 749 if (pos == jj_endpos + 1) { 750 jj_lasttokens[jj_endpos++] = kind; 751 } else if (jj_endpos != 0) { 752 jj_expentry = new int[jj_endpos]; 753 for (int i = 0; i < jj_endpos; i++) { 754 jj_expentry[i] = jj_lasttokens[i]; 755 } 756 jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) { 757 int[] oldentry = (int[])(it.next()); 758 if (oldentry.length == jj_expentry.length) { 759 for (int i = 0; i < jj_expentry.length; i++) { 760 if (oldentry[i] != jj_expentry[i]) { 761 continue jj_entries_loop; 762 } 763 } 764 jj_expentries.add(jj_expentry); 765 break jj_entries_loop; 766 } 767 } 768 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; 769 } 770 } 771 772 /** Generate ParseException. */ 773 public ParseException generateParseException() { 774 jj_expentries.clear(); 775 boolean[] la1tokens = new boolean[28]; 776 if (jj_kind >= 0) { 777 la1tokens[jj_kind] = true; 778 jj_kind = -1; 779 } 780 for (int i = 0; i < 9; i++) { 781 if (jj_la1[i] == jj_gen) { 782 for (int j = 0; j < 32; j++) { 783 if ((jj_la1_0[i] & (1<<j)) != 0) { 784 la1tokens[j] = true; 785 } 786 } 787 } 788 } 789 for (int i = 0; i < 28; i++) { 790 if (la1tokens[i]) { 791 jj_expentry = new int[1]; 792 jj_expentry[0] = i; 793 jj_expentries.add(jj_expentry); 794 } 795 } 796 jj_endpos = 0; 797 jj_rescan_token(); 798 jj_add_error_token(0, 0); 799 int[][] exptokseq = new int[jj_expentries.size()][]; 800 for (int i = 0; i < jj_expentries.size(); i++) { 801 exptokseq[i] = jj_expentries.get(i); 802 } 803 return new ParseException(token, exptokseq, tokenImage); 804 } 805 806 /** Enable tracing. */ 807 final public void enable_tracing() { 808 } 809 810 /** Disable tracing. */ 811 final public void disable_tracing() { 812 } 813 814 private void jj_rescan_token() { 815 jj_rescan = true; 816 for (int i = 0; i < 9; i++) { 817 try { 818 JJCalls p = jj_2_rtns[i]; 819 do { 820 if (p.gen > jj_gen) { 821 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; 822 switch (i) { 823 case 0: jj_3_1(); break; 824 case 1: jj_3_2(); break; 825 case 2: jj_3_3(); break; 826 case 3: jj_3_4(); break; 827 case 4: jj_3_5(); break; 828 case 5: jj_3_6(); break; 829 case 6: jj_3_7(); break; 830 case 7: jj_3_8(); break; 831 case 8: jj_3_9(); break; 832 } 833 } 834 p = p.next; 835 } while (p != null); 836 } catch(LookaheadSuccess ls) { } 837 } 838 jj_rescan = false; 839 } 840 841 private void jj_save(int index, int xla) { 842 JJCalls p = jj_2_rtns[index]; 843 while (p.gen > jj_gen) { 844 if (p.next == null) { p = p.next = new JJCalls(); break; } 845 p = p.next; 846 } 847 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; 848 } 849 850 static final class JJCalls { 851 int gen; 852 Token first; 853 int arg; 854 JJCalls next; 855 } 856 857}