comparison truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Scanner.java @ 22190:6050fb3fc842

SL: fix rawtypes in Scanner
author Andreas Woess <andreas.woess@oracle.com>
date Wed, 23 Sep 2015 23:38:44 +0200
parents dc83cc1f94f2
children
comparison
equal deleted inserted replaced
22189:fe7032676e60 22190:6050fb3fc842
322 } 322 }
323 323
324 // ----------------------------------------------------------------------------------- 324 // -----------------------------------------------------------------------------------
325 // Scanner 325 // Scanner
326 // ----------------------------------------------------------------------------------- 326 // -----------------------------------------------------------------------------------
327 @SuppressWarnings({"rawtypes", "unchecked"})
328 public class Scanner { 327 public class Scanner {
329 328
330 static final char EOL = '\n'; 329 static final char EOL = '\n';
331 static final int eofSym = 0; 330 static final int eofSym = 0;
332 static final int maxT = 31; 331 static final int maxT = 31;
333 static final int noSym = 31; 332 static final int noSym = 31;
334 333
335 334
336 public Buffer buffer; // scanner buffer 335 public Buffer buffer; // scanner buffer
337 336
338 Token t; // current token 337 Token t; // current token
341 int charPos; // position by unicode characters starting with 0 340 int charPos; // position by unicode characters starting with 0
342 int col; // column number of current character 341 int col; // column number of current character
343 int line; // line number of current character 342 int line; // line number of current character
344 int oldEols; // EOLs that appeared in a comment; 343 int oldEols; // EOLs that appeared in a comment;
345 static final StartStates start; // maps initial token character to start state 344 static final StartStates start; // maps initial token character to start state
346 static final Map literals; // maps literal strings to literal kinds 345 static final Map<String, Integer> literals; // maps literal strings to literal kinds
347 346
348 Token tokens; // list of tokens already peeked (first token is a dummy) 347 Token tokens; // list of tokens already peeked (first token is a dummy)
349 Token pt; // current peek token 348 Token pt; // current peek token
350 349
351 char[] tval = new char[16]; // token text used in NextToken(), dynamically enlarged 350 char[] tval = new char[16]; // token text used in NextToken(), dynamically enlarged
352 int tlen; // length of current token 351 int tlen; // length of current token
353 352
354 static { 353 static {
355 start = new StartStates(); 354 start = new StartStates();
356 literals = new HashMap(); 355 literals = new HashMap<>();
357 for (int i = 65; i <= 90; ++i) start.set(i, 1); 356 for (int i = 65; i <= 90; ++i) start.set(i, 1);
358 for (int i = 97; i <= 122; ++i) start.set(i, 1); 357 for (int i = 97; i <= 122; ++i) start.set(i, 1);
359 for (int i = 49; i <= 57; ++i) start.set(i, 4); 358 for (int i = 49; i <= 57; ++i) start.set(i, 4);
360 start.set(34, 2); 359 start.set(34, 2);
361 start.set(48, 5); 360 start.set(48, 5);
362 start.set(40, 6); 361 start.set(40, 6);
363 start.set(44, 7); 362 start.set(44, 7);
364 start.set(41, 8); 363 start.set(41, 8);
365 start.set(123, 9); 364 start.set(123, 9);
366 start.set(125, 10); 365 start.set(125, 10);
367 start.set(59, 11); 366 start.set(59, 11);
368 start.set(124, 12); 367 start.set(124, 12);
369 start.set(38, 14); 368 start.set(38, 14);
370 start.set(60, 26); 369 start.set(60, 26);
371 start.set(62, 27); 370 start.set(62, 27);
372 start.set(61, 28); 371 start.set(61, 28);
373 start.set(33, 19); 372 start.set(33, 19);
374 start.set(43, 21); 373 start.set(43, 21);
375 start.set(45, 22); 374 start.set(45, 22);
376 start.set(42, 23); 375 start.set(42, 23);
377 start.set(47, 24); 376 start.set(47, 24);
378 start.set(46, 25); 377 start.set(46, 25);
379 start.set(Buffer.EOF, -1); 378 start.set(Buffer.EOF, -1);
380 literals.put("function", new Integer(4)); 379 literals.put("function", new Integer(4));
381 literals.put("break", new Integer(10)); 380 literals.put("break", new Integer(10));
382 literals.put("continue", new Integer(12)); 381 literals.put("continue", new Integer(12));
383 literals.put("while", new Integer(13)); 382 literals.put("while", new Integer(13));
384 literals.put("if", new Integer(14)); 383 literals.put("if", new Integer(14));
385 literals.put("else", new Integer(15)); 384 literals.put("else", new Integer(15));
386 literals.put("return", new Integer(16)); 385 literals.put("return", new Integer(16));
387 386
388 } 387 }
389 388
390 public Scanner(String fileName) { 389 public Scanner(String fileName) {
391 buffer = new Buffer(fileName); 390 buffer = new Buffer(fileName);
447 char[] newBuf = new char[2 * tval.length]; 446 char[] newBuf = new char[2 * tval.length];
448 System.arraycopy(tval, 0, newBuf, 0, tval.length); 447 System.arraycopy(tval, 0, newBuf, 0, tval.length);
449 tval = newBuf; 448 tval = newBuf;
450 } 449 }
451 if (ch != Buffer.EOF) { 450 if (ch != Buffer.EOF) {
452 tval[tlen++] = (char)ch; 451 tval[tlen++] = (char)ch;
453 452
454 NextCh(); 453 NextCh();
455 } 454 }
456 } 455 }
457 456
458 457
459 boolean Comment0() { 458 boolean Comment0() {
460 int level = 1, pos0 = pos, line0 = line, col0 = col, charPos0 = charPos; 459 int level = 1, pos0 = pos, line0 = line, col0 = col, charPos0 = charPos;
461 NextCh(); 460 NextCh();
462 if (ch == '/') { 461 if (ch == '/') {
463 NextCh(); 462 NextCh();
464 for(;;) { 463 for(;;) {
465 if (ch == 10) { 464 if (ch == 10) {
466 level--; 465 level--;
467 if (level == 0) { oldEols = line - line0; NextCh(); return true; } 466 if (level == 0) { oldEols = line - line0; NextCh(); return true; }
468 NextCh(); 467 NextCh();
469 } else if (ch == Buffer.EOF) return false; 468 } else if (ch == Buffer.EOF) return false;
470 else NextCh(); 469 else NextCh();
471 } 470 }
472 } else { 471 } else {
473 buffer.setPos(pos0); NextCh(); line = line0; col = col0; charPos = charPos0; 472 buffer.setPos(pos0); NextCh(); line = line0; col = col0; charPos = charPos0;
474 } 473 }
475 return false; 474 return false;
476 } 475 }
477 476
478 boolean Comment1() { 477 boolean Comment1() {
479 int level = 1, pos0 = pos, line0 = line, col0 = col, charPos0 = charPos; 478 int level = 1, pos0 = pos, line0 = line, col0 = col, charPos0 = charPos;
480 NextCh(); 479 NextCh();
481 if (ch == '*') { 480 if (ch == '*') {
482 NextCh(); 481 NextCh();
483 for(;;) { 482 for(;;) {
484 if (ch == '*') { 483 if (ch == '*') {
485 NextCh(); 484 NextCh();
486 if (ch == '/') { 485 if (ch == '/') {
487 level--; 486 level--;
488 if (level == 0) { oldEols = line - line0; NextCh(); return true; } 487 if (level == 0) { oldEols = line - line0; NextCh(); return true; }
489 NextCh(); 488 NextCh();
490 } 489 }
491 } else if (ch == Buffer.EOF) return false; 490 } else if (ch == Buffer.EOF) return false;
492 else NextCh(); 491 else NextCh();
493 } 492 }
494 } else { 493 } else {
495 buffer.setPos(pos0); NextCh(); line = line0; col = col0; charPos = charPos0; 494 buffer.setPos(pos0); NextCh(); line = line0; col = col0; charPos = charPos0;
496 } 495 }
497 return false; 496 return false;
498 } 497 }
499 498
500 499
501 void CheckLiteral() { 500 void CheckLiteral() {
502 String val = t.val; 501 String val = t.val;
503 502
507 } 506 }
508 } 507 }
509 508
510 Token NextToken() { 509 Token NextToken() {
511 while (ch == ' ' || 510 while (ch == ' ' ||
512 ch >= 9 && ch <= 10 || ch == 13 511 ch >= 9 && ch <= 10 || ch == 13
513 ) NextCh(); 512 ) NextCh();
514 if (ch == '/' && Comment0() ||ch == '/' && Comment1()) return NextToken(); 513 if (ch == '/' && Comment0() ||ch == '/' && Comment1()) return NextToken();
515 int recKind = noSym; 514 int recKind = noSym;
516 int recEnd = pos; 515 int recEnd = pos;
517 t = new Token(); 516 t = new Token();
518 t.pos = pos; 517 t.pos = pos;
519 t.col = col; 518 t.col = col;
535 SetScannerBehindT(); 534 SetScannerBehindT();
536 } 535 }
537 t.kind = recKind; 536 t.kind = recKind;
538 break loop; 537 break loop;
539 } // NextCh already done 538 } // NextCh already done
540 case 1: 539 case 1:
541 recEnd = pos; recKind = 1; 540 recEnd = pos; recKind = 1;
542 if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {AddCh(); state = 1; break;} 541 if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {AddCh(); state = 1; break;}
543 else {t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t;} 542 else {t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t;}
544 case 2: 543 case 2:
545 if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); state = 2; break;} 544 if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535) {AddCh(); state = 2; break;}
546 else if (ch == '"') {AddCh(); state = 3; break;} 545 else if (ch == '"') {AddCh(); state = 3; break;}
547 else {state = 0; break;} 546 else {state = 0; break;}
548 case 3: 547 case 3:
549 {t.kind = 2; break loop;} 548 {t.kind = 2; break loop;}
550 case 4: 549 case 4:
551 recEnd = pos; recKind = 3; 550 recEnd = pos; recKind = 3;
552 if (ch >= '0' && ch <= '9') {AddCh(); state = 4; break;} 551 if (ch >= '0' && ch <= '9') {AddCh(); state = 4; break;}
553 else {t.kind = 3; break loop;} 552 else {t.kind = 3; break loop;}
554 case 5: 553 case 5:
555 {t.kind = 3; break loop;} 554 {t.kind = 3; break loop;}
556 case 6: 555 case 6:
557 {t.kind = 5; break loop;} 556 {t.kind = 5; break loop;}
558 case 7: 557 case 7:
559 {t.kind = 6; break loop;} 558 {t.kind = 6; break loop;}
560 case 8: 559 case 8:
561 {t.kind = 7; break loop;} 560 {t.kind = 7; break loop;}
562 case 9: 561 case 9:
563 {t.kind = 8; break loop;} 562 {t.kind = 8; break loop;}
564 case 10: 563 case 10:
565 {t.kind = 9; break loop;} 564 {t.kind = 9; break loop;}
566 case 11: 565 case 11:
567 {t.kind = 11; break loop;} 566 {t.kind = 11; break loop;}
568 case 12: 567 case 12:
569 if (ch == '|') {AddCh(); state = 13; break;} 568 if (ch == '|') {AddCh(); state = 13; break;}
570 else {state = 0; break;} 569 else {state = 0; break;}
571 case 13: 570 case 13:
572 {t.kind = 17; break loop;} 571 {t.kind = 17; break loop;}
573 case 14: 572 case 14:
574 if (ch == '&') {AddCh(); state = 15; break;} 573 if (ch == '&') {AddCh(); state = 15; break;}
575 else {state = 0; break;} 574 else {state = 0; break;}
576 case 15: 575 case 15:
577 {t.kind = 18; break loop;} 576 {t.kind = 18; break loop;}
578 case 16: 577 case 16:
579 {t.kind = 20; break loop;} 578 {t.kind = 20; break loop;}
580 case 17: 579 case 17:
581 {t.kind = 22; break loop;} 580 {t.kind = 22; break loop;}
582 case 18: 581 case 18:
583 {t.kind = 23; break loop;} 582 {t.kind = 23; break loop;}
584 case 19: 583 case 19:
585 if (ch == '=') {AddCh(); state = 20; break;} 584 if (ch == '=') {AddCh(); state = 20; break;}
586 else {state = 0; break;} 585 else {state = 0; break;}
587 case 20: 586 case 20:
588 {t.kind = 24; break loop;} 587 {t.kind = 24; break loop;}
589 case 21: 588 case 21:
590 {t.kind = 25; break loop;} 589 {t.kind = 25; break loop;}
591 case 22: 590 case 22:
592 {t.kind = 26; break loop;} 591 {t.kind = 26; break loop;}
593 case 23: 592 case 23:
594 {t.kind = 27; break loop;} 593 {t.kind = 27; break loop;}
595 case 24: 594 case 24:
596 {t.kind = 28; break loop;} 595 {t.kind = 28; break loop;}
597 case 25: 596 case 25:
598 {t.kind = 30; break loop;} 597 {t.kind = 30; break loop;}
599 case 26: 598 case 26:
600 recEnd = pos; recKind = 19; 599 recEnd = pos; recKind = 19;
601 if (ch == '=') {AddCh(); state = 16; break;} 600 if (ch == '=') {AddCh(); state = 16; break;}
602 else {t.kind = 19; break loop;} 601 else {t.kind = 19; break loop;}
603 case 27: 602 case 27:
604 recEnd = pos; recKind = 21; 603 recEnd = pos; recKind = 21;
605 if (ch == '=') {AddCh(); state = 17; break;} 604 if (ch == '=') {AddCh(); state = 17; break;}
606 else {t.kind = 21; break loop;} 605 else {t.kind = 21; break loop;}
607 case 28: 606 case 28:
608 recEnd = pos; recKind = 29; 607 recEnd = pos; recKind = 29;
609 if (ch == '=') {AddCh(); state = 18; break;} 608 if (ch == '=') {AddCh(); state = 18; break;}
610 else {t.kind = 29; break loop;} 609 else {t.kind = 29; break loop;}
611 610
612 } 611 }
613 } 612 }
614 t.val = new String(tval, 0, tlen); 613 t.val = new String(tval, 0, tlen);
615 return t; 614 return t;