1 22 23 package org.javacc.parser; 24 25 import java.util.*; 26 import java.io.*; 27 28 public class ParseGen extends JavaCCGlobals implements JavaCCParserConstants { 29 30 static public void start() throws MetaParseException { 31 32 Token t = null; 33 34 if (JavaCCErrors.get_error_count() != 0) throw new MetaParseException(); 35 36 if (Options.B("BUILD_PARSER")) { 37 38 try { 39 ostr = new PrintWriter( 40 new BufferedWriter( 41 new FileWriter( 42 new File(outputDir, cu_name + ".java") 43 ), 44 8192 45 ) 46 ); 47 } catch (IOException e) { 48 JavaCCErrors.semantic_error("Could not open file " + cu_name + ".java for writing."); 49 throw new Error(); 50 } 51 52 Vector tn = (Vector)(toolNames.clone()); 53 tn.addElement(toolName); 54 ostr.println("/* " + getIdString(tn, cu_name + ".java") + " */"); 55 56 boolean implementsExists = false; 57 58 if (cu_to_insertion_point_1.size() != 0) { 59 printTokenSetup((Token)(cu_to_insertion_point_1.elementAt(0))); ccol = 1; 60 for (Enumeration enum = cu_to_insertion_point_1.elements(); enum.hasMoreElements();) { 61 t = (Token)enum.nextElement(); 62 if (t.kind == IMPLEMENTS) { 63 implementsExists = true; 64 } else if (t.kind == CLASS) { 65 implementsExists = false; 66 } 67 printToken(t, ostr); 68 } 69 } 70 if (implementsExists) { 71 ostr.print(", "); 72 } else { 73 ostr.print(" implements "); 74 } 75 ostr.print(cu_name + "Constants "); 76 if (cu_to_insertion_point_2.size() != 0) { 77 printTokenSetup((Token)(cu_to_insertion_point_2.elementAt(0))); 78 for (Enumeration enum = cu_to_insertion_point_2.elements(); enum.hasMoreElements();) { 79 t = (Token)enum.nextElement(); 80 printToken(t, ostr); 81 } 82 } 83 84 ostr.println(""); 85 ostr.println(""); 86 87 ParseEngine.build(ostr); 88 89 if (Options.B("STATIC")) { 90 ostr.println(" static private boolean jj_initialized_once = false;"); 91 } 92 if (Options.B("USER_TOKEN_MANAGER")) { 93 ostr.println(" " + staticOpt() + "public TokenManager token_source;"); 94 } else { 95 ostr.println(" " + staticOpt() + "public " + cu_name + "TokenManager token_source;"); 96 if (!Options.B("USER_CHAR_STREAM")) { 97 if (Options.B("JAVA_UNICODE_ESCAPE")) { 98 ostr.println(" " + staticOpt() + "JavaCharStream jj_input_stream;"); 99 } else { 100 ostr.println(" " + staticOpt() + "SimpleCharStream jj_input_stream;"); 101 } 102 } 103 } 104 ostr.println(" " + staticOpt() + "public Token token, jj_nt;"); 105 if (!Options.B("CACHE_TOKENS")) { 106 ostr.println(" " + staticOpt() + "private int jj_ntk;"); 107 } 108 if (jj2index != 0) { 109 ostr.println(" " + staticOpt() + "private Token jj_scanpos, jj_lastpos;"); 110 ostr.println(" " + staticOpt() + "private int jj_la;"); 111 ostr.println(" " + staticOpt() + "public boolean lookingAhead = false;"); 112 ostr.println(" " + staticOpt() + "private boolean jj_semLA;"); 113 } 114 if (Options.B("ERROR_REPORTING")) { 115 ostr.println(" " + staticOpt() + "private int jj_gen;"); 116 ostr.println(" " + staticOpt() + "final private int[] jj_la1 = new int[" + maskindex + "];"); 117 int tokenMaskSize = (tokenCount-1)/32 + 1; 118 for (int i = 0; i < tokenMaskSize; i++) 119 ostr.println(" static private int[] jj_la1_" + i + ";"); 120 ostr.println(" static {"); 121 for (int i = 0; i < tokenMaskSize; i++) 122 ostr.println(" jj_la1_" + i + "();"); 123 ostr.println(" }"); 124 for (int i = 0; i < tokenMaskSize; i++) { 125 ostr.println(" private static void jj_la1_" + i + "() {"); 126 ostr.print(" jj_la1_" + i + " = new int[] {"); 127 for (Enumeration enum = maskVals.elements(); enum.hasMoreElements();) { 128 int[] tokenMask = (int[])(enum.nextElement()); 129 ostr.print("0x" + Integer.toHexString(tokenMask[i]) + ","); 130 } 131 ostr.println("};"); 132 ostr.println(" }"); 133 } 134 } 135 if (jj2index != 0 && Options.B("ERROR_REPORTING")) { 136 ostr.println(" " + staticOpt() + "final private JJCalls[] jj_2_rtns = new JJCalls[" + jj2index + "];"); 137 ostr.println(" " + staticOpt() + "private boolean jj_rescan = false;"); 138 ostr.println(" " + staticOpt() + "private int jj_gc = 0;"); 139 } 140 ostr.println(""); 141 142 if (!Options.B("USER_TOKEN_MANAGER")) { 143 if (Options.B("USER_CHAR_STREAM")) { 144 ostr.println(" public " + cu_name + "(CharStream stream) {"); 145 if (Options.B("STATIC")) { 146 ostr.println(" if (jj_initialized_once) {"); 147 ostr.println(" System.out.println(\"ERROR: Second call to constructor of static parser. You must\");"); 148 ostr.println(" System.out.println(\" either use ReInit() or set the JavaCC option STATIC to false\");"); 149 ostr.println(" System.out.println(\" during parser generation.\");"); 150 ostr.println(" throw new Error();"); 151 ostr.println(" }"); 152 ostr.println(" jj_initialized_once = true;"); 153 } 154 ostr.println(" token_source = new " + cu_name + "TokenManager(stream);"); 155 ostr.println(" token = new Token();"); 156 if (Options.B("CACHE_TOKENS")) { 157 ostr.println(" token.next = jj_nt = token_source.getNextToken();"); 158 } else { 159 ostr.println(" jj_ntk = -1;"); 160 } 161 if (Options.B("ERROR_REPORTING")) { 162 ostr.println(" jj_gen = 0;"); 163 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) jj_la1[i] = -1;"); 164 if (jj2index != 0) { 165 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();"); 166 } 167 } 168 ostr.println(" }"); 169 ostr.println(""); 170 ostr.println(" " + staticOpt() + "public void ReInit(CharStream stream) {"); 171 ostr.println(" token_source.ReInit(stream);"); 172 ostr.println(" token = new Token();"); 173 if (Options.B("CACHE_TOKENS")) { 174 ostr.println(" token.next = jj_nt = token_source.getNextToken();"); 175 } else { 176 ostr.println(" jj_ntk = -1;"); 177 } 178 if (jjtreeGenerated) { 179 ostr.println(" jjtree.reset();"); 180 } 181 if (Options.B("ERROR_REPORTING")) { 182 ostr.println(" jj_gen = 0;"); 183 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) jj_la1[i] = -1;"); 184 if (jj2index != 0) { 185 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();"); 186 } 187 } 188 ostr.println(" }"); 189 } else { 190 ostr.println(" public " + cu_name + "(java.io.InputStream stream) {"); 191 if (Options.B("STATIC")) { 192 ostr.println(" if (jj_initialized_once) {"); 193 ostr.println(" System.out.println(\"ERROR: Second call to constructor of static parser. You must\");"); 194 ostr.println(" System.out.println(\" either use ReInit() or set the JavaCC option STATIC to false\");"); 195 ostr.println(" System.out.println(\" during parser generation.\");"); 196 ostr.println(" throw new Error();"); 197 ostr.println(" }"); 198 ostr.println(" jj_initialized_once = true;"); 199 } 200 if (Options.B("JAVA_UNICODE_ESCAPE")) { 201 ostr.println(" jj_input_stream = new JavaCharStream(stream, 1, 1);"); 202 } else { 203 ostr.println(" jj_input_stream = new SimpleCharStream(stream, 1, 1);"); 204 } 205 ostr.println(" token_source = new " + cu_name + "TokenManager(jj_input_stream);"); 206 ostr.println(" token = new Token();"); 207 if (Options.B("CACHE_TOKENS")) { 208 ostr.println(" token.next = jj_nt = token_source.getNextToken();"); 209 } else { 210 ostr.println(" jj_ntk = -1;"); 211 } 212 if (Options.B("ERROR_REPORTING")) { 213 ostr.println(" jj_gen = 0;"); 214 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) jj_la1[i] = -1;"); 215 if (jj2index != 0) { 216 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();"); 217 } 218 } 219 ostr.println(" }"); 220 ostr.println(""); 221 ostr.println(" " + staticOpt() + "public void ReInit(java.io.InputStream stream) {"); 222 if (Options.B("JAVA_UNICODE_ESCAPE")) { 223 ostr.println(" jj_input_stream.ReInit(stream, 1, 1);"); 224 } else { 225 ostr.println(" jj_input_stream.ReInit(stream, 1, 1);"); 226 } 227 ostr.println(" token_source.ReInit(jj_input_stream);"); 228 ostr.println(" token = new Token();"); 229 if (Options.B("CACHE_TOKENS")) { 230 ostr.println(" token.next = jj_nt = token_source.getNextToken();"); 231 } else { 232 ostr.println(" jj_ntk = -1;"); 233 } 234 if (jjtreeGenerated) { 235 ostr.println(" jjtree.reset();"); 236 } 237 if (Options.B("ERROR_REPORTING")) { 238 ostr.println(" jj_gen = 0;"); 239 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) jj_la1[i] = -1;"); 240 if (jj2index != 0) { 241 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();"); 242 } 243 } 244 ostr.println(" }"); 245 ostr.println(""); 246 ostr.println(" public " + cu_name + "(java.io.Reader stream) {"); 247 if (Options.B("STATIC")) { 248 ostr.println(" if (jj_initialized_once) {"); 249 ostr.println(" System.out.println(\"ERROR: Second call to constructor of static parser. You must\");"); 250 ostr.println(" System.out.println(\" either use ReInit() or set the JavaCC option STATIC to false\");"); 251 ostr.println(" System.out.println(\" during parser generation.\");"); 252 ostr.println(" throw new Error();"); 253 ostr.println(" }"); 254 ostr.println(" jj_initialized_once = true;"); 255 } 256 if (Options.B("JAVA_UNICODE_ESCAPE")) { 257 ostr.println(" jj_input_stream = new JavaCharStream(stream, 1, 1);"); 258 } else { 259 ostr.println(" jj_input_stream = new SimpleCharStream(stream, 1, 1);"); 260 } 261 ostr.println(" token_source = new " + cu_name + "TokenManager(jj_input_stream);"); 262 ostr.println(" token = new Token();"); 263 if (Options.B("CACHE_TOKENS")) { 264 ostr.println(" token.next = jj_nt = token_source.getNextToken();"); 265 } else { 266 ostr.println(" jj_ntk = -1;"); 267 } 268 if (Options.B("ERROR_REPORTING")) { 269 ostr.println(" jj_gen = 0;"); 270 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) jj_la1[i] = -1;"); 271 if (jj2index != 0) { 272 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();"); 273 } 274 } 275 ostr.println(" }"); 276 ostr.println(""); 277 ostr.println(" " + staticOpt() + "public void ReInit(java.io.Reader stream) {"); 278 if (Options.B("JAVA_UNICODE_ESCAPE")) { 279 ostr.println(" jj_input_stream.ReInit(stream, 1, 1);"); 280 } else { 281 ostr.println(" jj_input_stream.ReInit(stream, 1, 1);"); 282 } 283 ostr.println(" token_source.ReInit(jj_input_stream);"); 284 ostr.println(" token = new Token();"); 285 if (Options.B("CACHE_TOKENS")) { 286 ostr.println(" token.next = jj_nt = token_source.getNextToken();"); 287 } else { 288 ostr.println(" jj_ntk = -1;"); 289 } 290 if (jjtreeGenerated) { 291 ostr.println(" jjtree.reset();"); 292 } 293 if (Options.B("ERROR_REPORTING")) { 294 ostr.println(" jj_gen = 0;"); 295 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) jj_la1[i] = -1;"); 296 if (jj2index != 0) { 297 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();"); 298 } 299 } 300 ostr.println(" }"); 301 } 302 } 303 ostr.println(""); 304 if (Options.B("USER_TOKEN_MANAGER")) { 305 ostr.println(" public " + cu_name + "(TokenManager tm) {"); 306 } else { 307 ostr.println(" public " + cu_name + "(" + cu_name + "TokenManager tm) {"); 308 } 309 if (Options.B("STATIC")) { 310 ostr.println(" if (jj_initialized_once) {"); 311 ostr.println(" System.out.println(\"ERROR: Second call to constructor of static parser. You must\");"); 312 ostr.println(" System.out.println(\" either use ReInit() or set the JavaCC option STATIC to false\");"); 313 ostr.println(" System.out.println(\" during parser generation.\");"); 314 ostr.println(" throw new Error();"); 315 ostr.println(" }"); 316 ostr.println(" jj_initialized_once = true;"); 317 } 318 ostr.println(" token_source = tm;"); 319 ostr.println(" token = new Token();"); 320 if (Options.B("CACHE_TOKENS")) { 321 ostr.println(" token.next = jj_nt = token_source.getNextToken();"); 322 } else { 323 ostr.println(" jj_ntk = -1;"); 324 } 325 if (Options.B("ERROR_REPORTING")) { 326 ostr.println(" jj_gen = 0;"); 327 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) jj_la1[i] = -1;"); 328 if (jj2index != 0) { 329 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();"); 330 } 331 } 332 ostr.println(" }"); 333 ostr.println(""); 334 if (Options.B("USER_TOKEN_MANAGER")) { 335 ostr.println(" public void ReInit(TokenManager tm) {"); 336 } else { 337 ostr.println(" public void ReInit(" + cu_name + "TokenManager tm) {"); 338 } 339 ostr.println(" token_source = tm;"); 340 ostr.println(" token = new Token();"); 341 if (Options.B("CACHE_TOKENS")) { 342 ostr.println(" token.next = jj_nt = token_source.getNextToken();"); 343 } else { 344 ostr.println(" jj_ntk = -1;"); 345 } 346 if (jjtreeGenerated) { 347 ostr.println(" jjtree.reset();"); 348 } 349 if (Options.B("ERROR_REPORTING")) { 350 ostr.println(" jj_gen = 0;"); 351 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) jj_la1[i] = -1;"); 352 if (jj2index != 0) { 353 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();"); 354 } 355 } 356 ostr.println(" }"); 357 ostr.println(""); 358 ostr.println(" " + staticOpt() + "final private Token jj_consume_token(int kind) throws ParseException {"); 359 if (Options.B("CACHE_TOKENS")) { 360 ostr.println(" Token oldToken = token;"); 361 ostr.println(" if ((token = jj_nt).next != null) jj_nt = jj_nt.next;"); 362 ostr.println(" else jj_nt = jj_nt.next = token_source.getNextToken();"); 363 } else { 364 ostr.println(" Token oldToken;"); 365 ostr.println(" if ((oldToken = token).next != null) token = token.next;"); 366 ostr.println(" else token = token.next = token_source.getNextToken();"); 367 ostr.println(" jj_ntk = -1;"); 368 } 369 ostr.println(" if (token.kind == kind) {"); 370 if (Options.B("ERROR_REPORTING")) { 371 ostr.println(" jj_gen++;"); 372 if (jj2index != 0) { 373 ostr.println(" if (++jj_gc > 100) {"); 374 ostr.println(" jj_gc = 0;"); 375 ostr.println(" for (int i = 0; i < jj_2_rtns.length; i++) {"); 376 ostr.println(" JJCalls c = jj_2_rtns[i];"); 377 ostr.println(" while (c != null) {"); 378 ostr.println(" if (c.gen < jj_gen) c.first = null;"); 379 ostr.println(" c = c.next;"); 380 ostr.println(" }"); 381 ostr.println(" }"); 382 ostr.println(" }"); 383 } 384 } 385 if (Options.B("DEBUG_PARSER")) { 386 ostr.println(" trace_token(token, \"\");"); 387 } 388 ostr.println(" return token;"); 389 ostr.println(" }"); 390 if (Options.B("CACHE_TOKENS")) { 391 ostr.println(" jj_nt = token;"); 392 } 393 ostr.println(" token = oldToken;"); 394 if (Options.B("ERROR_REPORTING")) { 395 ostr.println(" jj_kind = kind;"); 396 } 397 ostr.println(" throw generateParseException();"); 398 ostr.println(" }"); 399 ostr.println(""); 400 if (jj2index != 0) { 401 ostr.println(" static private final class LookaheadSuccess extends java.lang.Error { }"); 402 ostr.println(" " + staticOpt() + "final private LookaheadSuccess jj_ls = new LookaheadSuccess();"); 403 ostr.println(" " + staticOpt() + "final private boolean jj_scan_token(int kind) {"); 404 ostr.println(" if (jj_scanpos == jj_lastpos) {"); 405 ostr.println(" jj_la--;"); 406 ostr.println(" if (jj_scanpos.next == null) {"); 407 ostr.println(" jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();"); 408 ostr.println(" } else {"); 409 ostr.println(" jj_lastpos = jj_scanpos = jj_scanpos.next;"); 410 ostr.println(" }"); 411 ostr.println(" } else {"); 412 ostr.println(" jj_scanpos = jj_scanpos.next;"); 413 ostr.println(" }"); 414 if (Options.B("ERROR_REPORTING")) { 415 ostr.println(" if (jj_rescan) {"); 416 ostr.println(" int i = 0; Token tok = token;"); 417 ostr.println(" while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }"); 418 ostr.println(" if (tok != null) jj_add_error_token(kind, i);"); 419 if (Options.B("DEBUG_LOOKAHEAD")) { 420 ostr.println(" } else {"); 421 ostr.println(" trace_scan(jj_scanpos, kind);"); 422 } 423 ostr.println(" }"); 424 } else if (Options.B("DEBUG_LOOKAHEAD")) { 425 ostr.println(" trace_scan(jj_scanpos, kind);"); 426 } 427 ostr.println(" if (jj_scanpos.kind != kind) return true;"); 428 ostr.println(" if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;"); 429 ostr.println(" return false;"); 430 ostr.println(" }"); 431 ostr.println(""); 432 } 433 ostr.println(" " + staticOpt() + "final public Token getNextToken() {"); 434 if (Options.B("CACHE_TOKENS")) { 435 ostr.println(" if ((token = jj_nt).next != null) jj_nt = jj_nt.next;"); 436 ostr.println(" else jj_nt = jj_nt.next = token_source.getNextToken();"); 437 } else { 438 ostr.println(" if (token.next != null) token = token.next;"); 439 ostr.println(" else token = token.next = token_source.getNextToken();"); 440 ostr.println(" jj_ntk = -1;"); 441 } 442 if (Options.B("ERROR_REPORTING")) { 443 ostr.println(" jj_gen++;"); 444 } 445 if (Options.B("DEBUG_PARSER")) { 446 ostr.println(" trace_token(token, \" (in getNextToken)\");"); 447 } 448 ostr.println(" return token;"); 449 ostr.println(" }"); 450 ostr.println(""); 451 ostr.println(" " + staticOpt() + "final public Token getToken(int index) {"); 452 if (jj2index != 0) { 453 ostr.println(" Token t = lookingAhead ? jj_scanpos : token;"); 454 } else { 455 ostr.println(" Token t = token;"); 456 } 457 ostr.println(" for (int i = 0; i < index; i++) {"); 458 ostr.println(" if (t.next != null) t = t.next;"); 459 ostr.println(" else t = t.next = token_source.getNextToken();"); 460 ostr.println(" }"); 461 ostr.println(" return t;"); 462 ostr.println(" }"); 463 ostr.println(""); 464 if (!Options.B("CACHE_TOKENS")) { 465 ostr.println(" " + staticOpt() + "final private int jj_ntk() {"); 466 ostr.println(" if ((jj_nt=token.next) == null)"); 467 ostr.println(" return (jj_ntk = (token.next=token_source.getNextToken()).kind);"); 468 ostr.println(" else"); 469 ostr.println(" return (jj_ntk = jj_nt.kind);"); 470 ostr.println(" }"); 471 ostr.println(""); 472 } 473 if (Options.B("ERROR_REPORTING")) { 474 ostr.println(" " + staticOpt() + "private java.util.Vector jj_expentries = new java.util.Vector();"); 475 ostr.println(" " + staticOpt() + "private int[] jj_expentry;"); 476 ostr.println(" " + staticOpt() + "private int jj_kind = -1;"); 477 if (jj2index != 0) { 478 ostr.println(" " + staticOpt() + "private int[] jj_lasttokens = new int[100];"); 479 ostr.println(" " + staticOpt() + "private int jj_endpos;"); 480 ostr.println(""); 481 ostr.println(" " + staticOpt() + "private void jj_add_error_token(int kind, int pos) {"); 482 ostr.println(" if (pos >= 100) return;"); 483 ostr.println(" if (pos == jj_endpos + 1) {"); 484 ostr.println(" jj_lasttokens[jj_endpos++] = kind;"); 485 ostr.println(" } else if (jj_endpos != 0) {"); 486 ostr.println(" jj_expentry = new int[jj_endpos];"); 487 ostr.println(" for (int i = 0; i < jj_endpos; i++) {"); 488 ostr.println(" jj_expentry[i] = jj_lasttokens[i];"); 489 ostr.println(" }"); 490 ostr.println(" boolean exists = false;"); 491 ostr.println(" for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {"); 492 ostr.println(" int[] oldentry = (int[])(e.nextElement());"); 493 ostr.println(" if (oldentry.length == jj_expentry.length) {"); 494 ostr.println(" exists = true;"); 495 ostr.println(" for (int i = 0; i < jj_expentry.length; i++) {"); 496 ostr.println(" if (oldentry[i] != jj_expentry[i]) {"); 497 ostr.println(" exists = false;"); 498 ostr.println(" break;"); 499 ostr.println(" }"); 500 ostr.println(" }"); 501 ostr.println(" if (exists) break;"); 502 ostr.println(" }"); 503 ostr.println(" }"); 504 ostr.println(" if (!exists) jj_expentries.addElement(jj_expentry);"); 505 ostr.println(" if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;"); 506 ostr.println(" }"); 507 ostr.println(" }"); 508 } 509 ostr.println(""); 510 ostr.println(" " + staticOpt() + "public ParseException generateParseException() {"); 511 ostr.println(" jj_expentries.removeAllElements();"); 512 ostr.println(" boolean[] la1tokens = new boolean[" + tokenCount + "];"); 513 ostr.println(" for (int i = 0; i < " + tokenCount + "; i++) {"); 514 ostr.println(" la1tokens[i] = false;"); 515 ostr.println(" }"); 516 ostr.println(" if (jj_kind >= 0) {"); 517 ostr.println(" la1tokens[jj_kind] = true;"); 518 ostr.println(" jj_kind = -1;"); 519 ostr.println(" }"); 520 ostr.println(" for (int i = 0; i < " + maskindex + "; i++) {"); 521 ostr.println(" if (jj_la1[i] == jj_gen) {"); 522 ostr.println(" for (int j = 0; j < 32; j++) {"); 523 for (int i = 0; i < (tokenCount-1)/32 + 1; i++) { 524 ostr.println(" if ((jj_la1_" + i + "[i] & (1<<j)) != 0) {"); 525 ostr.print(" la1tokens["); 526 if (i != 0) { 527 ostr.print((32*i) + "+"); 528 } 529 ostr.println("j] = true;"); 530 ostr.println(" }"); 531 } 532 ostr.println(" }"); 533 ostr.println(" }"); 534 ostr.println(" }"); 535 ostr.println(" for (int i = 0; i < " + tokenCount + "; i++) {"); 536 ostr.println(" if (la1tokens[i]) {"); 537 ostr.println(" jj_expentry = new int[1];"); 538 ostr.println(" jj_expentry[0] = i;"); 539 ostr.println(" jj_expentries.addElement(jj_expentry);"); 540 ostr.println(" }"); 541 ostr.println(" }"); 542 if (jj2index != 0) { 543 ostr.println(" jj_endpos = 0;"); 544 ostr.println(" jj_rescan_token();"); 545 ostr.println(" jj_add_error_token(0, 0);"); 546 } 547 ostr.println(" int[][] exptokseq = new int[jj_expentries.size()][];"); 548 ostr.println(" for (int i = 0; i < jj_expentries.size(); i++) {"); 549 ostr.println(" exptokseq[i] = (int[])jj_expentries.elementAt(i);"); 550 ostr.println(" }"); 551 ostr.println(" return new ParseException(token, exptokseq, tokenImage);"); 552 ostr.println(" }"); 553 } else { 554 ostr.println(" " + staticOpt() + "public ParseException generateParseException() {"); 555 ostr.println(" Token errortok = token.next;"); 556 if (Options.B("KEEP_LINE_COLUMN")) 557 ostr.println(" int line = errortok.beginLine, column = errortok.beginColumn;"); 558 ostr.println(" String mess = (errortok.kind == 0) ? tokenImage[0] : errortok.image;"); 559 if (Options.B("KEEP_LINE_COLUMN")) 560 ostr.println(" return new ParseException(\"Parse error at line \" + line + \", column \" + column + \". Encountered: \" + mess);"); 561 else 562 ostr.println(" return new ParseException(\"Parse error at <unknown location>. Encountered: \" + mess);"); 563 ostr.println(" }"); 564 } 565 ostr.println(""); 566 567 if (Options.B("DEBUG_PARSER")) { 568 ostr.println(" " + staticOpt() + "private int trace_indent = 0;"); 569 ostr.println(" " + staticOpt() + "private boolean trace_enabled = true;"); 570 ostr.println(""); 571 ostr.println(" " + staticOpt() + "final public void enable_tracing() {"); 572 ostr.println(" trace_enabled = true;"); 573 ostr.println(" }"); 574 ostr.println(""); 575 ostr.println(" " + staticOpt() + "final public void disable_tracing() {"); 576 ostr.println(" trace_enabled = false;"); 577 ostr.println(" }"); 578 ostr.println(""); 579 ostr.println(" " + staticOpt() + "final private void trace_call(String s) {"); 580 ostr.println(" if (trace_enabled) {"); 581 ostr.println(" for (int i = 0; i < trace_indent; i++) { System.out.print(\" \"); }"); 582 ostr.println(" System.out.println(\"Call: \" + s);"); 583 ostr.println(" }"); 584 ostr.println(" trace_indent = trace_indent + 2;"); 585 ostr.println(" }"); 586 ostr.println(""); 587 ostr.println(" " + staticOpt() + "final private void trace_return(String s) {"); 588 ostr.println(" trace_indent = trace_indent - 2;"); 589 ostr.println(" if (trace_enabled) {"); 590 ostr.println(" for (int i = 0; i < trace_indent; i++) { System.out.print(\" \"); }"); 591 ostr.println(" System.out.println(\"Return: \" + s);"); 592 ostr.println(" }"); 593 ostr.println(" }"); 594 ostr.println(""); 595 ostr.println(" " + staticOpt() + "final private void trace_token(Token t, String where) {"); 596 ostr.println(" if (trace_enabled) {"); 597 ostr.println(" for (int i = 0; i < trace_indent; i++) { System.out.print(\" \"); }"); 598 ostr.println(" System.out.print(\"Consumed token: <\" + tokenImage[t.kind]);"); 599 ostr.println(" if (t.kind != 0 && !tokenImage[t.kind].equals(\"\\\"\" + t.image + \"\\\"\")) {"); 600 ostr.println(" System.out.print(\": \\\"\" + t.image + \"\\\"\");"); 601 ostr.println(" }"); 602 ostr.println(" System.out.println(\">\" + where);"); 603 ostr.println(" }"); 604 ostr.println(" }"); 605 ostr.println(""); 606 ostr.println(" " + staticOpt() + "final private void trace_scan(Token t1, int t2) {"); 607 ostr.println(" if (trace_enabled) {"); 608 ostr.println(" for (int i = 0; i < trace_indent; i++) { System.out.print(\" \"); }"); 609 ostr.println(" System.out.print(\"Visited token: <\" + tokenImage[t1.kind]);"); 610 ostr.println(" if (t1.kind != 0 && !tokenImage[t1.kind].equals(\"\\\"\" + t1.image + \"\\\"\")) {"); 611 ostr.println(" System.out.print(\": \\\"\" + t1.image + \"\\\"\");"); 612 ostr.println(" }"); 613 ostr.println(" System.out.println(\">; Expected token: <\" + tokenImage[t2] + \">\");"); 614 ostr.println(" }"); 615 ostr.println(" }"); 616 ostr.println(""); 617 } else { 618 ostr.println(" " + staticOpt() + "final public void enable_tracing() {"); 619 ostr.println(" }"); 620 ostr.println(""); 621 ostr.println(" " + staticOpt() + "final public void disable_tracing() {"); 622 ostr.println(" }"); 623 ostr.println(""); 624 } 625 626 if (jj2index != 0 && Options.B("ERROR_REPORTING")) { 627 ostr.println(" " + staticOpt() + "final private void jj_rescan_token() {"); 628 ostr.println(" jj_rescan = true;"); 629 ostr.println(" for (int i = 0; i < " + jj2index + "; i++) {"); 630 ostr.println(" JJCalls p = jj_2_rtns[i];"); 631 ostr.println(" do {"); 632 ostr.println(" if (p.gen > jj_gen) {"); 633 ostr.println(" jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;"); 634 ostr.println(" switch (i) {"); 635 for (int i = 0; i < jj2index; i++) { 636 ostr.println(" case " + i + ": jj_3_" + (i+1) + "(); break;"); 637 } 638 ostr.println(" }"); 639 ostr.println(" }"); 640 ostr.println(" p = p.next;"); 641 ostr.println(" } while (p != null);"); 642 ostr.println(" }"); 643 ostr.println(" jj_rescan = false;"); 644 ostr.println(" }"); 645 ostr.println(""); 646 ostr.println(" " + staticOpt() + "final private void jj_save(int index, int xla) {"); 647 ostr.println(" JJCalls p = jj_2_rtns[index];"); 648 ostr.println(" while (p.gen > jj_gen) {"); 649 ostr.println(" if (p.next == null) { p = p.next = new JJCalls(); break; }"); 650 ostr.println(" p = p.next;"); 651 ostr.println(" }"); 652 ostr.println(" p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;"); 653 ostr.println(" }"); 654 ostr.println(""); 655 } 656 657 if (jj2index != 0 && Options.B("ERROR_REPORTING")) { 658 ostr.println(" static final class JJCalls {"); 659 ostr.println(" int gen;"); 660 ostr.println(" Token first;"); 661 ostr.println(" int arg;"); 662 ostr.println(" JJCalls next;"); 663 ostr.println(" }"); 664 ostr.println(""); 665 } 666 667 if (cu_from_insertion_point_2.size() != 0) { 668 printTokenSetup((Token)(cu_from_insertion_point_2.elementAt(0))); ccol = 1; 669 for (Enumeration enum = cu_from_insertion_point_2.elements(); enum.hasMoreElements();) { 670 t = (Token)enum.nextElement(); 671 printToken(t, ostr); 672 } 673 printTrailingComments(t, ostr); 674 } 675 ostr.println(""); 676 677 ostr.close(); 678 679 } 681 } 682 683 static private PrintWriter ostr; 684 685 public static void reInit() 686 { 687 ostr = null; 688 } 689 690 } 691 | Popular Tags |