1 /* Generated By:JavaCC: Do not edit this line. JavaCharStream.java Version 2.1 */ 2 package mobisnap.mobile_trx; 3 4 /*** 5 * An implementation of interface CharStream, where the stream is assumed to 6 * contain only ASCII characters (with java-like unicode escape processing). 7 */ 8 9 public final class JavaCharStream 10 { 11 public static final boolean staticFlag = true; 12 static final int hexval(char c) throws java.io.IOException { 13 switch(c) 14 { 15 case '0' : 16 return 0; 17 case '1' : 18 return 1; 19 case '2' : 20 return 2; 21 case '3' : 22 return 3; 23 case '4' : 24 return 4; 25 case '5' : 26 return 5; 27 case '6' : 28 return 6; 29 case '7' : 30 return 7; 31 case '8' : 32 return 8; 33 case '9' : 34 return 9; 35 36 case 'a' : 37 case 'A' : 38 return 10; 39 case 'b' : 40 case 'B' : 41 return 11; 42 case 'c' : 43 case 'C' : 44 return 12; 45 case 'd' : 46 case 'D' : 47 return 13; 48 case 'e' : 49 case 'E' : 50 return 14; 51 case 'f' : 52 case 'F' : 53 return 15; 54 } 55 56 throw new java.io.IOException(); // Should never come here 57 } 58 59 static public int bufpos = -1; 60 static int bufsize; 61 static int available; 62 static int tokenBegin; 63 static private int bufline[]; 64 static private int bufcolumn[]; 65 66 static private int column = 0; 67 static private int line = 1; 68 69 static private boolean prevCharIsCR = false; 70 static private boolean prevCharIsLF = false; 71 72 static private java.io.Reader inputStream; 73 74 static private char[] nextCharBuf; 75 static private char[] buffer; 76 static private int maxNextCharInd = 0; 77 static private int nextCharInd = -1; 78 static private int inBuf = 0; 79 80 static private final void ExpandBuff(boolean wrapAround) 81 { 82 char[] newbuffer = new char[bufsize + 2048]; 83 int newbufline[] = new int[bufsize + 2048]; 84 int newbufcolumn[] = new int[bufsize + 2048]; 85 86 try 87 { 88 if (wrapAround) 89 { 90 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); 91 System.arraycopy(buffer, 0, newbuffer, 92 bufsize - tokenBegin, bufpos); 93 buffer = newbuffer; 94 95 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); 96 System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); 97 bufline = newbufline; 98 99 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); 100 System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); 101 bufcolumn = newbufcolumn; 102 103 bufpos += (bufsize - tokenBegin); 104 } 105 else 106 { 107 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); 108 buffer = newbuffer; 109 110 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); 111 bufline = newbufline; 112 113 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); 114 bufcolumn = newbufcolumn; 115 116 bufpos -= tokenBegin; 117 } 118 } 119 catch (Throwable t) 120 { 121 throw new Error(t.getMessage()); 122 } 123 124 available = (bufsize += 2048); 125 tokenBegin = 0; 126 } 127 128 static private final void FillBuff() throws java.io.IOException 129 { 130 int i; 131 if (maxNextCharInd == 4096) 132 maxNextCharInd = nextCharInd = 0; 133 134 try { 135 if ((i = inputStream.read(nextCharBuf, maxNextCharInd, 136 4096 - maxNextCharInd)) == -1) 137 { 138 inputStream.close(); 139 throw new java.io.IOException(); 140 } 141 else 142 maxNextCharInd += i; 143 return; 144 } 145 catch(java.io.IOException e) { 146 if (bufpos != 0) 147 { 148 --bufpos; 149 backup(0); 150 } 151 else 152 { 153 bufline[bufpos] = line; 154 bufcolumn[bufpos] = column; 155 } 156 throw e; 157 } 158 } 159 160 static private final char ReadByte() throws java.io.IOException 161 { 162 if (++nextCharInd >= maxNextCharInd) 163 FillBuff(); 164 165 return nextCharBuf[nextCharInd]; 166 } 167 168 static public final char BeginToken() throws java.io.IOException 169 { 170 if (inBuf > 0) 171 { 172 --inBuf; 173 174 if (++bufpos == bufsize) 175 bufpos = 0; 176 177 tokenBegin = bufpos; 178 return buffer[bufpos]; 179 } 180 181 tokenBegin = 0; 182 bufpos = -1; 183 184 return readChar(); 185 } 186 187 static private final void AdjustBuffSize() 188 { 189 if (available == bufsize) 190 { 191 if (tokenBegin > 2048) 192 { 193 bufpos = 0; 194 available = tokenBegin; 195 } 196 else 197 ExpandBuff(false); 198 } 199 else if (available > tokenBegin) 200 available = bufsize; 201 else if ((tokenBegin - available) < 2048) 202 ExpandBuff(true); 203 else 204 available = tokenBegin; 205 } 206 207 static private final void UpdateLineColumn(char c) 208 { 209 column++; 210 211 if (prevCharIsLF) 212 { 213 prevCharIsLF = false; 214 line += (column = 1); 215 } 216 else if (prevCharIsCR) 217 { 218 prevCharIsCR = false; 219 if (c == '\n') 220 { 221 prevCharIsLF = true; 222 } 223 else 224 line += (column = 1); 225 } 226 227 switch (c) 228 { 229 case '\r' : 230 prevCharIsCR = true; 231 break; 232 case '\n' : 233 prevCharIsLF = true; 234 break; 235 case '\t' : 236 column--; 237 column += (8 - (column & 07)); 238 break; 239 default : 240 break; 241 } 242 243 bufline[bufpos] = line; 244 bufcolumn[bufpos] = column; 245 } 246 247 static public final char readChar() throws java.io.IOException 248 { 249 if (inBuf > 0) 250 { 251 --inBuf; 252 253 if (++bufpos == bufsize) 254 bufpos = 0; 255 256 return buffer[bufpos]; 257 } 258 259 char c; 260 261 if (++bufpos == available) 262 AdjustBuffSize(); 263 264 if ((buffer[bufpos] = c = ReadByte()) == '//') 265 { 266 UpdateLineColumn(c); 267 268 int backSlashCnt = 1; 269 270 for (;;) // Read all the backslashes 271 { 272 if (++bufpos == available) 273 AdjustBuffSize(); 274 275 try 276 { 277 if ((buffer[bufpos] = c = ReadByte()) != '//') 278 { 279 UpdateLineColumn(c); 280 // found a non-backslash char. 281 if ((c == 'u') && ((backSlashCnt & 1) == 1)) 282 { 283 if (--bufpos < 0) 284 bufpos = bufsize - 1; 285 286 break; 287 } 288 289 backup(backSlashCnt); 290 return '//'; 291 } 292 } 293 catch(java.io.IOException e) 294 { 295 if (backSlashCnt > 1) 296 backup(backSlashCnt); 297 298 return '//'; 299 } 300 301 UpdateLineColumn(c); 302 backSlashCnt++; 303 } 304 305 // Here, we have seen an odd number of backslash's followed by a 'u' 306 try 307 { 308 while ((c = ReadByte()) == 'u') 309 ++column; 310 311 buffer[bufpos] = c = (char)(hexval(c) << 12 | 312 hexval(ReadByte()) << 8 | 313 hexval(ReadByte()) << 4 | 314 hexval(ReadByte())); 315 316 column += 4; 317 } 318 catch(java.io.IOException e) 319 { 320 throw new Error("Invalid escape character at line " + line + 321 " column " + column + "."); 322 } 323 324 if (backSlashCnt == 1) 325 return c; 326 else 327 { 328 backup(backSlashCnt - 1); 329 return '//'; 330 } 331 } 332 else 333 { 334 UpdateLineColumn(c); 335 return (c); 336 } 337 } 338 339 /*** 340 * @deprecated 341 * @see #getEndColumn 342 */ 343 344 static public final int getColumn() { 345 return bufcolumn[bufpos]; 346 } 347 348 /*** 349 * @deprecated 350 * @see #getEndLine 351 */ 352 353 static public final int getLine() { 354 return bufline[bufpos]; 355 } 356 357 static public final int getEndColumn() { 358 return bufcolumn[bufpos]; 359 } 360 361 static public final int getEndLine() { 362 return bufline[bufpos]; 363 } 364 365 static public final int getBeginColumn() { 366 return bufcolumn[tokenBegin]; 367 } 368 369 static public final int getBeginLine() { 370 return bufline[tokenBegin]; 371 } 372 373 static public final void backup(int amount) { 374 375 inBuf += amount; 376 if ((bufpos -= amount) < 0) 377 bufpos += bufsize; 378 } 379 380 public JavaCharStream(java.io.Reader dstream, 381 int startline, int startcolumn, int buffersize) 382 { 383 if (inputStream != null) 384 throw new Error("\n ERROR: Second call to the constructor of a static JavaCharStream. You must\n" + 385 " either use ReInit() or set the JavaCC option STATIC to false\n" + 386 " during the generation of this class."); 387 inputStream = dstream; 388 line = startline; 389 column = startcolumn - 1; 390 391 available = bufsize = buffersize; 392 buffer = new char[buffersize]; 393 bufline = new int[buffersize]; 394 bufcolumn = new int[buffersize]; 395 nextCharBuf = new char[4096]; 396 } 397 398 public JavaCharStream(java.io.Reader dstream, 399 int startline, int startcolumn) 400 { 401 this(dstream, startline, startcolumn, 4096); 402 } 403 404 public JavaCharStream(java.io.Reader dstream) 405 { 406 this(dstream, 1, 1, 4096); 407 } 408 public void ReInit(java.io.Reader dstream, 409 int startline, int startcolumn, int buffersize) 410 { 411 inputStream = dstream; 412 line = startline; 413 column = startcolumn - 1; 414 415 if (buffer == null || buffersize != buffer.length) 416 { 417 available = bufsize = buffersize; 418 buffer = new char[buffersize]; 419 bufline = new int[buffersize]; 420 bufcolumn = new int[buffersize]; 421 nextCharBuf = new char[4096]; 422 } 423 prevCharIsLF = prevCharIsCR = false; 424 tokenBegin = inBuf = maxNextCharInd = 0; 425 nextCharInd = bufpos = -1; 426 } 427 428 public void ReInit(java.io.Reader dstream, 429 int startline, int startcolumn) 430 { 431 ReInit(dstream, startline, startcolumn, 4096); 432 } 433 434 public void ReInit(java.io.Reader dstream) 435 { 436 ReInit(dstream, 1, 1, 4096); 437 } 438 public JavaCharStream(java.io.InputStream dstream, int startline, 439 int startcolumn, int buffersize) 440 { 441 this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); 442 } 443 444 public JavaCharStream(java.io.InputStream dstream, int startline, 445 int startcolumn) 446 { 447 this(dstream, startline, startcolumn, 4096); 448 } 449 450 public JavaCharStream(java.io.InputStream dstream) 451 { 452 this(dstream, 1, 1, 4096); 453 } 454 455 public void ReInit(java.io.InputStream dstream, int startline, 456 int startcolumn, int buffersize) 457 { 458 ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); 459 } 460 public void ReInit(java.io.InputStream dstream, int startline, 461 int startcolumn) 462 { 463 ReInit(dstream, startline, startcolumn, 4096); 464 } 465 public void ReInit(java.io.InputStream dstream) 466 { 467 ReInit(dstream, 1, 1, 4096); 468 } 469 470 static public final String GetImage() 471 { 472 if (bufpos >= tokenBegin) 473 return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); 474 else 475 return new String(buffer, tokenBegin, bufsize - tokenBegin) + 476 new String(buffer, 0, bufpos + 1); 477 } 478 479 static public final char[] GetSuffix(int len) 480 { 481 char[] ret = new char[len]; 482 483 if ((bufpos + 1) >= len) 484 System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); 485 else 486 { 487 System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, 488 len - bufpos - 1); 489 System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); 490 } 491 492 return ret; 493 } 494 495 static public void Done() 496 { 497 nextCharBuf = null; 498 buffer = null; 499 bufline = null; 500 bufcolumn = null; 501 } 502 503 /*** 504 * Method to adjust line and column numbers for the start of a token.<BR> 505 */ 506 static public void adjustBeginLineColumn(int newLine, int newCol) 507 { 508 int start = tokenBegin; 509 int len; 510 511 if (bufpos >= tokenBegin) 512 { 513 len = bufpos - tokenBegin + inBuf + 1; 514 } 515 else 516 { 517 len = bufsize - tokenBegin + bufpos + 1 + inBuf; 518 } 519 520 int i = 0, j = 0, k = 0; 521 int nextColDiff = 0, columnDiff = 0; 522 523 while (i < len && 524 bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) 525 { 526 bufline[j] = newLine; 527 nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; 528 bufcolumn[j] = newCol + columnDiff; 529 columnDiff = nextColDiff; 530 i++; 531 } 532 533 if (i < len) 534 { 535 bufline[j] = newLine++; 536 bufcolumn[j] = newCol + columnDiff; 537 538 while (i++ < len) 539 { 540 if (bufline[j = start % bufsize] != bufline[++start % bufsize]) 541 bufline[j] = newLine++; 542 else 543 bufline[j] = newLine; 544 } 545 } 546 547 line = bufline[j]; 548 column = bufcolumn[j]; 549 } 550 551 }

This page was automatically generated by Maven