Mercurial > hg > graal-jvmci-8
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); |