comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/Scanner.java @ 20169:65d29fa81397

DSL: add support for hex, oct and binary integer literals.
author Chris Seaton <chris.seaton@oracle.com>
date Sun, 05 Apr 2015 19:51:46 +0100
parents 62c43fcf5be2
children b1530a6cce8c
comparison
equal deleted inserted replaced
20168:f0f725496f2a 20169:65d29fa81397
338 literals = new HashMap(); 338 literals = new HashMap();
339 for (int i = 36; i <= 36; ++i) start.set(i, 1); 339 for (int i = 36; i <= 36; ++i) start.set(i, 1);
340 for (int i = 65; i <= 90; ++i) start.set(i, 1); 340 for (int i = 65; i <= 90; ++i) start.set(i, 1);
341 for (int i = 95; i <= 95; ++i) start.set(i, 1); 341 for (int i = 95; i <= 95; ++i) start.set(i, 1);
342 for (int i = 97; i <= 122; ++i) start.set(i, 1); 342 for (int i = 97; i <= 122; ++i) start.set(i, 1);
343 for (int i = 49; i <= 57; ++i) start.set(i, 2); 343 for (int i = 49; i <= 57; ++i) start.set(i, 6);
344 start.set(48, 3); 344 start.set(48, 2);
345 start.set(124, 4); 345 start.set(124, 7);
346 start.set(60, 15); 346 start.set(60, 18);
347 start.set(62, 16); 347 start.set(62, 19);
348 start.set(61, 8); 348 start.set(61, 11);
349 start.set(33, 17); 349 start.set(33, 20);
350 start.set(40, 11); 350 start.set(40, 14);
351 start.set(41, 12); 351 start.set(41, 15);
352 start.set(44, 13); 352 start.set(44, 16);
353 start.set(46, 14); 353 start.set(46, 17);
354 start.set(Buffer.EOF, -1); 354 start.set(Buffer.EOF, -1);
355 355
356 } 356 }
357 357
358 public Scanner(String fileName) { 358 public Scanner(String fileName) {
415 char[] newBuf = new char[2 * tval.length]; 415 char[] newBuf = new char[2 * tval.length];
416 System.arraycopy(tval, 0, newBuf, 0, tval.length); 416 System.arraycopy(tval, 0, newBuf, 0, tval.length);
417 tval = newBuf; 417 tval = newBuf;
418 } 418 }
419 if (ch != Buffer.EOF) { 419 if (ch != Buffer.EOF) {
420 tval[tlen++] = (char)ch; 420 tval[tlen++] = (char)ch;
421 421
422 NextCh(); 422 NextCh();
423 } 423 }
424 } 424 }
425 425
433 t.kind = ((Integer) kind).intValue(); 433 t.kind = ((Integer) kind).intValue();
434 } 434 }
435 } 435 }
436 436
437 Token NextToken() { 437 Token NextToken() {
438 while (ch == ' ' || 438 while (ch == ' ' ||
439 false 439 false
440 ) NextCh(); 440 ) NextCh();
441 441
442 int recKind = noSym; 442 int recKind = noSym;
443 int recEnd = pos; 443 int recEnd = pos;
468 recEnd = pos; recKind = 1; 468 recEnd = pos; recKind = 1;
469 if (ch == '$' || ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z') {AddCh(); state = 1; break;} 469 if (ch == '$' || ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z') {AddCh(); state = 1; break;}
470 else {t.kind = 1; break loop;} 470 else {t.kind = 1; break loop;}
471 case 2: 471 case 2:
472 recEnd = pos; recKind = 2; 472 recEnd = pos; recKind = 2;
473 if (ch >= '0' && ch <= '9') {AddCh(); state = 2; break;} 473 if (ch >= '0' && ch <= '7') {AddCh(); state = 5; break;}
474 else if (ch == 'x') {AddCh(); state = 3; break;}
475 else if (ch == 'b') {AddCh(); state = 4; break;}
474 else {t.kind = 2; break loop;} 476 else {t.kind = 2; break loop;}
475 case 3: 477 case 3:
476 {t.kind = 2; break loop;} 478 recEnd = pos; recKind = 2;
479 if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f') {AddCh(); state = 3; break;}
480 else {t.kind = 2; break loop;}
477 case 4: 481 case 4:
478 if (ch == '|') {AddCh(); state = 5; break;} 482 recEnd = pos; recKind = 2;
483 if (ch >= '0' && ch <= '1') {AddCh(); state = 4; break;}
484 else {t.kind = 2; break loop;}
485 case 5:
486 recEnd = pos; recKind = 2;
487 if (ch >= '0' && ch <= '7') {AddCh(); state = 5; break;}
488 else {t.kind = 2; break loop;}
489 case 6:
490 recEnd = pos; recKind = 2;
491 if (ch >= '0' && ch <= '9') {AddCh(); state = 6; break;}
492 else {t.kind = 2; break loop;}
493 case 7:
494 if (ch == '|') {AddCh(); state = 8; break;}
479 else {state = 0; break;} 495 else {state = 0; break;}
480 case 5: 496 case 8:
481 {t.kind = 3; break loop;} 497 {t.kind = 3; break loop;}
482 case 6: 498 case 9:
483 {t.kind = 5; break loop;} 499 {t.kind = 5; break loop;}
484 case 7: 500 case 10:
485 {t.kind = 7; break loop;} 501 {t.kind = 7; break loop;}
486 case 8: 502 case 11:
503 if (ch == '=') {AddCh(); state = 12; break;}
504 else {state = 0; break;}
505 case 12:
506 {t.kind = 8; break loop;}
507 case 13:
508 {t.kind = 9; break loop;}
509 case 14:
510 {t.kind = 11; break loop;}
511 case 15:
512 {t.kind = 12; break loop;}
513 case 16:
514 {t.kind = 13; break loop;}
515 case 17:
516 {t.kind = 14; break loop;}
517 case 18:
518 recEnd = pos; recKind = 4;
487 if (ch == '=') {AddCh(); state = 9; break;} 519 if (ch == '=') {AddCh(); state = 9; break;}
488 else {state = 0; break;}
489 case 9:
490 {t.kind = 8; break loop;}
491 case 10:
492 {t.kind = 9; break loop;}
493 case 11:
494 {t.kind = 11; break loop;}
495 case 12:
496 {t.kind = 12; break loop;}
497 case 13:
498 {t.kind = 13; break loop;}
499 case 14:
500 {t.kind = 14; break loop;}
501 case 15:
502 recEnd = pos; recKind = 4;
503 if (ch == '=') {AddCh(); state = 6; break;}
504 else {t.kind = 4; break loop;} 520 else {t.kind = 4; break loop;}
505 case 16: 521 case 19:
506 recEnd = pos; recKind = 6; 522 recEnd = pos; recKind = 6;
507 if (ch == '=') {AddCh(); state = 7; break;} 523 if (ch == '=') {AddCh(); state = 10; break;}
508 else {t.kind = 6; break loop;} 524 else {t.kind = 6; break loop;}
509 case 17: 525 case 20:
510 recEnd = pos; recKind = 10; 526 recEnd = pos; recKind = 10;
511 if (ch == '=') {AddCh(); state = 10; break;} 527 if (ch == '=') {AddCh(); state = 13; break;}
512 else {t.kind = 10; break loop;} 528 else {t.kind = 10; break loop;}
513 529
514 } 530 }
515 } 531 }
516 t.val = new String(tval, 0, tlen); 532 t.val = new String(tval, 0, tlen);