1 // Generated with DParserGen. 2 module dparsergen.generator.grammarebnf_lexer; 3 import dparsergen.core.grammarinfo; 4 import dparsergen.core.parseexception; 5 import std.conv; 6 import std.string; 7 import std.typecons; 8 9 enum SymbolID startTokenID = 0; 10 static assert(allNonterminalTokens.length < SymbolID.max - startTokenID); 11 enum SymbolID endTokenID = startTokenID + allNonterminalTokens.length; 12 13 SymbolID getTokenID(string tok) 14 { 15 foreach (i; 0 .. allNonterminalTokens.length) 16 if (allNonterminalTokens[i].name == tok) 17 return cast(SymbolID)(startTokenID + i); 18 return SymbolID.max; 19 } 20 21 struct Lexer(Location, bool includeIgnoredTokens = false) 22 { 23 alias LocationDiff = typeof(Location.init - Location.init); 24 string input; 25 this(string input, Location startLocation = Location.init) 26 { 27 this.input = input; 28 this.front.currentLocation = startLocation; 29 popFront; 30 } 31 32 enum tokenID(string tok) = getTokenID(tok); 33 string tokenName(size_t id) 34 { 35 return allNonterminalTokens[id - startTokenID].name; 36 } 37 38 static struct Front 39 { 40 string content; 41 SymbolID symbol; 42 Location currentLocation; 43 static if (includeIgnoredTokens) 44 bool isIgnoreToken; 45 46 Location currentTokenEnd() 47 { 48 return currentLocation + LocationDiff.fromStr(content); 49 } 50 } 51 52 Front front; 53 bool empty; 54 55 void popFront() 56 { 57 input = input[front.content.length .. $]; 58 front.currentLocation = front.currentLocation + LocationDiff.fromStr(front.content); 59 60 popFrontImpl(); 61 } 62 63 void popFrontImpl() 64 { 65 size_t foundLength; 66 SymbolID foundSymbol = SymbolID.max; 67 bool foundIsIgnore; 68 69 string inputCopy = input; 70 71 size_t storedStart = size_t.max; 72 string storedString; 73 74 goto start; 75 76 state0: 77 // (Identifier) (StringLiteral) (CharacterSetLiteral) (IntegerLiteral) (";") ("=") ("fragment") ("token") ("(") (")") (",") ("...") ("option") ("import") ("match") ("@") (":") ("{") ("}") ("?") ("!") ("<") (">") ("*") (">>") ("<<") ("-") ("anytoken") ("|") ("^") ("+") ("t(") (Space) (LineComment) (BlockComment) (NestingBlockComment) 78 // path: 79 start: 80 { 81 if (inputCopy.length == 0) 82 { 83 if (input.ptr == inputCopy.ptr) 84 goto lexerend; 85 else if (foundSymbol != SymbolID.max) 86 goto lexerend; 87 else 88 throw lexerException("EOF", "[\\t-\\n\\r -\\\"(-\\[\\^-_a-}]", inputCopy.ptr - input.ptr); 89 } 90 char currentChar = inputCopy[0]; 91 if (currentChar < 0x80) 92 { 93 if (currentChar == '!') 94 { 95 inputCopy = inputCopy[1 .. $]; 96 goto state97; 97 } 98 else if (currentChar == '\"') 99 { 100 inputCopy = inputCopy[1 .. $]; 101 goto state49; 102 } 103 else if (currentChar == '(') 104 { 105 inputCopy = inputCopy[1 .. $]; 106 goto state86; 107 } 108 else if (currentChar == ')') 109 { 110 inputCopy = inputCopy[1 .. $]; 111 goto state87; 112 } 113 else if (currentChar == '*') 114 { 115 inputCopy = inputCopy[1 .. $]; 116 goto state102; 117 } 118 else if (currentChar == '+') 119 { 120 inputCopy = inputCopy[1 .. $]; 121 goto state106; 122 } 123 else if (currentChar == ',') 124 { 125 inputCopy = inputCopy[1 .. $]; 126 goto state88; 127 } 128 else if (currentChar == '-') 129 { 130 inputCopy = inputCopy[1 .. $]; 131 goto state103; 132 } 133 else if (currentChar == '.') 134 { 135 inputCopy = inputCopy[1 .. $]; 136 goto state89; 137 } 138 else if (currentChar == '/') 139 { 140 inputCopy = inputCopy[1 .. $]; 141 goto state2; 142 } 143 else if (currentChar == '0') 144 { 145 inputCopy = inputCopy[1 .. $]; 146 goto state83; 147 } 148 else if (currentChar == ':') 149 { 150 inputCopy = inputCopy[1 .. $]; 151 goto state93; 152 } 153 else if (currentChar == ';') 154 { 155 inputCopy = inputCopy[1 .. $]; 156 goto state84; 157 } 158 else if (currentChar == '<') 159 { 160 inputCopy = inputCopy[1 .. $]; 161 goto state98; 162 } 163 else if (currentChar == '=') 164 { 165 inputCopy = inputCopy[1 .. $]; 166 goto state85; 167 } 168 else if (currentChar == '>') 169 { 170 inputCopy = inputCopy[1 .. $]; 171 goto state100; 172 } 173 else if (currentChar == '?') 174 { 175 inputCopy = inputCopy[1 .. $]; 176 goto state96; 177 } 178 else if (currentChar == '@') 179 { 180 inputCopy = inputCopy[1 .. $]; 181 goto state92; 182 } 183 else if (currentChar == '[') 184 { 185 inputCopy = inputCopy[1 .. $]; 186 goto state60; 187 } 188 else if (currentChar == '^') 189 { 190 inputCopy = inputCopy[1 .. $]; 191 goto state105; 192 } 193 else if (currentChar == 'a') 194 { 195 inputCopy = inputCopy[1 .. $]; 196 goto state18; 197 } 198 else if (currentChar == 'f') 199 { 200 inputCopy = inputCopy[1 .. $]; 201 goto state9; 202 } 203 else if (currentChar == 'i') 204 { 205 inputCopy = inputCopy[1 .. $]; 206 goto state43; 207 } 208 else if (currentChar == 'm') 209 { 210 inputCopy = inputCopy[1 .. $]; 211 goto state26; 212 } 213 else if (currentChar == 'o') 214 { 215 inputCopy = inputCopy[1 .. $]; 216 goto state37; 217 } 218 else if (currentChar == 't') 219 { 220 inputCopy = inputCopy[1 .. $]; 221 goto state31; 222 } 223 else if (currentChar == '{') 224 { 225 inputCopy = inputCopy[1 .. $]; 226 goto state94; 227 } 228 else if (currentChar == '|') 229 { 230 inputCopy = inputCopy[1 .. $]; 231 goto state104; 232 } 233 else if (currentChar == '}') 234 { 235 inputCopy = inputCopy[1 .. $]; 236 goto state95; 237 } 238 else if ((currentChar >= '1' && currentChar <= '9')) 239 { 240 inputCopy = inputCopy[1 .. $]; 241 goto state82; 242 } 243 else if ((currentChar >= '\t' && currentChar <= '\n') || currentChar == '\r' || currentChar == ' ') 244 { 245 inputCopy = inputCopy[1 .. $]; 246 goto state1; 247 } 248 else if ((currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'b' && currentChar <= 'z')) 249 { 250 inputCopy = inputCopy[1 .. $]; 251 goto state17; 252 } 253 else 254 { 255 if (foundSymbol != SymbolID.max) 256 goto lexerend; 257 else 258 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[\\t-\\n\\r -\\\"(-\\[\\^-_a-}]", inputCopy.ptr - input.ptr); 259 } 260 } 261 else 262 { 263 string inputCopyNext = inputCopy; 264 import std.utf; 265 266 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 267 268 { 269 if (foundSymbol != SymbolID.max) 270 goto lexerend; 271 else 272 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[\\t-\\n\\r -\\\"(-\\[\\^-_a-}]", inputCopy.ptr - input.ptr); 273 } 274 } 275 } 276 277 state1: 278 // Space 279 // path: [\t-\n\r ] 280 { 281 if (inputCopy.length == 0) 282 goto endstate1; 283 char currentChar = inputCopy[0]; 284 if (currentChar < 0x80) 285 { 286 if ((currentChar >= '\t' && currentChar <= '\n') || currentChar == '\r' || currentChar == ' ') 287 { 288 inputCopy = inputCopy[1 .. $]; 289 goto state1; 290 } 291 else 292 { 293 goto endstate1; 294 } 295 } 296 else 297 { 298 string inputCopyNext = inputCopy; 299 import std.utf; 300 301 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 302 303 { 304 goto endstate1; 305 } 306 } 307 } 308 endstate1: 309 { 310 assert(inputCopy.ptr >= input.ptr); 311 foundSymbol = tokenID!"Space"; 312 foundLength = inputCopy.ptr - input.ptr; 313 foundIsIgnore = true; 314 goto lexerend; 315 } 316 317 state2: 318 // (LineComment) (BlockComment) (NestingBlockComment) 319 // path: [/] 320 { 321 if (inputCopy.length == 0) 322 { 323 if (input.ptr == inputCopy.ptr) 324 goto lexerend; 325 else if (foundSymbol != SymbolID.max) 326 goto lexerend; 327 else 328 throw lexerException("EOF", "[*-+/]", inputCopy.ptr - input.ptr); 329 } 330 char currentChar = inputCopy[0]; 331 if (currentChar < 0x80) 332 { 333 if (currentChar == '*') 334 { 335 inputCopy = inputCopy[1 .. $]; 336 goto state4; 337 } 338 else if (currentChar == '+') 339 { 340 inputCopy = inputCopy[1 .. $]; 341 goto state7; 342 } 343 else if (currentChar == '/') 344 { 345 inputCopy = inputCopy[1 .. $]; 346 goto state3; 347 } 348 else 349 { 350 if (foundSymbol != SymbolID.max) 351 goto lexerend; 352 else 353 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[*-+/]", inputCopy.ptr - input.ptr); 354 } 355 } 356 else 357 { 358 string inputCopyNext = inputCopy; 359 import std.utf; 360 361 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 362 363 { 364 if (foundSymbol != SymbolID.max) 365 goto lexerend; 366 else 367 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[*-+/]", inputCopy.ptr - input.ptr); 368 } 369 } 370 } 371 372 state3: 373 // LineComment 374 // path: [/] [/] 375 { 376 if (inputCopy.length == 0) 377 goto endstate3; 378 char currentChar = inputCopy[0]; 379 if (currentChar < 0x80) 380 { 381 if (currentChar == '\n' || currentChar == '\r') 382 { 383 goto endstate3; 384 } 385 386 { 387 inputCopy = inputCopy[1 .. $]; 388 goto state3; 389 } 390 } 391 else 392 { 393 string inputCopyNext = inputCopy; 394 import std.utf; 395 396 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 397 398 { 399 inputCopy = inputCopyNext; 400 goto state3; 401 } 402 } 403 } 404 endstate3: 405 { 406 assert(inputCopy.ptr >= input.ptr); 407 foundSymbol = tokenID!"LineComment"; 408 foundLength = inputCopy.ptr - input.ptr; 409 foundIsIgnore = true; 410 goto lexerend; 411 } 412 413 state4: 414 // (BlockComment) 415 // path: [/] [*] 416 { 417 if (inputCopy.length == 0) 418 { 419 if (input.ptr == inputCopy.ptr) 420 goto lexerend; 421 else if (foundSymbol != SymbolID.max) 422 goto lexerend; 423 else 424 throw lexerException("EOF", "[^]", inputCopy.ptr - input.ptr); 425 } 426 char currentChar = inputCopy[0]; 427 if (currentChar < 0x80) 428 { 429 if (currentChar == '*') 430 { 431 inputCopy = inputCopy[1 .. $]; 432 goto state5; 433 } 434 else 435 { 436 inputCopy = inputCopy[1 .. $]; 437 goto state4; 438 } 439 } 440 else 441 { 442 string inputCopyNext = inputCopy; 443 import std.utf; 444 445 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 446 447 { 448 inputCopy = inputCopyNext; 449 goto state4; 450 } 451 } 452 } 453 454 state5: 455 // (BlockComment) 456 // path: [/] [*] [*] 457 { 458 if (inputCopy.length == 0) 459 { 460 if (input.ptr == inputCopy.ptr) 461 goto lexerend; 462 else if (foundSymbol != SymbolID.max) 463 goto lexerend; 464 else 465 throw lexerException("EOF", "[^]", inputCopy.ptr - input.ptr); 466 } 467 char currentChar = inputCopy[0]; 468 if (currentChar < 0x80) 469 { 470 if (currentChar == '*') 471 { 472 inputCopy = inputCopy[1 .. $]; 473 goto state5; 474 } 475 else if (currentChar == '/') 476 { 477 inputCopy = inputCopy[1 .. $]; 478 goto state6; 479 } 480 else 481 { 482 inputCopy = inputCopy[1 .. $]; 483 goto state4; 484 } 485 } 486 else 487 { 488 string inputCopyNext = inputCopy; 489 import std.utf; 490 491 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 492 493 { 494 inputCopy = inputCopyNext; 495 goto state4; 496 } 497 } 498 } 499 500 state6: 501 // BlockComment 502 // path: [/] [*] [*] [/] 503 { 504 if (inputCopy.length == 0) 505 goto endstate6; 506 goto endstate6; 507 } 508 endstate6: 509 { 510 assert(inputCopy.ptr >= input.ptr); 511 foundSymbol = tokenID!"BlockComment"; 512 foundLength = inputCopy.ptr - input.ptr; 513 foundIsIgnore = true; 514 goto lexerend; 515 } 516 517 state7: 518 // (NestingBlockComment) 519 // path: [/] [+] 520 { 521 // RecursiveLexer 522 if (lexPart0(inputCopy, foundSymbol != SymbolID.max)) 523 goto state8; 524 else 525 goto lexerend; 526 } 527 528 state8: 529 // NestingBlockComment 530 // path: [/] [+] [] 531 { 532 if (inputCopy.length == 0) 533 goto endstate8; 534 goto endstate8; 535 } 536 endstate8: 537 { 538 assert(inputCopy.ptr >= input.ptr); 539 foundSymbol = tokenID!"NestingBlockComment"; 540 foundLength = inputCopy.ptr - input.ptr; 541 foundIsIgnore = true; 542 goto lexerend; 543 } 544 545 state9: 546 // Identifier ("fragment") 547 // path: [f] 548 { 549 if (inputCopy.length == 0) 550 goto endstate9; 551 char currentChar = inputCopy[0]; 552 if (currentChar < 0x80) 553 { 554 if (currentChar == 'r') 555 { 556 inputCopy = inputCopy[1 .. $]; 557 goto state10; 558 } 559 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 560 { 561 inputCopy = inputCopy[1 .. $]; 562 goto state17; 563 } 564 else 565 { 566 goto endstate9; 567 } 568 } 569 else 570 { 571 string inputCopyNext = inputCopy; 572 import std.utf; 573 574 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 575 576 { 577 goto endstate9; 578 } 579 } 580 } 581 endstate9: 582 { 583 assert(inputCopy.ptr >= input.ptr); 584 foundSymbol = tokenID!"Identifier"; 585 foundLength = inputCopy.ptr - input.ptr; 586 foundIsIgnore = false; 587 goto lexerend; 588 } 589 590 state10: 591 // Identifier ("fragment") 592 // path: [f] [r] 593 { 594 if (inputCopy.length == 0) 595 goto endstate10; 596 char currentChar = inputCopy[0]; 597 if (currentChar < 0x80) 598 { 599 if (currentChar == 'a') 600 { 601 inputCopy = inputCopy[1 .. $]; 602 goto state11; 603 } 604 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'b' && currentChar <= 'z')) 605 { 606 inputCopy = inputCopy[1 .. $]; 607 goto state17; 608 } 609 else 610 { 611 goto endstate10; 612 } 613 } 614 else 615 { 616 string inputCopyNext = inputCopy; 617 import std.utf; 618 619 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 620 621 { 622 goto endstate10; 623 } 624 } 625 } 626 endstate10: 627 { 628 assert(inputCopy.ptr >= input.ptr); 629 foundSymbol = tokenID!"Identifier"; 630 foundLength = inputCopy.ptr - input.ptr; 631 foundIsIgnore = false; 632 goto lexerend; 633 } 634 635 state11: 636 // Identifier ("fragment") 637 // path: [f] [r] [a] 638 { 639 if (inputCopy.length == 0) 640 goto endstate11; 641 char currentChar = inputCopy[0]; 642 if (currentChar < 0x80) 643 { 644 if (currentChar == 'g') 645 { 646 inputCopy = inputCopy[1 .. $]; 647 goto state12; 648 } 649 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 650 { 651 inputCopy = inputCopy[1 .. $]; 652 goto state17; 653 } 654 else 655 { 656 goto endstate11; 657 } 658 } 659 else 660 { 661 string inputCopyNext = inputCopy; 662 import std.utf; 663 664 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 665 666 { 667 goto endstate11; 668 } 669 } 670 } 671 endstate11: 672 { 673 assert(inputCopy.ptr >= input.ptr); 674 foundSymbol = tokenID!"Identifier"; 675 foundLength = inputCopy.ptr - input.ptr; 676 foundIsIgnore = false; 677 goto lexerend; 678 } 679 680 state12: 681 // Identifier ("fragment") 682 // path: [f] [r] [a] [g] 683 { 684 if (inputCopy.length == 0) 685 goto endstate12; 686 char currentChar = inputCopy[0]; 687 if (currentChar < 0x80) 688 { 689 if (currentChar == 'm') 690 { 691 inputCopy = inputCopy[1 .. $]; 692 goto state13; 693 } 694 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 695 { 696 inputCopy = inputCopy[1 .. $]; 697 goto state17; 698 } 699 else 700 { 701 goto endstate12; 702 } 703 } 704 else 705 { 706 string inputCopyNext = inputCopy; 707 import std.utf; 708 709 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 710 711 { 712 goto endstate12; 713 } 714 } 715 } 716 endstate12: 717 { 718 assert(inputCopy.ptr >= input.ptr); 719 foundSymbol = tokenID!"Identifier"; 720 foundLength = inputCopy.ptr - input.ptr; 721 foundIsIgnore = false; 722 goto lexerend; 723 } 724 725 state13: 726 // Identifier ("fragment") 727 // path: [f] [r] [a] [g] [m] 728 { 729 if (inputCopy.length == 0) 730 goto endstate13; 731 char currentChar = inputCopy[0]; 732 if (currentChar < 0x80) 733 { 734 if (currentChar == 'e') 735 { 736 inputCopy = inputCopy[1 .. $]; 737 goto state14; 738 } 739 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 740 { 741 inputCopy = inputCopy[1 .. $]; 742 goto state17; 743 } 744 else 745 { 746 goto endstate13; 747 } 748 } 749 else 750 { 751 string inputCopyNext = inputCopy; 752 import std.utf; 753 754 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 755 756 { 757 goto endstate13; 758 } 759 } 760 } 761 endstate13: 762 { 763 assert(inputCopy.ptr >= input.ptr); 764 foundSymbol = tokenID!"Identifier"; 765 foundLength = inputCopy.ptr - input.ptr; 766 foundIsIgnore = false; 767 goto lexerend; 768 } 769 770 state14: 771 // Identifier ("fragment") 772 // path: [f] [r] [a] [g] [m] [e] 773 { 774 if (inputCopy.length == 0) 775 goto endstate14; 776 char currentChar = inputCopy[0]; 777 if (currentChar < 0x80) 778 { 779 if (currentChar == 'n') 780 { 781 inputCopy = inputCopy[1 .. $]; 782 goto state15; 783 } 784 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 785 { 786 inputCopy = inputCopy[1 .. $]; 787 goto state17; 788 } 789 else 790 { 791 goto endstate14; 792 } 793 } 794 else 795 { 796 string inputCopyNext = inputCopy; 797 import std.utf; 798 799 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 800 801 { 802 goto endstate14; 803 } 804 } 805 } 806 endstate14: 807 { 808 assert(inputCopy.ptr >= input.ptr); 809 foundSymbol = tokenID!"Identifier"; 810 foundLength = inputCopy.ptr - input.ptr; 811 foundIsIgnore = false; 812 goto lexerend; 813 } 814 815 state15: 816 // Identifier ("fragment") 817 // path: [f] [r] [a] [g] [m] [e] [n] 818 { 819 if (inputCopy.length == 0) 820 goto endstate15; 821 char currentChar = inputCopy[0]; 822 if (currentChar < 0x80) 823 { 824 if (currentChar == 't') 825 { 826 inputCopy = inputCopy[1 .. $]; 827 goto state16; 828 } 829 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 830 { 831 inputCopy = inputCopy[1 .. $]; 832 goto state17; 833 } 834 else 835 { 836 goto endstate15; 837 } 838 } 839 else 840 { 841 string inputCopyNext = inputCopy; 842 import std.utf; 843 844 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 845 846 { 847 goto endstate15; 848 } 849 } 850 } 851 endstate15: 852 { 853 assert(inputCopy.ptr >= input.ptr); 854 foundSymbol = tokenID!"Identifier"; 855 foundLength = inputCopy.ptr - input.ptr; 856 foundIsIgnore = false; 857 goto lexerend; 858 } 859 860 state16: 861 // "fragment" Identifier 862 // path: [f] [r] [a] [g] [m] [e] [n] [t] 863 { 864 if (inputCopy.length == 0) 865 goto endstate16; 866 char currentChar = inputCopy[0]; 867 if (currentChar < 0x80) 868 { 869 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 870 { 871 assert(inputCopy.ptr >= input.ptr); 872 foundSymbol = tokenID!"\"fragment\""; 873 foundLength = inputCopy.ptr - input.ptr; 874 foundIsIgnore = false; 875 inputCopy = inputCopy[1 .. $]; 876 goto state17; 877 } 878 else 879 { 880 goto endstate16; 881 } 882 } 883 else 884 { 885 string inputCopyNext = inputCopy; 886 import std.utf; 887 888 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 889 890 { 891 goto endstate16; 892 } 893 } 894 } 895 endstate16: 896 { 897 assert(inputCopy.ptr >= input.ptr); 898 foundSymbol = tokenID!"\"fragment\""; 899 foundLength = inputCopy.ptr - input.ptr; 900 foundIsIgnore = false; 901 goto lexerend; 902 } 903 904 state17: 905 // Identifier 906 // path: [A-Z_b-eg-hj-lnp-su-z] 907 { 908 if (inputCopy.length == 0) 909 goto endstate17; 910 char currentChar = inputCopy[0]; 911 if (currentChar < 0x80) 912 { 913 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 914 { 915 inputCopy = inputCopy[1 .. $]; 916 goto state17; 917 } 918 else 919 { 920 goto endstate17; 921 } 922 } 923 else 924 { 925 string inputCopyNext = inputCopy; 926 import std.utf; 927 928 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 929 930 { 931 goto endstate17; 932 } 933 } 934 } 935 endstate17: 936 { 937 assert(inputCopy.ptr >= input.ptr); 938 foundSymbol = tokenID!"Identifier"; 939 foundLength = inputCopy.ptr - input.ptr; 940 foundIsIgnore = false; 941 goto lexerend; 942 } 943 944 state18: 945 // Identifier ("anytoken") 946 // path: [a] 947 { 948 if (inputCopy.length == 0) 949 goto endstate18; 950 char currentChar = inputCopy[0]; 951 if (currentChar < 0x80) 952 { 953 if (currentChar == 'n') 954 { 955 inputCopy = inputCopy[1 .. $]; 956 goto state19; 957 } 958 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 959 { 960 inputCopy = inputCopy[1 .. $]; 961 goto state17; 962 } 963 else 964 { 965 goto endstate18; 966 } 967 } 968 else 969 { 970 string inputCopyNext = inputCopy; 971 import std.utf; 972 973 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 974 975 { 976 goto endstate18; 977 } 978 } 979 } 980 endstate18: 981 { 982 assert(inputCopy.ptr >= input.ptr); 983 foundSymbol = tokenID!"Identifier"; 984 foundLength = inputCopy.ptr - input.ptr; 985 foundIsIgnore = false; 986 goto lexerend; 987 } 988 989 state19: 990 // Identifier ("anytoken") 991 // path: [a] [n] 992 { 993 if (inputCopy.length == 0) 994 goto endstate19; 995 char currentChar = inputCopy[0]; 996 if (currentChar < 0x80) 997 { 998 if (currentChar == 'y') 999 { 1000 inputCopy = inputCopy[1 .. $]; 1001 goto state20; 1002 } 1003 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1004 { 1005 inputCopy = inputCopy[1 .. $]; 1006 goto state17; 1007 } 1008 else 1009 { 1010 goto endstate19; 1011 } 1012 } 1013 else 1014 { 1015 string inputCopyNext = inputCopy; 1016 import std.utf; 1017 1018 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1019 1020 { 1021 goto endstate19; 1022 } 1023 } 1024 } 1025 endstate19: 1026 { 1027 assert(inputCopy.ptr >= input.ptr); 1028 foundSymbol = tokenID!"Identifier"; 1029 foundLength = inputCopy.ptr - input.ptr; 1030 foundIsIgnore = false; 1031 goto lexerend; 1032 } 1033 1034 state20: 1035 // Identifier ("anytoken") 1036 // path: [a] [n] [y] 1037 { 1038 if (inputCopy.length == 0) 1039 goto endstate20; 1040 char currentChar = inputCopy[0]; 1041 if (currentChar < 0x80) 1042 { 1043 if (currentChar == 't') 1044 { 1045 inputCopy = inputCopy[1 .. $]; 1046 goto state21; 1047 } 1048 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1049 { 1050 inputCopy = inputCopy[1 .. $]; 1051 goto state17; 1052 } 1053 else 1054 { 1055 goto endstate20; 1056 } 1057 } 1058 else 1059 { 1060 string inputCopyNext = inputCopy; 1061 import std.utf; 1062 1063 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1064 1065 { 1066 goto endstate20; 1067 } 1068 } 1069 } 1070 endstate20: 1071 { 1072 assert(inputCopy.ptr >= input.ptr); 1073 foundSymbol = tokenID!"Identifier"; 1074 foundLength = inputCopy.ptr - input.ptr; 1075 foundIsIgnore = false; 1076 goto lexerend; 1077 } 1078 1079 state21: 1080 // Identifier ("anytoken") 1081 // path: [a] [n] [y] [t] 1082 { 1083 if (inputCopy.length == 0) 1084 goto endstate21; 1085 char currentChar = inputCopy[0]; 1086 if (currentChar < 0x80) 1087 { 1088 if (currentChar == 'o') 1089 { 1090 inputCopy = inputCopy[1 .. $]; 1091 goto state22; 1092 } 1093 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1094 { 1095 inputCopy = inputCopy[1 .. $]; 1096 goto state17; 1097 } 1098 else 1099 { 1100 goto endstate21; 1101 } 1102 } 1103 else 1104 { 1105 string inputCopyNext = inputCopy; 1106 import std.utf; 1107 1108 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1109 1110 { 1111 goto endstate21; 1112 } 1113 } 1114 } 1115 endstate21: 1116 { 1117 assert(inputCopy.ptr >= input.ptr); 1118 foundSymbol = tokenID!"Identifier"; 1119 foundLength = inputCopy.ptr - input.ptr; 1120 foundIsIgnore = false; 1121 goto lexerend; 1122 } 1123 1124 state22: 1125 // Identifier ("anytoken") 1126 // path: [a] [n] [y] [t] [o] 1127 { 1128 if (inputCopy.length == 0) 1129 goto endstate22; 1130 char currentChar = inputCopy[0]; 1131 if (currentChar < 0x80) 1132 { 1133 if (currentChar == 'k') 1134 { 1135 inputCopy = inputCopy[1 .. $]; 1136 goto state23; 1137 } 1138 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1139 { 1140 inputCopy = inputCopy[1 .. $]; 1141 goto state17; 1142 } 1143 else 1144 { 1145 goto endstate22; 1146 } 1147 } 1148 else 1149 { 1150 string inputCopyNext = inputCopy; 1151 import std.utf; 1152 1153 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1154 1155 { 1156 goto endstate22; 1157 } 1158 } 1159 } 1160 endstate22: 1161 { 1162 assert(inputCopy.ptr >= input.ptr); 1163 foundSymbol = tokenID!"Identifier"; 1164 foundLength = inputCopy.ptr - input.ptr; 1165 foundIsIgnore = false; 1166 goto lexerend; 1167 } 1168 1169 state23: 1170 // Identifier ("anytoken") 1171 // path: [a] [n] [y] [t] [o] [k] 1172 { 1173 if (inputCopy.length == 0) 1174 goto endstate23; 1175 char currentChar = inputCopy[0]; 1176 if (currentChar < 0x80) 1177 { 1178 if (currentChar == 'e') 1179 { 1180 inputCopy = inputCopy[1 .. $]; 1181 goto state24; 1182 } 1183 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1184 { 1185 inputCopy = inputCopy[1 .. $]; 1186 goto state17; 1187 } 1188 else 1189 { 1190 goto endstate23; 1191 } 1192 } 1193 else 1194 { 1195 string inputCopyNext = inputCopy; 1196 import std.utf; 1197 1198 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1199 1200 { 1201 goto endstate23; 1202 } 1203 } 1204 } 1205 endstate23: 1206 { 1207 assert(inputCopy.ptr >= input.ptr); 1208 foundSymbol = tokenID!"Identifier"; 1209 foundLength = inputCopy.ptr - input.ptr; 1210 foundIsIgnore = false; 1211 goto lexerend; 1212 } 1213 1214 state24: 1215 // Identifier ("anytoken") 1216 // path: [a] [n] [y] [t] [o] [k] [e] 1217 { 1218 if (inputCopy.length == 0) 1219 goto endstate24; 1220 char currentChar = inputCopy[0]; 1221 if (currentChar < 0x80) 1222 { 1223 if (currentChar == 'n') 1224 { 1225 inputCopy = inputCopy[1 .. $]; 1226 goto state25; 1227 } 1228 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1229 { 1230 inputCopy = inputCopy[1 .. $]; 1231 goto state17; 1232 } 1233 else 1234 { 1235 goto endstate24; 1236 } 1237 } 1238 else 1239 { 1240 string inputCopyNext = inputCopy; 1241 import std.utf; 1242 1243 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1244 1245 { 1246 goto endstate24; 1247 } 1248 } 1249 } 1250 endstate24: 1251 { 1252 assert(inputCopy.ptr >= input.ptr); 1253 foundSymbol = tokenID!"Identifier"; 1254 foundLength = inputCopy.ptr - input.ptr; 1255 foundIsIgnore = false; 1256 goto lexerend; 1257 } 1258 1259 state25: 1260 // "anytoken" Identifier 1261 // path: [a] [n] [y] [t] [o] [k] [e] [n] 1262 { 1263 if (inputCopy.length == 0) 1264 goto endstate25; 1265 char currentChar = inputCopy[0]; 1266 if (currentChar < 0x80) 1267 { 1268 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1269 { 1270 assert(inputCopy.ptr >= input.ptr); 1271 foundSymbol = tokenID!"\"anytoken\""; 1272 foundLength = inputCopy.ptr - input.ptr; 1273 foundIsIgnore = false; 1274 inputCopy = inputCopy[1 .. $]; 1275 goto state17; 1276 } 1277 else 1278 { 1279 goto endstate25; 1280 } 1281 } 1282 else 1283 { 1284 string inputCopyNext = inputCopy; 1285 import std.utf; 1286 1287 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1288 1289 { 1290 goto endstate25; 1291 } 1292 } 1293 } 1294 endstate25: 1295 { 1296 assert(inputCopy.ptr >= input.ptr); 1297 foundSymbol = tokenID!"\"anytoken\""; 1298 foundLength = inputCopy.ptr - input.ptr; 1299 foundIsIgnore = false; 1300 goto lexerend; 1301 } 1302 1303 state26: 1304 // Identifier ("match") 1305 // path: [m] 1306 { 1307 if (inputCopy.length == 0) 1308 goto endstate26; 1309 char currentChar = inputCopy[0]; 1310 if (currentChar < 0x80) 1311 { 1312 if (currentChar == 'a') 1313 { 1314 inputCopy = inputCopy[1 .. $]; 1315 goto state27; 1316 } 1317 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'b' && currentChar <= 'z')) 1318 { 1319 inputCopy = inputCopy[1 .. $]; 1320 goto state17; 1321 } 1322 else 1323 { 1324 goto endstate26; 1325 } 1326 } 1327 else 1328 { 1329 string inputCopyNext = inputCopy; 1330 import std.utf; 1331 1332 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1333 1334 { 1335 goto endstate26; 1336 } 1337 } 1338 } 1339 endstate26: 1340 { 1341 assert(inputCopy.ptr >= input.ptr); 1342 foundSymbol = tokenID!"Identifier"; 1343 foundLength = inputCopy.ptr - input.ptr; 1344 foundIsIgnore = false; 1345 goto lexerend; 1346 } 1347 1348 state27: 1349 // Identifier ("match") 1350 // path: [m] [a] 1351 { 1352 if (inputCopy.length == 0) 1353 goto endstate27; 1354 char currentChar = inputCopy[0]; 1355 if (currentChar < 0x80) 1356 { 1357 if (currentChar == 't') 1358 { 1359 inputCopy = inputCopy[1 .. $]; 1360 goto state28; 1361 } 1362 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1363 { 1364 inputCopy = inputCopy[1 .. $]; 1365 goto state17; 1366 } 1367 else 1368 { 1369 goto endstate27; 1370 } 1371 } 1372 else 1373 { 1374 string inputCopyNext = inputCopy; 1375 import std.utf; 1376 1377 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1378 1379 { 1380 goto endstate27; 1381 } 1382 } 1383 } 1384 endstate27: 1385 { 1386 assert(inputCopy.ptr >= input.ptr); 1387 foundSymbol = tokenID!"Identifier"; 1388 foundLength = inputCopy.ptr - input.ptr; 1389 foundIsIgnore = false; 1390 goto lexerend; 1391 } 1392 1393 state28: 1394 // Identifier ("match") 1395 // path: [m] [a] [t] 1396 { 1397 if (inputCopy.length == 0) 1398 goto endstate28; 1399 char currentChar = inputCopy[0]; 1400 if (currentChar < 0x80) 1401 { 1402 if (currentChar == 'c') 1403 { 1404 inputCopy = inputCopy[1 .. $]; 1405 goto state29; 1406 } 1407 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1408 { 1409 inputCopy = inputCopy[1 .. $]; 1410 goto state17; 1411 } 1412 else 1413 { 1414 goto endstate28; 1415 } 1416 } 1417 else 1418 { 1419 string inputCopyNext = inputCopy; 1420 import std.utf; 1421 1422 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1423 1424 { 1425 goto endstate28; 1426 } 1427 } 1428 } 1429 endstate28: 1430 { 1431 assert(inputCopy.ptr >= input.ptr); 1432 foundSymbol = tokenID!"Identifier"; 1433 foundLength = inputCopy.ptr - input.ptr; 1434 foundIsIgnore = false; 1435 goto lexerend; 1436 } 1437 1438 state29: 1439 // Identifier ("match") 1440 // path: [m] [a] [t] [c] 1441 { 1442 if (inputCopy.length == 0) 1443 goto endstate29; 1444 char currentChar = inputCopy[0]; 1445 if (currentChar < 0x80) 1446 { 1447 if (currentChar == 'h') 1448 { 1449 inputCopy = inputCopy[1 .. $]; 1450 goto state30; 1451 } 1452 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1453 { 1454 inputCopy = inputCopy[1 .. $]; 1455 goto state17; 1456 } 1457 else 1458 { 1459 goto endstate29; 1460 } 1461 } 1462 else 1463 { 1464 string inputCopyNext = inputCopy; 1465 import std.utf; 1466 1467 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1468 1469 { 1470 goto endstate29; 1471 } 1472 } 1473 } 1474 endstate29: 1475 { 1476 assert(inputCopy.ptr >= input.ptr); 1477 foundSymbol = tokenID!"Identifier"; 1478 foundLength = inputCopy.ptr - input.ptr; 1479 foundIsIgnore = false; 1480 goto lexerend; 1481 } 1482 1483 state30: 1484 // "match" Identifier 1485 // path: [m] [a] [t] [c] [h] 1486 { 1487 if (inputCopy.length == 0) 1488 goto endstate30; 1489 char currentChar = inputCopy[0]; 1490 if (currentChar < 0x80) 1491 { 1492 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1493 { 1494 assert(inputCopy.ptr >= input.ptr); 1495 foundSymbol = tokenID!"\"match\""; 1496 foundLength = inputCopy.ptr - input.ptr; 1497 foundIsIgnore = false; 1498 inputCopy = inputCopy[1 .. $]; 1499 goto state17; 1500 } 1501 else 1502 { 1503 goto endstate30; 1504 } 1505 } 1506 else 1507 { 1508 string inputCopyNext = inputCopy; 1509 import std.utf; 1510 1511 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1512 1513 { 1514 goto endstate30; 1515 } 1516 } 1517 } 1518 endstate30: 1519 { 1520 assert(inputCopy.ptr >= input.ptr); 1521 foundSymbol = tokenID!"\"match\""; 1522 foundLength = inputCopy.ptr - input.ptr; 1523 foundIsIgnore = false; 1524 goto lexerend; 1525 } 1526 1527 state31: 1528 // Identifier ("token") ("t(") 1529 // path: [t] 1530 { 1531 if (inputCopy.length == 0) 1532 goto endstate31; 1533 char currentChar = inputCopy[0]; 1534 if (currentChar < 0x80) 1535 { 1536 if (currentChar == '(') 1537 { 1538 assert(inputCopy.ptr >= input.ptr); 1539 foundSymbol = tokenID!"Identifier"; 1540 foundLength = inputCopy.ptr - input.ptr; 1541 foundIsIgnore = false; 1542 inputCopy = inputCopy[1 .. $]; 1543 goto state36; 1544 } 1545 else if (currentChar == 'o') 1546 { 1547 inputCopy = inputCopy[1 .. $]; 1548 goto state32; 1549 } 1550 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1551 { 1552 inputCopy = inputCopy[1 .. $]; 1553 goto state17; 1554 } 1555 else 1556 { 1557 goto endstate31; 1558 } 1559 } 1560 else 1561 { 1562 string inputCopyNext = inputCopy; 1563 import std.utf; 1564 1565 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1566 1567 { 1568 goto endstate31; 1569 } 1570 } 1571 } 1572 endstate31: 1573 { 1574 assert(inputCopy.ptr >= input.ptr); 1575 foundSymbol = tokenID!"Identifier"; 1576 foundLength = inputCopy.ptr - input.ptr; 1577 foundIsIgnore = false; 1578 goto lexerend; 1579 } 1580 1581 state32: 1582 // Identifier ("token") 1583 // path: [t] [o] 1584 { 1585 if (inputCopy.length == 0) 1586 goto endstate32; 1587 char currentChar = inputCopy[0]; 1588 if (currentChar < 0x80) 1589 { 1590 if (currentChar == 'k') 1591 { 1592 inputCopy = inputCopy[1 .. $]; 1593 goto state33; 1594 } 1595 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1596 { 1597 inputCopy = inputCopy[1 .. $]; 1598 goto state17; 1599 } 1600 else 1601 { 1602 goto endstate32; 1603 } 1604 } 1605 else 1606 { 1607 string inputCopyNext = inputCopy; 1608 import std.utf; 1609 1610 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1611 1612 { 1613 goto endstate32; 1614 } 1615 } 1616 } 1617 endstate32: 1618 { 1619 assert(inputCopy.ptr >= input.ptr); 1620 foundSymbol = tokenID!"Identifier"; 1621 foundLength = inputCopy.ptr - input.ptr; 1622 foundIsIgnore = false; 1623 goto lexerend; 1624 } 1625 1626 state33: 1627 // Identifier ("token") 1628 // path: [t] [o] [k] 1629 { 1630 if (inputCopy.length == 0) 1631 goto endstate33; 1632 char currentChar = inputCopy[0]; 1633 if (currentChar < 0x80) 1634 { 1635 if (currentChar == 'e') 1636 { 1637 inputCopy = inputCopy[1 .. $]; 1638 goto state34; 1639 } 1640 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1641 { 1642 inputCopy = inputCopy[1 .. $]; 1643 goto state17; 1644 } 1645 else 1646 { 1647 goto endstate33; 1648 } 1649 } 1650 else 1651 { 1652 string inputCopyNext = inputCopy; 1653 import std.utf; 1654 1655 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1656 1657 { 1658 goto endstate33; 1659 } 1660 } 1661 } 1662 endstate33: 1663 { 1664 assert(inputCopy.ptr >= input.ptr); 1665 foundSymbol = tokenID!"Identifier"; 1666 foundLength = inputCopy.ptr - input.ptr; 1667 foundIsIgnore = false; 1668 goto lexerend; 1669 } 1670 1671 state34: 1672 // Identifier ("token") 1673 // path: [t] [o] [k] [e] 1674 { 1675 if (inputCopy.length == 0) 1676 goto endstate34; 1677 char currentChar = inputCopy[0]; 1678 if (currentChar < 0x80) 1679 { 1680 if (currentChar == 'n') 1681 { 1682 inputCopy = inputCopy[1 .. $]; 1683 goto state35; 1684 } 1685 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1686 { 1687 inputCopy = inputCopy[1 .. $]; 1688 goto state17; 1689 } 1690 else 1691 { 1692 goto endstate34; 1693 } 1694 } 1695 else 1696 { 1697 string inputCopyNext = inputCopy; 1698 import std.utf; 1699 1700 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1701 1702 { 1703 goto endstate34; 1704 } 1705 } 1706 } 1707 endstate34: 1708 { 1709 assert(inputCopy.ptr >= input.ptr); 1710 foundSymbol = tokenID!"Identifier"; 1711 foundLength = inputCopy.ptr - input.ptr; 1712 foundIsIgnore = false; 1713 goto lexerend; 1714 } 1715 1716 state35: 1717 // "token" Identifier 1718 // path: [t] [o] [k] [e] [n] 1719 { 1720 if (inputCopy.length == 0) 1721 goto endstate35; 1722 char currentChar = inputCopy[0]; 1723 if (currentChar < 0x80) 1724 { 1725 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1726 { 1727 assert(inputCopy.ptr >= input.ptr); 1728 foundSymbol = tokenID!"\"token\""; 1729 foundLength = inputCopy.ptr - input.ptr; 1730 foundIsIgnore = false; 1731 inputCopy = inputCopy[1 .. $]; 1732 goto state17; 1733 } 1734 else 1735 { 1736 goto endstate35; 1737 } 1738 } 1739 else 1740 { 1741 string inputCopyNext = inputCopy; 1742 import std.utf; 1743 1744 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1745 1746 { 1747 goto endstate35; 1748 } 1749 } 1750 } 1751 endstate35: 1752 { 1753 assert(inputCopy.ptr >= input.ptr); 1754 foundSymbol = tokenID!"\"token\""; 1755 foundLength = inputCopy.ptr - input.ptr; 1756 foundIsIgnore = false; 1757 goto lexerend; 1758 } 1759 1760 state36: 1761 // "t(" 1762 // path: [t] [(] 1763 { 1764 if (inputCopy.length == 0) 1765 goto endstate36; 1766 goto endstate36; 1767 } 1768 endstate36: 1769 { 1770 assert(inputCopy.ptr >= input.ptr); 1771 foundSymbol = tokenID!"\"t(\""; 1772 foundLength = inputCopy.ptr - input.ptr; 1773 foundIsIgnore = false; 1774 goto lexerend; 1775 } 1776 1777 state37: 1778 // Identifier ("option") 1779 // path: [o] 1780 { 1781 if (inputCopy.length == 0) 1782 goto endstate37; 1783 char currentChar = inputCopy[0]; 1784 if (currentChar < 0x80) 1785 { 1786 if (currentChar == 'p') 1787 { 1788 inputCopy = inputCopy[1 .. $]; 1789 goto state38; 1790 } 1791 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1792 { 1793 inputCopy = inputCopy[1 .. $]; 1794 goto state17; 1795 } 1796 else 1797 { 1798 goto endstate37; 1799 } 1800 } 1801 else 1802 { 1803 string inputCopyNext = inputCopy; 1804 import std.utf; 1805 1806 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1807 1808 { 1809 goto endstate37; 1810 } 1811 } 1812 } 1813 endstate37: 1814 { 1815 assert(inputCopy.ptr >= input.ptr); 1816 foundSymbol = tokenID!"Identifier"; 1817 foundLength = inputCopy.ptr - input.ptr; 1818 foundIsIgnore = false; 1819 goto lexerend; 1820 } 1821 1822 state38: 1823 // Identifier ("option") 1824 // path: [o] [p] 1825 { 1826 if (inputCopy.length == 0) 1827 goto endstate38; 1828 char currentChar = inputCopy[0]; 1829 if (currentChar < 0x80) 1830 { 1831 if (currentChar == 't') 1832 { 1833 inputCopy = inputCopy[1 .. $]; 1834 goto state39; 1835 } 1836 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1837 { 1838 inputCopy = inputCopy[1 .. $]; 1839 goto state17; 1840 } 1841 else 1842 { 1843 goto endstate38; 1844 } 1845 } 1846 else 1847 { 1848 string inputCopyNext = inputCopy; 1849 import std.utf; 1850 1851 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1852 1853 { 1854 goto endstate38; 1855 } 1856 } 1857 } 1858 endstate38: 1859 { 1860 assert(inputCopy.ptr >= input.ptr); 1861 foundSymbol = tokenID!"Identifier"; 1862 foundLength = inputCopy.ptr - input.ptr; 1863 foundIsIgnore = false; 1864 goto lexerend; 1865 } 1866 1867 state39: 1868 // Identifier ("option") 1869 // path: [o] [p] [t] 1870 { 1871 if (inputCopy.length == 0) 1872 goto endstate39; 1873 char currentChar = inputCopy[0]; 1874 if (currentChar < 0x80) 1875 { 1876 if (currentChar == 'i') 1877 { 1878 inputCopy = inputCopy[1 .. $]; 1879 goto state40; 1880 } 1881 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1882 { 1883 inputCopy = inputCopy[1 .. $]; 1884 goto state17; 1885 } 1886 else 1887 { 1888 goto endstate39; 1889 } 1890 } 1891 else 1892 { 1893 string inputCopyNext = inputCopy; 1894 import std.utf; 1895 1896 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1897 1898 { 1899 goto endstate39; 1900 } 1901 } 1902 } 1903 endstate39: 1904 { 1905 assert(inputCopy.ptr >= input.ptr); 1906 foundSymbol = tokenID!"Identifier"; 1907 foundLength = inputCopy.ptr - input.ptr; 1908 foundIsIgnore = false; 1909 goto lexerend; 1910 } 1911 1912 state40: 1913 // Identifier ("option") 1914 // path: [o] [p] [t] [i] 1915 { 1916 if (inputCopy.length == 0) 1917 goto endstate40; 1918 char currentChar = inputCopy[0]; 1919 if (currentChar < 0x80) 1920 { 1921 if (currentChar == 'o') 1922 { 1923 inputCopy = inputCopy[1 .. $]; 1924 goto state41; 1925 } 1926 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1927 { 1928 inputCopy = inputCopy[1 .. $]; 1929 goto state17; 1930 } 1931 else 1932 { 1933 goto endstate40; 1934 } 1935 } 1936 else 1937 { 1938 string inputCopyNext = inputCopy; 1939 import std.utf; 1940 1941 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1942 1943 { 1944 goto endstate40; 1945 } 1946 } 1947 } 1948 endstate40: 1949 { 1950 assert(inputCopy.ptr >= input.ptr); 1951 foundSymbol = tokenID!"Identifier"; 1952 foundLength = inputCopy.ptr - input.ptr; 1953 foundIsIgnore = false; 1954 goto lexerend; 1955 } 1956 1957 state41: 1958 // Identifier ("option") 1959 // path: [o] [p] [t] [i] [o] 1960 { 1961 if (inputCopy.length == 0) 1962 goto endstate41; 1963 char currentChar = inputCopy[0]; 1964 if (currentChar < 0x80) 1965 { 1966 if (currentChar == 'n') 1967 { 1968 inputCopy = inputCopy[1 .. $]; 1969 goto state42; 1970 } 1971 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 1972 { 1973 inputCopy = inputCopy[1 .. $]; 1974 goto state17; 1975 } 1976 else 1977 { 1978 goto endstate41; 1979 } 1980 } 1981 else 1982 { 1983 string inputCopyNext = inputCopy; 1984 import std.utf; 1985 1986 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 1987 1988 { 1989 goto endstate41; 1990 } 1991 } 1992 } 1993 endstate41: 1994 { 1995 assert(inputCopy.ptr >= input.ptr); 1996 foundSymbol = tokenID!"Identifier"; 1997 foundLength = inputCopy.ptr - input.ptr; 1998 foundIsIgnore = false; 1999 goto lexerend; 2000 } 2001 2002 state42: 2003 // "option" Identifier 2004 // path: [o] [p] [t] [i] [o] [n] 2005 { 2006 if (inputCopy.length == 0) 2007 goto endstate42; 2008 char currentChar = inputCopy[0]; 2009 if (currentChar < 0x80) 2010 { 2011 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 2012 { 2013 assert(inputCopy.ptr >= input.ptr); 2014 foundSymbol = tokenID!"\"option\""; 2015 foundLength = inputCopy.ptr - input.ptr; 2016 foundIsIgnore = false; 2017 inputCopy = inputCopy[1 .. $]; 2018 goto state17; 2019 } 2020 else 2021 { 2022 goto endstate42; 2023 } 2024 } 2025 else 2026 { 2027 string inputCopyNext = inputCopy; 2028 import std.utf; 2029 2030 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2031 2032 { 2033 goto endstate42; 2034 } 2035 } 2036 } 2037 endstate42: 2038 { 2039 assert(inputCopy.ptr >= input.ptr); 2040 foundSymbol = tokenID!"\"option\""; 2041 foundLength = inputCopy.ptr - input.ptr; 2042 foundIsIgnore = false; 2043 goto lexerend; 2044 } 2045 2046 state43: 2047 // Identifier ("import") 2048 // path: [i] 2049 { 2050 if (inputCopy.length == 0) 2051 goto endstate43; 2052 char currentChar = inputCopy[0]; 2053 if (currentChar < 0x80) 2054 { 2055 if (currentChar == 'm') 2056 { 2057 inputCopy = inputCopy[1 .. $]; 2058 goto state44; 2059 } 2060 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 2061 { 2062 inputCopy = inputCopy[1 .. $]; 2063 goto state17; 2064 } 2065 else 2066 { 2067 goto endstate43; 2068 } 2069 } 2070 else 2071 { 2072 string inputCopyNext = inputCopy; 2073 import std.utf; 2074 2075 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2076 2077 { 2078 goto endstate43; 2079 } 2080 } 2081 } 2082 endstate43: 2083 { 2084 assert(inputCopy.ptr >= input.ptr); 2085 foundSymbol = tokenID!"Identifier"; 2086 foundLength = inputCopy.ptr - input.ptr; 2087 foundIsIgnore = false; 2088 goto lexerend; 2089 } 2090 2091 state44: 2092 // Identifier ("import") 2093 // path: [i] [m] 2094 { 2095 if (inputCopy.length == 0) 2096 goto endstate44; 2097 char currentChar = inputCopy[0]; 2098 if (currentChar < 0x80) 2099 { 2100 if (currentChar == 'p') 2101 { 2102 inputCopy = inputCopy[1 .. $]; 2103 goto state45; 2104 } 2105 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 2106 { 2107 inputCopy = inputCopy[1 .. $]; 2108 goto state17; 2109 } 2110 else 2111 { 2112 goto endstate44; 2113 } 2114 } 2115 else 2116 { 2117 string inputCopyNext = inputCopy; 2118 import std.utf; 2119 2120 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2121 2122 { 2123 goto endstate44; 2124 } 2125 } 2126 } 2127 endstate44: 2128 { 2129 assert(inputCopy.ptr >= input.ptr); 2130 foundSymbol = tokenID!"Identifier"; 2131 foundLength = inputCopy.ptr - input.ptr; 2132 foundIsIgnore = false; 2133 goto lexerend; 2134 } 2135 2136 state45: 2137 // Identifier ("import") 2138 // path: [i] [m] [p] 2139 { 2140 if (inputCopy.length == 0) 2141 goto endstate45; 2142 char currentChar = inputCopy[0]; 2143 if (currentChar < 0x80) 2144 { 2145 if (currentChar == 'o') 2146 { 2147 inputCopy = inputCopy[1 .. $]; 2148 goto state46; 2149 } 2150 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 2151 { 2152 inputCopy = inputCopy[1 .. $]; 2153 goto state17; 2154 } 2155 else 2156 { 2157 goto endstate45; 2158 } 2159 } 2160 else 2161 { 2162 string inputCopyNext = inputCopy; 2163 import std.utf; 2164 2165 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2166 2167 { 2168 goto endstate45; 2169 } 2170 } 2171 } 2172 endstate45: 2173 { 2174 assert(inputCopy.ptr >= input.ptr); 2175 foundSymbol = tokenID!"Identifier"; 2176 foundLength = inputCopy.ptr - input.ptr; 2177 foundIsIgnore = false; 2178 goto lexerend; 2179 } 2180 2181 state46: 2182 // Identifier ("import") 2183 // path: [i] [m] [p] [o] 2184 { 2185 if (inputCopy.length == 0) 2186 goto endstate46; 2187 char currentChar = inputCopy[0]; 2188 if (currentChar < 0x80) 2189 { 2190 if (currentChar == 'r') 2191 { 2192 inputCopy = inputCopy[1 .. $]; 2193 goto state47; 2194 } 2195 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 2196 { 2197 inputCopy = inputCopy[1 .. $]; 2198 goto state17; 2199 } 2200 else 2201 { 2202 goto endstate46; 2203 } 2204 } 2205 else 2206 { 2207 string inputCopyNext = inputCopy; 2208 import std.utf; 2209 2210 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2211 2212 { 2213 goto endstate46; 2214 } 2215 } 2216 } 2217 endstate46: 2218 { 2219 assert(inputCopy.ptr >= input.ptr); 2220 foundSymbol = tokenID!"Identifier"; 2221 foundLength = inputCopy.ptr - input.ptr; 2222 foundIsIgnore = false; 2223 goto lexerend; 2224 } 2225 2226 state47: 2227 // Identifier ("import") 2228 // path: [i] [m] [p] [o] [r] 2229 { 2230 if (inputCopy.length == 0) 2231 goto endstate47; 2232 char currentChar = inputCopy[0]; 2233 if (currentChar < 0x80) 2234 { 2235 if (currentChar == 't') 2236 { 2237 inputCopy = inputCopy[1 .. $]; 2238 goto state48; 2239 } 2240 else if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 2241 { 2242 inputCopy = inputCopy[1 .. $]; 2243 goto state17; 2244 } 2245 else 2246 { 2247 goto endstate47; 2248 } 2249 } 2250 else 2251 { 2252 string inputCopyNext = inputCopy; 2253 import std.utf; 2254 2255 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2256 2257 { 2258 goto endstate47; 2259 } 2260 } 2261 } 2262 endstate47: 2263 { 2264 assert(inputCopy.ptr >= input.ptr); 2265 foundSymbol = tokenID!"Identifier"; 2266 foundLength = inputCopy.ptr - input.ptr; 2267 foundIsIgnore = false; 2268 goto lexerend; 2269 } 2270 2271 state48: 2272 // "import" Identifier 2273 // path: [i] [m] [p] [o] [r] [t] 2274 { 2275 if (inputCopy.length == 0) 2276 goto endstate48; 2277 char currentChar = inputCopy[0]; 2278 if (currentChar < 0x80) 2279 { 2280 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'Z') || currentChar == '_' || (currentChar >= 'a' && currentChar <= 'z')) 2281 { 2282 assert(inputCopy.ptr >= input.ptr); 2283 foundSymbol = tokenID!"\"import\""; 2284 foundLength = inputCopy.ptr - input.ptr; 2285 foundIsIgnore = false; 2286 inputCopy = inputCopy[1 .. $]; 2287 goto state17; 2288 } 2289 else 2290 { 2291 goto endstate48; 2292 } 2293 } 2294 else 2295 { 2296 string inputCopyNext = inputCopy; 2297 import std.utf; 2298 2299 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2300 2301 { 2302 goto endstate48; 2303 } 2304 } 2305 } 2306 endstate48: 2307 { 2308 assert(inputCopy.ptr >= input.ptr); 2309 foundSymbol = tokenID!"\"import\""; 2310 foundLength = inputCopy.ptr - input.ptr; 2311 foundIsIgnore = false; 2312 goto lexerend; 2313 } 2314 2315 state49: 2316 // (StringLiteral) 2317 // path: [\"] 2318 { 2319 if (inputCopy.length == 0) 2320 { 2321 if (input.ptr == inputCopy.ptr) 2322 goto lexerend; 2323 else if (foundSymbol != SymbolID.max) 2324 goto lexerend; 2325 else 2326 throw lexerException("EOF", "[^]", inputCopy.ptr - input.ptr); 2327 } 2328 char currentChar = inputCopy[0]; 2329 if (currentChar < 0x80) 2330 { 2331 if (currentChar == '\"') 2332 { 2333 inputCopy = inputCopy[1 .. $]; 2334 goto state50; 2335 } 2336 else if (currentChar == '\\') 2337 { 2338 inputCopy = inputCopy[1 .. $]; 2339 goto state51; 2340 } 2341 else 2342 { 2343 inputCopy = inputCopy[1 .. $]; 2344 goto state49; 2345 } 2346 } 2347 else 2348 { 2349 string inputCopyNext = inputCopy; 2350 import std.utf; 2351 2352 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2353 2354 { 2355 inputCopy = inputCopyNext; 2356 goto state49; 2357 } 2358 } 2359 } 2360 2361 state50: 2362 // StringLiteral 2363 // path: [\"] [\"] 2364 { 2365 if (inputCopy.length == 0) 2366 goto endstate50; 2367 goto endstate50; 2368 } 2369 endstate50: 2370 { 2371 assert(inputCopy.ptr >= input.ptr); 2372 foundSymbol = tokenID!"StringLiteral"; 2373 foundLength = inputCopy.ptr - input.ptr; 2374 foundIsIgnore = false; 2375 goto lexerend; 2376 } 2377 2378 state51: 2379 // (StringLiteral) 2380 // path: [\"] [\\] 2381 { 2382 if (inputCopy.length == 0) 2383 { 2384 if (input.ptr == inputCopy.ptr) 2385 goto lexerend; 2386 else if (foundSymbol != SymbolID.max) 2387 goto lexerend; 2388 else 2389 throw lexerException("EOF", "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 2390 } 2391 char currentChar = inputCopy[0]; 2392 if (currentChar < 0x80) 2393 { 2394 if (currentChar == 'U') 2395 { 2396 inputCopy = inputCopy[1 .. $]; 2397 goto state56; 2398 } 2399 else if (currentChar == 'u') 2400 { 2401 inputCopy = inputCopy[1 .. $]; 2402 goto state54; 2403 } 2404 else if (currentChar == 'x') 2405 { 2406 inputCopy = inputCopy[1 .. $]; 2407 goto state52; 2408 } 2409 else if (currentChar == '\"' || currentChar == '\'' || currentChar == '-' || currentChar == '0' || (currentChar >= '[' && currentChar <= ']') || (currentChar >= 'a' && currentChar <= 'b') || currentChar == 'f' || currentChar == 'n' || currentChar == 'r' || (currentChar >= 't' && currentChar <= 'v')) 2410 { 2411 inputCopy = inputCopy[1 .. $]; 2412 goto state49; 2413 } 2414 else 2415 { 2416 if (foundSymbol != SymbolID.max) 2417 goto lexerend; 2418 else 2419 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 2420 } 2421 } 2422 else 2423 { 2424 string inputCopyNext = inputCopy; 2425 import std.utf; 2426 2427 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2428 2429 { 2430 if (foundSymbol != SymbolID.max) 2431 goto lexerend; 2432 else 2433 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 2434 } 2435 } 2436 } 2437 2438 state52: 2439 // (StringLiteral) 2440 // path: [\"] [\\] [x] 2441 { 2442 if (inputCopy.length == 0) 2443 { 2444 if (input.ptr == inputCopy.ptr) 2445 goto lexerend; 2446 else if (foundSymbol != SymbolID.max) 2447 goto lexerend; 2448 else 2449 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2450 } 2451 char currentChar = inputCopy[0]; 2452 if (currentChar < 0x80) 2453 { 2454 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 2455 { 2456 inputCopy = inputCopy[1 .. $]; 2457 goto state53; 2458 } 2459 else 2460 { 2461 if (foundSymbol != SymbolID.max) 2462 goto lexerend; 2463 else 2464 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2465 } 2466 } 2467 else 2468 { 2469 string inputCopyNext = inputCopy; 2470 import std.utf; 2471 2472 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2473 2474 { 2475 if (foundSymbol != SymbolID.max) 2476 goto lexerend; 2477 else 2478 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2479 } 2480 } 2481 } 2482 2483 state53: 2484 // (StringLiteral) 2485 // path: [\"] [\\] [x] [0-9A-Fa-f] 2486 { 2487 if (inputCopy.length == 0) 2488 { 2489 if (input.ptr == inputCopy.ptr) 2490 goto lexerend; 2491 else if (foundSymbol != SymbolID.max) 2492 goto lexerend; 2493 else 2494 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2495 } 2496 char currentChar = inputCopy[0]; 2497 if (currentChar < 0x80) 2498 { 2499 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 2500 { 2501 inputCopy = inputCopy[1 .. $]; 2502 goto state49; 2503 } 2504 else 2505 { 2506 if (foundSymbol != SymbolID.max) 2507 goto lexerend; 2508 else 2509 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2510 } 2511 } 2512 else 2513 { 2514 string inputCopyNext = inputCopy; 2515 import std.utf; 2516 2517 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2518 2519 { 2520 if (foundSymbol != SymbolID.max) 2521 goto lexerend; 2522 else 2523 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2524 } 2525 } 2526 } 2527 2528 state54: 2529 // (StringLiteral) 2530 // path: [\"] [\\] [u] 2531 { 2532 if (inputCopy.length == 0) 2533 { 2534 if (input.ptr == inputCopy.ptr) 2535 goto lexerend; 2536 else if (foundSymbol != SymbolID.max) 2537 goto lexerend; 2538 else 2539 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2540 } 2541 char currentChar = inputCopy[0]; 2542 if (currentChar < 0x80) 2543 { 2544 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 2545 { 2546 inputCopy = inputCopy[1 .. $]; 2547 goto state55; 2548 } 2549 else 2550 { 2551 if (foundSymbol != SymbolID.max) 2552 goto lexerend; 2553 else 2554 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2555 } 2556 } 2557 else 2558 { 2559 string inputCopyNext = inputCopy; 2560 import std.utf; 2561 2562 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2563 2564 { 2565 if (foundSymbol != SymbolID.max) 2566 goto lexerend; 2567 else 2568 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2569 } 2570 } 2571 } 2572 2573 state55: 2574 // (StringLiteral) 2575 // path: [\"] [\\] [u] [0-9A-Fa-f] 2576 { 2577 if (inputCopy.length == 0) 2578 { 2579 if (input.ptr == inputCopy.ptr) 2580 goto lexerend; 2581 else if (foundSymbol != SymbolID.max) 2582 goto lexerend; 2583 else 2584 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2585 } 2586 char currentChar = inputCopy[0]; 2587 if (currentChar < 0x80) 2588 { 2589 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 2590 { 2591 inputCopy = inputCopy[1 .. $]; 2592 goto state52; 2593 } 2594 else 2595 { 2596 if (foundSymbol != SymbolID.max) 2597 goto lexerend; 2598 else 2599 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2600 } 2601 } 2602 else 2603 { 2604 string inputCopyNext = inputCopy; 2605 import std.utf; 2606 2607 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2608 2609 { 2610 if (foundSymbol != SymbolID.max) 2611 goto lexerend; 2612 else 2613 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2614 } 2615 } 2616 } 2617 2618 state56: 2619 // (StringLiteral) 2620 // path: [\"] [\\] [U] 2621 { 2622 if (inputCopy.length == 0) 2623 { 2624 if (input.ptr == inputCopy.ptr) 2625 goto lexerend; 2626 else if (foundSymbol != SymbolID.max) 2627 goto lexerend; 2628 else 2629 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2630 } 2631 char currentChar = inputCopy[0]; 2632 if (currentChar < 0x80) 2633 { 2634 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 2635 { 2636 inputCopy = inputCopy[1 .. $]; 2637 goto state57; 2638 } 2639 else 2640 { 2641 if (foundSymbol != SymbolID.max) 2642 goto lexerend; 2643 else 2644 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2645 } 2646 } 2647 else 2648 { 2649 string inputCopyNext = inputCopy; 2650 import std.utf; 2651 2652 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2653 2654 { 2655 if (foundSymbol != SymbolID.max) 2656 goto lexerend; 2657 else 2658 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2659 } 2660 } 2661 } 2662 2663 state57: 2664 // (StringLiteral) 2665 // path: [\"] [\\] [U] [0-9A-Fa-f] 2666 { 2667 if (inputCopy.length == 0) 2668 { 2669 if (input.ptr == inputCopy.ptr) 2670 goto lexerend; 2671 else if (foundSymbol != SymbolID.max) 2672 goto lexerend; 2673 else 2674 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2675 } 2676 char currentChar = inputCopy[0]; 2677 if (currentChar < 0x80) 2678 { 2679 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 2680 { 2681 inputCopy = inputCopy[1 .. $]; 2682 goto state58; 2683 } 2684 else 2685 { 2686 if (foundSymbol != SymbolID.max) 2687 goto lexerend; 2688 else 2689 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2690 } 2691 } 2692 else 2693 { 2694 string inputCopyNext = inputCopy; 2695 import std.utf; 2696 2697 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2698 2699 { 2700 if (foundSymbol != SymbolID.max) 2701 goto lexerend; 2702 else 2703 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2704 } 2705 } 2706 } 2707 2708 state58: 2709 // (StringLiteral) 2710 // path: [\"] [\\] [U] [0-9A-Fa-f] [0-9A-Fa-f] 2711 { 2712 if (inputCopy.length == 0) 2713 { 2714 if (input.ptr == inputCopy.ptr) 2715 goto lexerend; 2716 else if (foundSymbol != SymbolID.max) 2717 goto lexerend; 2718 else 2719 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2720 } 2721 char currentChar = inputCopy[0]; 2722 if (currentChar < 0x80) 2723 { 2724 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 2725 { 2726 inputCopy = inputCopy[1 .. $]; 2727 goto state59; 2728 } 2729 else 2730 { 2731 if (foundSymbol != SymbolID.max) 2732 goto lexerend; 2733 else 2734 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2735 } 2736 } 2737 else 2738 { 2739 string inputCopyNext = inputCopy; 2740 import std.utf; 2741 2742 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2743 2744 { 2745 if (foundSymbol != SymbolID.max) 2746 goto lexerend; 2747 else 2748 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2749 } 2750 } 2751 } 2752 2753 state59: 2754 // (StringLiteral) 2755 // path: [\"] [\\] [U] [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f] 2756 { 2757 if (inputCopy.length == 0) 2758 { 2759 if (input.ptr == inputCopy.ptr) 2760 goto lexerend; 2761 else if (foundSymbol != SymbolID.max) 2762 goto lexerend; 2763 else 2764 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2765 } 2766 char currentChar = inputCopy[0]; 2767 if (currentChar < 0x80) 2768 { 2769 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 2770 { 2771 inputCopy = inputCopy[1 .. $]; 2772 goto state54; 2773 } 2774 else 2775 { 2776 if (foundSymbol != SymbolID.max) 2777 goto lexerend; 2778 else 2779 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2780 } 2781 } 2782 else 2783 { 2784 string inputCopyNext = inputCopy; 2785 import std.utf; 2786 2787 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2788 2789 { 2790 if (foundSymbol != SymbolID.max) 2791 goto lexerend; 2792 else 2793 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 2794 } 2795 } 2796 } 2797 2798 state60: 2799 // (CharacterSetLiteral) 2800 // path: [\[] 2801 { 2802 if (inputCopy.length == 0) 2803 { 2804 if (input.ptr == inputCopy.ptr) 2805 goto lexerend; 2806 else if (foundSymbol != SymbolID.max) 2807 goto lexerend; 2808 else 2809 throw lexerException("EOF", "[^\\-\\[]", inputCopy.ptr - input.ptr); 2810 } 2811 char currentChar = inputCopy[0]; 2812 if (currentChar < 0x80) 2813 { 2814 if (currentChar == '\\') 2815 { 2816 inputCopy = inputCopy[1 .. $]; 2817 goto state63; 2818 } 2819 else if (currentChar == ']') 2820 { 2821 inputCopy = inputCopy[1 .. $]; 2822 goto state62; 2823 } 2824 else if (currentChar == '-' || currentChar == '[') 2825 { 2826 if (foundSymbol != SymbolID.max) 2827 goto lexerend; 2828 else 2829 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[^\\-\\[]", inputCopy.ptr - input.ptr); 2830 } 2831 else 2832 { 2833 inputCopy = inputCopy[1 .. $]; 2834 goto state61; 2835 } 2836 } 2837 else 2838 { 2839 string inputCopyNext = inputCopy; 2840 import std.utf; 2841 2842 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2843 2844 { 2845 inputCopy = inputCopyNext; 2846 goto state61; 2847 } 2848 } 2849 } 2850 2851 state61: 2852 // (CharacterSetLiteral) 2853 // path: [\[] [^\-\[-\]] 2854 { 2855 if (inputCopy.length == 0) 2856 { 2857 if (input.ptr == inputCopy.ptr) 2858 goto lexerend; 2859 else if (foundSymbol != SymbolID.max) 2860 goto lexerend; 2861 else 2862 throw lexerException("EOF", "[^\\[]", inputCopy.ptr - input.ptr); 2863 } 2864 char currentChar = inputCopy[0]; 2865 if (currentChar < 0x80) 2866 { 2867 if (currentChar == '-') 2868 { 2869 inputCopy = inputCopy[1 .. $]; 2870 goto state64; 2871 } 2872 else if (currentChar == '[') 2873 { 2874 if (foundSymbol != SymbolID.max) 2875 goto lexerend; 2876 else 2877 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[^\\[]", inputCopy.ptr - input.ptr); 2878 } 2879 else if (currentChar == '\\') 2880 { 2881 inputCopy = inputCopy[1 .. $]; 2882 goto state63; 2883 } 2884 else if (currentChar == ']') 2885 { 2886 inputCopy = inputCopy[1 .. $]; 2887 goto state62; 2888 } 2889 else 2890 { 2891 inputCopy = inputCopy[1 .. $]; 2892 goto state61; 2893 } 2894 } 2895 else 2896 { 2897 string inputCopyNext = inputCopy; 2898 import std.utf; 2899 2900 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2901 2902 { 2903 inputCopy = inputCopyNext; 2904 goto state61; 2905 } 2906 } 2907 } 2908 2909 state62: 2910 // CharacterSetLiteral 2911 // path: [\[] [\]] 2912 { 2913 if (inputCopy.length == 0) 2914 goto endstate62; 2915 goto endstate62; 2916 } 2917 endstate62: 2918 { 2919 assert(inputCopy.ptr >= input.ptr); 2920 foundSymbol = tokenID!"CharacterSetLiteral"; 2921 foundLength = inputCopy.ptr - input.ptr; 2922 foundIsIgnore = false; 2923 goto lexerend; 2924 } 2925 2926 state63: 2927 // (CharacterSetLiteral) 2928 // path: [\[] [\\] 2929 { 2930 if (inputCopy.length == 0) 2931 { 2932 if (input.ptr == inputCopy.ptr) 2933 goto lexerend; 2934 else if (foundSymbol != SymbolID.max) 2935 goto lexerend; 2936 else 2937 throw lexerException("EOF", "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 2938 } 2939 char currentChar = inputCopy[0]; 2940 if (currentChar < 0x80) 2941 { 2942 if (currentChar == 'U') 2943 { 2944 inputCopy = inputCopy[1 .. $]; 2945 goto state78; 2946 } 2947 else if (currentChar == 'u') 2948 { 2949 inputCopy = inputCopy[1 .. $]; 2950 goto state76; 2951 } 2952 else if (currentChar == 'x') 2953 { 2954 inputCopy = inputCopy[1 .. $]; 2955 goto state74; 2956 } 2957 else if (currentChar == '\"' || currentChar == '\'' || currentChar == '-' || currentChar == '0' || (currentChar >= '[' && currentChar <= ']') || (currentChar >= 'a' && currentChar <= 'b') || currentChar == 'f' || currentChar == 'n' || currentChar == 'r' || (currentChar >= 't' && currentChar <= 'v')) 2958 { 2959 inputCopy = inputCopy[1 .. $]; 2960 goto state61; 2961 } 2962 else 2963 { 2964 if (foundSymbol != SymbolID.max) 2965 goto lexerend; 2966 else 2967 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 2968 } 2969 } 2970 else 2971 { 2972 string inputCopyNext = inputCopy; 2973 import std.utf; 2974 2975 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 2976 2977 { 2978 if (foundSymbol != SymbolID.max) 2979 goto lexerend; 2980 else 2981 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 2982 } 2983 } 2984 } 2985 2986 state64: 2987 // (CharacterSetLiteral) 2988 // path: [\[] [^\-\[-\]] [\-] 2989 { 2990 if (inputCopy.length == 0) 2991 { 2992 if (input.ptr == inputCopy.ptr) 2993 goto lexerend; 2994 else if (foundSymbol != SymbolID.max) 2995 goto lexerend; 2996 else 2997 throw lexerException("EOF", "[^\\-\\[\\]]", inputCopy.ptr - input.ptr); 2998 } 2999 char currentChar = inputCopy[0]; 3000 if (currentChar < 0x80) 3001 { 3002 if (currentChar == '\\') 3003 { 3004 inputCopy = inputCopy[1 .. $]; 3005 goto state65; 3006 } 3007 else if (currentChar == '-' || (currentChar >= '[' && currentChar <= ']')) 3008 { 3009 if (foundSymbol != SymbolID.max) 3010 goto lexerend; 3011 else 3012 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[^\\-\\[\\]]", inputCopy.ptr - input.ptr); 3013 } 3014 else 3015 { 3016 inputCopy = inputCopy[1 .. $]; 3017 goto state60; 3018 } 3019 } 3020 else 3021 { 3022 string inputCopyNext = inputCopy; 3023 import std.utf; 3024 3025 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3026 3027 { 3028 inputCopy = inputCopyNext; 3029 goto state60; 3030 } 3031 } 3032 } 3033 3034 state65: 3035 // (CharacterSetLiteral) 3036 // path: [\[] [^\-\[-\]] [\-] [\\] 3037 { 3038 if (inputCopy.length == 0) 3039 { 3040 if (input.ptr == inputCopy.ptr) 3041 goto lexerend; 3042 else if (foundSymbol != SymbolID.max) 3043 goto lexerend; 3044 else 3045 throw lexerException("EOF", "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 3046 } 3047 char currentChar = inputCopy[0]; 3048 if (currentChar < 0x80) 3049 { 3050 if (currentChar == 'U') 3051 { 3052 inputCopy = inputCopy[1 .. $]; 3053 goto state70; 3054 } 3055 else if (currentChar == 'u') 3056 { 3057 inputCopy = inputCopy[1 .. $]; 3058 goto state68; 3059 } 3060 else if (currentChar == 'x') 3061 { 3062 inputCopy = inputCopy[1 .. $]; 3063 goto state66; 3064 } 3065 else if (currentChar == '\"' || currentChar == '\'' || currentChar == '-' || currentChar == '0' || (currentChar >= '[' && currentChar <= ']') || (currentChar >= 'a' && currentChar <= 'b') || currentChar == 'f' || currentChar == 'n' || currentChar == 'r' || (currentChar >= 't' && currentChar <= 'v')) 3066 { 3067 inputCopy = inputCopy[1 .. $]; 3068 goto state60; 3069 } 3070 else 3071 { 3072 if (foundSymbol != SymbolID.max) 3073 goto lexerend; 3074 else 3075 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 3076 } 3077 } 3078 else 3079 { 3080 string inputCopyNext = inputCopy; 3081 import std.utf; 3082 3083 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3084 3085 { 3086 if (foundSymbol != SymbolID.max) 3087 goto lexerend; 3088 else 3089 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[\\\"\\\'\\-0U\\[-\\]a-bfnrt-vx]", inputCopy.ptr - input.ptr); 3090 } 3091 } 3092 } 3093 3094 state66: 3095 // (CharacterSetLiteral) 3096 // path: [\[] [^\-\[-\]] [\-] [\\] [x] 3097 { 3098 if (inputCopy.length == 0) 3099 { 3100 if (input.ptr == inputCopy.ptr) 3101 goto lexerend; 3102 else if (foundSymbol != SymbolID.max) 3103 goto lexerend; 3104 else 3105 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3106 } 3107 char currentChar = inputCopy[0]; 3108 if (currentChar < 0x80) 3109 { 3110 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3111 { 3112 inputCopy = inputCopy[1 .. $]; 3113 goto state67; 3114 } 3115 else 3116 { 3117 if (foundSymbol != SymbolID.max) 3118 goto lexerend; 3119 else 3120 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3121 } 3122 } 3123 else 3124 { 3125 string inputCopyNext = inputCopy; 3126 import std.utf; 3127 3128 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3129 3130 { 3131 if (foundSymbol != SymbolID.max) 3132 goto lexerend; 3133 else 3134 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3135 } 3136 } 3137 } 3138 3139 state67: 3140 // (CharacterSetLiteral) 3141 // path: [\[] [^\-\[-\]] [\-] [\\] [x] [0-9A-Fa-f] 3142 { 3143 if (inputCopy.length == 0) 3144 { 3145 if (input.ptr == inputCopy.ptr) 3146 goto lexerend; 3147 else if (foundSymbol != SymbolID.max) 3148 goto lexerend; 3149 else 3150 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3151 } 3152 char currentChar = inputCopy[0]; 3153 if (currentChar < 0x80) 3154 { 3155 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3156 { 3157 inputCopy = inputCopy[1 .. $]; 3158 goto state60; 3159 } 3160 else 3161 { 3162 if (foundSymbol != SymbolID.max) 3163 goto lexerend; 3164 else 3165 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3166 } 3167 } 3168 else 3169 { 3170 string inputCopyNext = inputCopy; 3171 import std.utf; 3172 3173 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3174 3175 { 3176 if (foundSymbol != SymbolID.max) 3177 goto lexerend; 3178 else 3179 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3180 } 3181 } 3182 } 3183 3184 state68: 3185 // (CharacterSetLiteral) 3186 // path: [\[] [^\-\[-\]] [\-] [\\] [u] 3187 { 3188 if (inputCopy.length == 0) 3189 { 3190 if (input.ptr == inputCopy.ptr) 3191 goto lexerend; 3192 else if (foundSymbol != SymbolID.max) 3193 goto lexerend; 3194 else 3195 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3196 } 3197 char currentChar = inputCopy[0]; 3198 if (currentChar < 0x80) 3199 { 3200 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3201 { 3202 inputCopy = inputCopy[1 .. $]; 3203 goto state69; 3204 } 3205 else 3206 { 3207 if (foundSymbol != SymbolID.max) 3208 goto lexerend; 3209 else 3210 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3211 } 3212 } 3213 else 3214 { 3215 string inputCopyNext = inputCopy; 3216 import std.utf; 3217 3218 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3219 3220 { 3221 if (foundSymbol != SymbolID.max) 3222 goto lexerend; 3223 else 3224 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3225 } 3226 } 3227 } 3228 3229 state69: 3230 // (CharacterSetLiteral) 3231 // path: [\[] [^\-\[-\]] [\-] [\\] [u] [0-9A-Fa-f] 3232 { 3233 if (inputCopy.length == 0) 3234 { 3235 if (input.ptr == inputCopy.ptr) 3236 goto lexerend; 3237 else if (foundSymbol != SymbolID.max) 3238 goto lexerend; 3239 else 3240 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3241 } 3242 char currentChar = inputCopy[0]; 3243 if (currentChar < 0x80) 3244 { 3245 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3246 { 3247 inputCopy = inputCopy[1 .. $]; 3248 goto state66; 3249 } 3250 else 3251 { 3252 if (foundSymbol != SymbolID.max) 3253 goto lexerend; 3254 else 3255 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3256 } 3257 } 3258 else 3259 { 3260 string inputCopyNext = inputCopy; 3261 import std.utf; 3262 3263 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3264 3265 { 3266 if (foundSymbol != SymbolID.max) 3267 goto lexerend; 3268 else 3269 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3270 } 3271 } 3272 } 3273 3274 state70: 3275 // (CharacterSetLiteral) 3276 // path: [\[] [^\-\[-\]] [\-] [\\] [U] 3277 { 3278 if (inputCopy.length == 0) 3279 { 3280 if (input.ptr == inputCopy.ptr) 3281 goto lexerend; 3282 else if (foundSymbol != SymbolID.max) 3283 goto lexerend; 3284 else 3285 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3286 } 3287 char currentChar = inputCopy[0]; 3288 if (currentChar < 0x80) 3289 { 3290 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3291 { 3292 inputCopy = inputCopy[1 .. $]; 3293 goto state71; 3294 } 3295 else 3296 { 3297 if (foundSymbol != SymbolID.max) 3298 goto lexerend; 3299 else 3300 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3301 } 3302 } 3303 else 3304 { 3305 string inputCopyNext = inputCopy; 3306 import std.utf; 3307 3308 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3309 3310 { 3311 if (foundSymbol != SymbolID.max) 3312 goto lexerend; 3313 else 3314 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3315 } 3316 } 3317 } 3318 3319 state71: 3320 // (CharacterSetLiteral) 3321 // path: [\[] [^\-\[-\]] [\-] [\\] [U] [0-9A-Fa-f] 3322 { 3323 if (inputCopy.length == 0) 3324 { 3325 if (input.ptr == inputCopy.ptr) 3326 goto lexerend; 3327 else if (foundSymbol != SymbolID.max) 3328 goto lexerend; 3329 else 3330 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3331 } 3332 char currentChar = inputCopy[0]; 3333 if (currentChar < 0x80) 3334 { 3335 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3336 { 3337 inputCopy = inputCopy[1 .. $]; 3338 goto state72; 3339 } 3340 else 3341 { 3342 if (foundSymbol != SymbolID.max) 3343 goto lexerend; 3344 else 3345 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3346 } 3347 } 3348 else 3349 { 3350 string inputCopyNext = inputCopy; 3351 import std.utf; 3352 3353 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3354 3355 { 3356 if (foundSymbol != SymbolID.max) 3357 goto lexerend; 3358 else 3359 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3360 } 3361 } 3362 } 3363 3364 state72: 3365 // (CharacterSetLiteral) 3366 // path: [\[] [^\-\[-\]] [\-] [\\] [U] [0-9A-Fa-f] [0-9A-Fa-f] 3367 { 3368 if (inputCopy.length == 0) 3369 { 3370 if (input.ptr == inputCopy.ptr) 3371 goto lexerend; 3372 else if (foundSymbol != SymbolID.max) 3373 goto lexerend; 3374 else 3375 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3376 } 3377 char currentChar = inputCopy[0]; 3378 if (currentChar < 0x80) 3379 { 3380 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3381 { 3382 inputCopy = inputCopy[1 .. $]; 3383 goto state73; 3384 } 3385 else 3386 { 3387 if (foundSymbol != SymbolID.max) 3388 goto lexerend; 3389 else 3390 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3391 } 3392 } 3393 else 3394 { 3395 string inputCopyNext = inputCopy; 3396 import std.utf; 3397 3398 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3399 3400 { 3401 if (foundSymbol != SymbolID.max) 3402 goto lexerend; 3403 else 3404 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3405 } 3406 } 3407 } 3408 3409 state73: 3410 // (CharacterSetLiteral) 3411 // path: [\[] [^\-\[-\]] [\-] [\\] [U] [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f] 3412 { 3413 if (inputCopy.length == 0) 3414 { 3415 if (input.ptr == inputCopy.ptr) 3416 goto lexerend; 3417 else if (foundSymbol != SymbolID.max) 3418 goto lexerend; 3419 else 3420 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3421 } 3422 char currentChar = inputCopy[0]; 3423 if (currentChar < 0x80) 3424 { 3425 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3426 { 3427 inputCopy = inputCopy[1 .. $]; 3428 goto state68; 3429 } 3430 else 3431 { 3432 if (foundSymbol != SymbolID.max) 3433 goto lexerend; 3434 else 3435 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3436 } 3437 } 3438 else 3439 { 3440 string inputCopyNext = inputCopy; 3441 import std.utf; 3442 3443 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3444 3445 { 3446 if (foundSymbol != SymbolID.max) 3447 goto lexerend; 3448 else 3449 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3450 } 3451 } 3452 } 3453 3454 state74: 3455 // (CharacterSetLiteral) 3456 // path: [\[] [\\] [x] 3457 { 3458 if (inputCopy.length == 0) 3459 { 3460 if (input.ptr == inputCopy.ptr) 3461 goto lexerend; 3462 else if (foundSymbol != SymbolID.max) 3463 goto lexerend; 3464 else 3465 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3466 } 3467 char currentChar = inputCopy[0]; 3468 if (currentChar < 0x80) 3469 { 3470 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3471 { 3472 inputCopy = inputCopy[1 .. $]; 3473 goto state75; 3474 } 3475 else 3476 { 3477 if (foundSymbol != SymbolID.max) 3478 goto lexerend; 3479 else 3480 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3481 } 3482 } 3483 else 3484 { 3485 string inputCopyNext = inputCopy; 3486 import std.utf; 3487 3488 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3489 3490 { 3491 if (foundSymbol != SymbolID.max) 3492 goto lexerend; 3493 else 3494 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3495 } 3496 } 3497 } 3498 3499 state75: 3500 // (CharacterSetLiteral) 3501 // path: [\[] [\\] [x] [0-9A-Fa-f] 3502 { 3503 if (inputCopy.length == 0) 3504 { 3505 if (input.ptr == inputCopy.ptr) 3506 goto lexerend; 3507 else if (foundSymbol != SymbolID.max) 3508 goto lexerend; 3509 else 3510 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3511 } 3512 char currentChar = inputCopy[0]; 3513 if (currentChar < 0x80) 3514 { 3515 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3516 { 3517 inputCopy = inputCopy[1 .. $]; 3518 goto state61; 3519 } 3520 else 3521 { 3522 if (foundSymbol != SymbolID.max) 3523 goto lexerend; 3524 else 3525 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3526 } 3527 } 3528 else 3529 { 3530 string inputCopyNext = inputCopy; 3531 import std.utf; 3532 3533 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3534 3535 { 3536 if (foundSymbol != SymbolID.max) 3537 goto lexerend; 3538 else 3539 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3540 } 3541 } 3542 } 3543 3544 state76: 3545 // (CharacterSetLiteral) 3546 // path: [\[] [\\] [u] 3547 { 3548 if (inputCopy.length == 0) 3549 { 3550 if (input.ptr == inputCopy.ptr) 3551 goto lexerend; 3552 else if (foundSymbol != SymbolID.max) 3553 goto lexerend; 3554 else 3555 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3556 } 3557 char currentChar = inputCopy[0]; 3558 if (currentChar < 0x80) 3559 { 3560 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3561 { 3562 inputCopy = inputCopy[1 .. $]; 3563 goto state77; 3564 } 3565 else 3566 { 3567 if (foundSymbol != SymbolID.max) 3568 goto lexerend; 3569 else 3570 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3571 } 3572 } 3573 else 3574 { 3575 string inputCopyNext = inputCopy; 3576 import std.utf; 3577 3578 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3579 3580 { 3581 if (foundSymbol != SymbolID.max) 3582 goto lexerend; 3583 else 3584 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3585 } 3586 } 3587 } 3588 3589 state77: 3590 // (CharacterSetLiteral) 3591 // path: [\[] [\\] [u] [0-9A-Fa-f] 3592 { 3593 if (inputCopy.length == 0) 3594 { 3595 if (input.ptr == inputCopy.ptr) 3596 goto lexerend; 3597 else if (foundSymbol != SymbolID.max) 3598 goto lexerend; 3599 else 3600 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3601 } 3602 char currentChar = inputCopy[0]; 3603 if (currentChar < 0x80) 3604 { 3605 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3606 { 3607 inputCopy = inputCopy[1 .. $]; 3608 goto state74; 3609 } 3610 else 3611 { 3612 if (foundSymbol != SymbolID.max) 3613 goto lexerend; 3614 else 3615 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3616 } 3617 } 3618 else 3619 { 3620 string inputCopyNext = inputCopy; 3621 import std.utf; 3622 3623 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3624 3625 { 3626 if (foundSymbol != SymbolID.max) 3627 goto lexerend; 3628 else 3629 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3630 } 3631 } 3632 } 3633 3634 state78: 3635 // (CharacterSetLiteral) 3636 // path: [\[] [\\] [U] 3637 { 3638 if (inputCopy.length == 0) 3639 { 3640 if (input.ptr == inputCopy.ptr) 3641 goto lexerend; 3642 else if (foundSymbol != SymbolID.max) 3643 goto lexerend; 3644 else 3645 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3646 } 3647 char currentChar = inputCopy[0]; 3648 if (currentChar < 0x80) 3649 { 3650 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3651 { 3652 inputCopy = inputCopy[1 .. $]; 3653 goto state79; 3654 } 3655 else 3656 { 3657 if (foundSymbol != SymbolID.max) 3658 goto lexerend; 3659 else 3660 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3661 } 3662 } 3663 else 3664 { 3665 string inputCopyNext = inputCopy; 3666 import std.utf; 3667 3668 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3669 3670 { 3671 if (foundSymbol != SymbolID.max) 3672 goto lexerend; 3673 else 3674 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3675 } 3676 } 3677 } 3678 3679 state79: 3680 // (CharacterSetLiteral) 3681 // path: [\[] [\\] [U] [0-9A-Fa-f] 3682 { 3683 if (inputCopy.length == 0) 3684 { 3685 if (input.ptr == inputCopy.ptr) 3686 goto lexerend; 3687 else if (foundSymbol != SymbolID.max) 3688 goto lexerend; 3689 else 3690 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3691 } 3692 char currentChar = inputCopy[0]; 3693 if (currentChar < 0x80) 3694 { 3695 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3696 { 3697 inputCopy = inputCopy[1 .. $]; 3698 goto state80; 3699 } 3700 else 3701 { 3702 if (foundSymbol != SymbolID.max) 3703 goto lexerend; 3704 else 3705 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3706 } 3707 } 3708 else 3709 { 3710 string inputCopyNext = inputCopy; 3711 import std.utf; 3712 3713 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3714 3715 { 3716 if (foundSymbol != SymbolID.max) 3717 goto lexerend; 3718 else 3719 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3720 } 3721 } 3722 } 3723 3724 state80: 3725 // (CharacterSetLiteral) 3726 // path: [\[] [\\] [U] [0-9A-Fa-f] [0-9A-Fa-f] 3727 { 3728 if (inputCopy.length == 0) 3729 { 3730 if (input.ptr == inputCopy.ptr) 3731 goto lexerend; 3732 else if (foundSymbol != SymbolID.max) 3733 goto lexerend; 3734 else 3735 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3736 } 3737 char currentChar = inputCopy[0]; 3738 if (currentChar < 0x80) 3739 { 3740 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3741 { 3742 inputCopy = inputCopy[1 .. $]; 3743 goto state81; 3744 } 3745 else 3746 { 3747 if (foundSymbol != SymbolID.max) 3748 goto lexerend; 3749 else 3750 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3751 } 3752 } 3753 else 3754 { 3755 string inputCopyNext = inputCopy; 3756 import std.utf; 3757 3758 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3759 3760 { 3761 if (foundSymbol != SymbolID.max) 3762 goto lexerend; 3763 else 3764 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3765 } 3766 } 3767 } 3768 3769 state81: 3770 // (CharacterSetLiteral) 3771 // path: [\[] [\\] [U] [0-9A-Fa-f] [0-9A-Fa-f] [0-9A-Fa-f] 3772 { 3773 if (inputCopy.length == 0) 3774 { 3775 if (input.ptr == inputCopy.ptr) 3776 goto lexerend; 3777 else if (foundSymbol != SymbolID.max) 3778 goto lexerend; 3779 else 3780 throw lexerException("EOF", "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3781 } 3782 char currentChar = inputCopy[0]; 3783 if (currentChar < 0x80) 3784 { 3785 if ((currentChar >= '0' && currentChar <= '9') || (currentChar >= 'A' && currentChar <= 'F') || (currentChar >= 'a' && currentChar <= 'f')) 3786 { 3787 inputCopy = inputCopy[1 .. $]; 3788 goto state76; 3789 } 3790 else 3791 { 3792 if (foundSymbol != SymbolID.max) 3793 goto lexerend; 3794 else 3795 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3796 } 3797 } 3798 else 3799 { 3800 string inputCopyNext = inputCopy; 3801 import std.utf; 3802 3803 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3804 3805 { 3806 if (foundSymbol != SymbolID.max) 3807 goto lexerend; 3808 else 3809 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[0-9A-Fa-f]", inputCopy.ptr - input.ptr); 3810 } 3811 } 3812 } 3813 3814 state82: 3815 // IntegerLiteral 3816 // path: [1-9] 3817 { 3818 if (inputCopy.length == 0) 3819 goto endstate82; 3820 char currentChar = inputCopy[0]; 3821 if (currentChar < 0x80) 3822 { 3823 if ((currentChar >= '0' && currentChar <= '9')) 3824 { 3825 inputCopy = inputCopy[1 .. $]; 3826 goto state82; 3827 } 3828 else 3829 { 3830 goto endstate82; 3831 } 3832 } 3833 else 3834 { 3835 string inputCopyNext = inputCopy; 3836 import std.utf; 3837 3838 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3839 3840 { 3841 goto endstate82; 3842 } 3843 } 3844 } 3845 endstate82: 3846 { 3847 assert(inputCopy.ptr >= input.ptr); 3848 foundSymbol = tokenID!"IntegerLiteral"; 3849 foundLength = inputCopy.ptr - input.ptr; 3850 foundIsIgnore = false; 3851 goto lexerend; 3852 } 3853 3854 state83: 3855 // IntegerLiteral 3856 // path: [0] 3857 { 3858 if (inputCopy.length == 0) 3859 goto endstate83; 3860 goto endstate83; 3861 } 3862 endstate83: 3863 { 3864 assert(inputCopy.ptr >= input.ptr); 3865 foundSymbol = tokenID!"IntegerLiteral"; 3866 foundLength = inputCopy.ptr - input.ptr; 3867 foundIsIgnore = false; 3868 goto lexerend; 3869 } 3870 3871 state84: 3872 // ";" 3873 // path: [;] 3874 { 3875 if (inputCopy.length == 0) 3876 goto endstate84; 3877 goto endstate84; 3878 } 3879 endstate84: 3880 { 3881 assert(inputCopy.ptr >= input.ptr); 3882 foundSymbol = tokenID!"\";\""; 3883 foundLength = inputCopy.ptr - input.ptr; 3884 foundIsIgnore = false; 3885 goto lexerend; 3886 } 3887 3888 state85: 3889 // "=" 3890 // path: [=] 3891 { 3892 if (inputCopy.length == 0) 3893 goto endstate85; 3894 goto endstate85; 3895 } 3896 endstate85: 3897 { 3898 assert(inputCopy.ptr >= input.ptr); 3899 foundSymbol = tokenID!"\"=\""; 3900 foundLength = inputCopy.ptr - input.ptr; 3901 foundIsIgnore = false; 3902 goto lexerend; 3903 } 3904 3905 state86: 3906 // "(" 3907 // path: [(] 3908 { 3909 if (inputCopy.length == 0) 3910 goto endstate86; 3911 goto endstate86; 3912 } 3913 endstate86: 3914 { 3915 assert(inputCopy.ptr >= input.ptr); 3916 foundSymbol = tokenID!"\"(\""; 3917 foundLength = inputCopy.ptr - input.ptr; 3918 foundIsIgnore = false; 3919 goto lexerend; 3920 } 3921 3922 state87: 3923 // ")" 3924 // path: [)] 3925 { 3926 if (inputCopy.length == 0) 3927 goto endstate87; 3928 goto endstate87; 3929 } 3930 endstate87: 3931 { 3932 assert(inputCopy.ptr >= input.ptr); 3933 foundSymbol = tokenID!"\")\""; 3934 foundLength = inputCopy.ptr - input.ptr; 3935 foundIsIgnore = false; 3936 goto lexerend; 3937 } 3938 3939 state88: 3940 // "," 3941 // path: [,] 3942 { 3943 if (inputCopy.length == 0) 3944 goto endstate88; 3945 goto endstate88; 3946 } 3947 endstate88: 3948 { 3949 assert(inputCopy.ptr >= input.ptr); 3950 foundSymbol = tokenID!"\",\""; 3951 foundLength = inputCopy.ptr - input.ptr; 3952 foundIsIgnore = false; 3953 goto lexerend; 3954 } 3955 3956 state89: 3957 // ("...") 3958 // path: [.] 3959 { 3960 if (inputCopy.length == 0) 3961 { 3962 if (input.ptr == inputCopy.ptr) 3963 goto lexerend; 3964 else if (foundSymbol != SymbolID.max) 3965 goto lexerend; 3966 else 3967 throw lexerException("EOF", "[.]", inputCopy.ptr - input.ptr); 3968 } 3969 char currentChar = inputCopy[0]; 3970 if (currentChar < 0x80) 3971 { 3972 if (currentChar == '.') 3973 { 3974 inputCopy = inputCopy[1 .. $]; 3975 goto state90; 3976 } 3977 else 3978 { 3979 if (foundSymbol != SymbolID.max) 3980 goto lexerend; 3981 else 3982 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[.]", inputCopy.ptr - input.ptr); 3983 } 3984 } 3985 else 3986 { 3987 string inputCopyNext = inputCopy; 3988 import std.utf; 3989 3990 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 3991 3992 { 3993 if (foundSymbol != SymbolID.max) 3994 goto lexerend; 3995 else 3996 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[.]", inputCopy.ptr - input.ptr); 3997 } 3998 } 3999 } 4000 4001 state90: 4002 // ("...") 4003 // path: [.] [.] 4004 { 4005 if (inputCopy.length == 0) 4006 { 4007 if (input.ptr == inputCopy.ptr) 4008 goto lexerend; 4009 else if (foundSymbol != SymbolID.max) 4010 goto lexerend; 4011 else 4012 throw lexerException("EOF", "[.]", inputCopy.ptr - input.ptr); 4013 } 4014 char currentChar = inputCopy[0]; 4015 if (currentChar < 0x80) 4016 { 4017 if (currentChar == '.') 4018 { 4019 inputCopy = inputCopy[1 .. $]; 4020 goto state91; 4021 } 4022 else 4023 { 4024 if (foundSymbol != SymbolID.max) 4025 goto lexerend; 4026 else 4027 throw lexerException(text("Error unexpected \'", currentChar, "\'"), "[.]", inputCopy.ptr - input.ptr); 4028 } 4029 } 4030 else 4031 { 4032 string inputCopyNext = inputCopy; 4033 import std.utf; 4034 4035 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 4036 4037 { 4038 if (foundSymbol != SymbolID.max) 4039 goto lexerend; 4040 else 4041 throw lexerException(text("Error unexpected \'", currentDchar, "\'"), "[.]", inputCopy.ptr - input.ptr); 4042 } 4043 } 4044 } 4045 4046 state91: 4047 // "..." 4048 // path: [.] [.] [.] 4049 { 4050 if (inputCopy.length == 0) 4051 goto endstate91; 4052 goto endstate91; 4053 } 4054 endstate91: 4055 { 4056 assert(inputCopy.ptr >= input.ptr); 4057 foundSymbol = tokenID!"\"...\""; 4058 foundLength = inputCopy.ptr - input.ptr; 4059 foundIsIgnore = false; 4060 goto lexerend; 4061 } 4062 4063 state92: 4064 // "@" 4065 // path: [@] 4066 { 4067 if (inputCopy.length == 0) 4068 goto endstate92; 4069 goto endstate92; 4070 } 4071 endstate92: 4072 { 4073 assert(inputCopy.ptr >= input.ptr); 4074 foundSymbol = tokenID!"\"@\""; 4075 foundLength = inputCopy.ptr - input.ptr; 4076 foundIsIgnore = false; 4077 goto lexerend; 4078 } 4079 4080 state93: 4081 // ":" 4082 // path: [:] 4083 { 4084 if (inputCopy.length == 0) 4085 goto endstate93; 4086 goto endstate93; 4087 } 4088 endstate93: 4089 { 4090 assert(inputCopy.ptr >= input.ptr); 4091 foundSymbol = tokenID!"\":\""; 4092 foundLength = inputCopy.ptr - input.ptr; 4093 foundIsIgnore = false; 4094 goto lexerend; 4095 } 4096 4097 state94: 4098 // "{" 4099 // path: [{] 4100 { 4101 if (inputCopy.length == 0) 4102 goto endstate94; 4103 goto endstate94; 4104 } 4105 endstate94: 4106 { 4107 assert(inputCopy.ptr >= input.ptr); 4108 foundSymbol = tokenID!"\"{\""; 4109 foundLength = inputCopy.ptr - input.ptr; 4110 foundIsIgnore = false; 4111 goto lexerend; 4112 } 4113 4114 state95: 4115 // "}" 4116 // path: [}] 4117 { 4118 if (inputCopy.length == 0) 4119 goto endstate95; 4120 goto endstate95; 4121 } 4122 endstate95: 4123 { 4124 assert(inputCopy.ptr >= input.ptr); 4125 foundSymbol = tokenID!"\"}\""; 4126 foundLength = inputCopy.ptr - input.ptr; 4127 foundIsIgnore = false; 4128 goto lexerend; 4129 } 4130 4131 state96: 4132 // "?" 4133 // path: [?] 4134 { 4135 if (inputCopy.length == 0) 4136 goto endstate96; 4137 goto endstate96; 4138 } 4139 endstate96: 4140 { 4141 assert(inputCopy.ptr >= input.ptr); 4142 foundSymbol = tokenID!"\"?\""; 4143 foundLength = inputCopy.ptr - input.ptr; 4144 foundIsIgnore = false; 4145 goto lexerend; 4146 } 4147 4148 state97: 4149 // "!" 4150 // path: [!] 4151 { 4152 if (inputCopy.length == 0) 4153 goto endstate97; 4154 goto endstate97; 4155 } 4156 endstate97: 4157 { 4158 assert(inputCopy.ptr >= input.ptr); 4159 foundSymbol = tokenID!"\"!\""; 4160 foundLength = inputCopy.ptr - input.ptr; 4161 foundIsIgnore = false; 4162 goto lexerend; 4163 } 4164 4165 state98: 4166 // "<" ("<<") 4167 // path: [<] 4168 { 4169 if (inputCopy.length == 0) 4170 goto endstate98; 4171 char currentChar = inputCopy[0]; 4172 if (currentChar < 0x80) 4173 { 4174 if (currentChar == '<') 4175 { 4176 assert(inputCopy.ptr >= input.ptr); 4177 foundSymbol = tokenID!"\"<\""; 4178 foundLength = inputCopy.ptr - input.ptr; 4179 foundIsIgnore = false; 4180 inputCopy = inputCopy[1 .. $]; 4181 goto state99; 4182 } 4183 else 4184 { 4185 goto endstate98; 4186 } 4187 } 4188 else 4189 { 4190 string inputCopyNext = inputCopy; 4191 import std.utf; 4192 4193 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 4194 4195 { 4196 goto endstate98; 4197 } 4198 } 4199 } 4200 endstate98: 4201 { 4202 assert(inputCopy.ptr >= input.ptr); 4203 foundSymbol = tokenID!"\"<\""; 4204 foundLength = inputCopy.ptr - input.ptr; 4205 foundIsIgnore = false; 4206 goto lexerend; 4207 } 4208 4209 state99: 4210 // "<<" 4211 // path: [<] [<] 4212 { 4213 if (inputCopy.length == 0) 4214 goto endstate99; 4215 goto endstate99; 4216 } 4217 endstate99: 4218 { 4219 assert(inputCopy.ptr >= input.ptr); 4220 foundSymbol = tokenID!"\"<<\""; 4221 foundLength = inputCopy.ptr - input.ptr; 4222 foundIsIgnore = false; 4223 goto lexerend; 4224 } 4225 4226 state100: 4227 // ">" (">>") 4228 // path: [>] 4229 { 4230 if (inputCopy.length == 0) 4231 goto endstate100; 4232 char currentChar = inputCopy[0]; 4233 if (currentChar < 0x80) 4234 { 4235 if (currentChar == '>') 4236 { 4237 assert(inputCopy.ptr >= input.ptr); 4238 foundSymbol = tokenID!"\">\""; 4239 foundLength = inputCopy.ptr - input.ptr; 4240 foundIsIgnore = false; 4241 inputCopy = inputCopy[1 .. $]; 4242 goto state101; 4243 } 4244 else 4245 { 4246 goto endstate100; 4247 } 4248 } 4249 else 4250 { 4251 string inputCopyNext = inputCopy; 4252 import std.utf; 4253 4254 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 4255 4256 { 4257 goto endstate100; 4258 } 4259 } 4260 } 4261 endstate100: 4262 { 4263 assert(inputCopy.ptr >= input.ptr); 4264 foundSymbol = tokenID!"\">\""; 4265 foundLength = inputCopy.ptr - input.ptr; 4266 foundIsIgnore = false; 4267 goto lexerend; 4268 } 4269 4270 state101: 4271 // ">>" 4272 // path: [>] [>] 4273 { 4274 if (inputCopy.length == 0) 4275 goto endstate101; 4276 goto endstate101; 4277 } 4278 endstate101: 4279 { 4280 assert(inputCopy.ptr >= input.ptr); 4281 foundSymbol = tokenID!"\">>\""; 4282 foundLength = inputCopy.ptr - input.ptr; 4283 foundIsIgnore = false; 4284 goto lexerend; 4285 } 4286 4287 state102: 4288 // "*" 4289 // path: [*] 4290 { 4291 if (inputCopy.length == 0) 4292 goto endstate102; 4293 goto endstate102; 4294 } 4295 endstate102: 4296 { 4297 assert(inputCopy.ptr >= input.ptr); 4298 foundSymbol = tokenID!"\"*\""; 4299 foundLength = inputCopy.ptr - input.ptr; 4300 foundIsIgnore = false; 4301 goto lexerend; 4302 } 4303 4304 state103: 4305 // "-" 4306 // path: [\-] 4307 { 4308 if (inputCopy.length == 0) 4309 goto endstate103; 4310 goto endstate103; 4311 } 4312 endstate103: 4313 { 4314 assert(inputCopy.ptr >= input.ptr); 4315 foundSymbol = tokenID!"\"-\""; 4316 foundLength = inputCopy.ptr - input.ptr; 4317 foundIsIgnore = false; 4318 goto lexerend; 4319 } 4320 4321 state104: 4322 // "|" 4323 // path: [|] 4324 { 4325 if (inputCopy.length == 0) 4326 goto endstate104; 4327 goto endstate104; 4328 } 4329 endstate104: 4330 { 4331 assert(inputCopy.ptr >= input.ptr); 4332 foundSymbol = tokenID!"\"|\""; 4333 foundLength = inputCopy.ptr - input.ptr; 4334 foundIsIgnore = false; 4335 goto lexerend; 4336 } 4337 4338 state105: 4339 // "^" 4340 // path: [\^] 4341 { 4342 if (inputCopy.length == 0) 4343 goto endstate105; 4344 goto endstate105; 4345 } 4346 endstate105: 4347 { 4348 assert(inputCopy.ptr >= input.ptr); 4349 foundSymbol = tokenID!"\"^\""; 4350 foundLength = inputCopy.ptr - input.ptr; 4351 foundIsIgnore = false; 4352 goto lexerend; 4353 } 4354 4355 state106: 4356 // "+" 4357 // path: [+] 4358 { 4359 if (inputCopy.length == 0) 4360 goto endstate106; 4361 goto endstate106; 4362 } 4363 endstate106: 4364 { 4365 assert(inputCopy.ptr >= input.ptr); 4366 foundSymbol = tokenID!"\"+\""; 4367 foundLength = inputCopy.ptr - input.ptr; 4368 foundIsIgnore = false; 4369 goto lexerend; 4370 } 4371 4372 lexerend: 4373 4374 if (foundSymbol != SymbolID.max) 4375 { 4376 if (foundLength == 0) 4377 { 4378 if (!inputCopy.empty) 4379 throw lexerException("no token", null, inputCopy.ptr + 1 - input.ptr); 4380 else 4381 { 4382 front.content = ""; 4383 front.symbol = SymbolID(0); 4384 static if (includeIgnoredTokens) 4385 front.isIgnoreToken = false; 4386 empty = true; 4387 return; 4388 } 4389 } 4390 static if (!includeIgnoredTokens) 4391 { 4392 if (foundIsIgnore) 4393 { 4394 front.currentLocation = front.currentLocation + LocationDiff.fromStr(input[0 .. foundLength]); 4395 input = input[foundLength .. $]; 4396 inputCopy = input; 4397 foundLength = 0; 4398 foundIsIgnore = false; 4399 foundSymbol = SymbolID.max; 4400 storedStart = size_t.max; 4401 storedString = null; 4402 goto start; 4403 } 4404 } 4405 front.content = input[0 .. foundLength]; 4406 front.symbol = foundSymbol; 4407 static if (includeIgnoredTokens) 4408 front.isIgnoreToken = foundIsIgnore; 4409 empty = false; 4410 return; 4411 } 4412 else if (input.length == 0) 4413 { 4414 front.content = ""; 4415 front.symbol = SymbolID(0); 4416 static if (includeIgnoredTokens) 4417 front.isIgnoreToken = false; 4418 empty = true; 4419 return; 4420 } 4421 else 4422 throw lexerException("no token", null, 1); 4423 } 4424 4425 // NestingBlockCommentPart* "+"* "+/" 4426 private bool lexPart0(ref string inputCopy, bool hasPreviousSymbol) 4427 { 4428 state0: 4429 // ($m_0) 4430 // path: 4431 start: 4432 { 4433 if (inputCopy.length == 0) 4434 { 4435 if (input.ptr == inputCopy.ptr) 4436 return false; 4437 else if (hasPreviousSymbol) 4438 return false; 4439 else 4440 throw lexerException("EOF", "[^]", inputCopy.ptr - input.ptr); 4441 } 4442 char currentChar = inputCopy[0]; 4443 if (currentChar < 0x80) 4444 { 4445 if (currentChar == '+') 4446 { 4447 inputCopy = inputCopy[1 .. $]; 4448 goto state1; 4449 } 4450 else if (currentChar == '/') 4451 { 4452 inputCopy = inputCopy[1 .. $]; 4453 goto state3; 4454 } 4455 else 4456 { 4457 inputCopy = inputCopy[1 .. $]; 4458 goto state0; 4459 } 4460 } 4461 else 4462 { 4463 string inputCopyNext = inputCopy; 4464 import std.utf; 4465 4466 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 4467 4468 { 4469 inputCopy = inputCopyNext; 4470 goto state0; 4471 } 4472 } 4473 } 4474 4475 state1: 4476 // ($m_0) 4477 // path: [+] 4478 { 4479 if (inputCopy.length == 0) 4480 { 4481 if (input.ptr == inputCopy.ptr) 4482 return false; 4483 else if (hasPreviousSymbol) 4484 return false; 4485 else 4486 throw lexerException("EOF", "[^]", inputCopy.ptr - input.ptr); 4487 } 4488 char currentChar = inputCopy[0]; 4489 if (currentChar < 0x80) 4490 { 4491 if (currentChar == '+') 4492 { 4493 inputCopy = inputCopy[1 .. $]; 4494 goto state1; 4495 } 4496 else if (currentChar == '/') 4497 { 4498 inputCopy = inputCopy[1 .. $]; 4499 goto state2; 4500 } 4501 else 4502 { 4503 inputCopy = inputCopy[1 .. $]; 4504 goto state0; 4505 } 4506 } 4507 else 4508 { 4509 string inputCopyNext = inputCopy; 4510 import std.utf; 4511 4512 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 4513 4514 { 4515 inputCopy = inputCopyNext; 4516 goto state0; 4517 } 4518 } 4519 } 4520 4521 state2: 4522 // $m_0 4523 // path: [+] [/] 4524 { 4525 if (inputCopy.length == 0) 4526 return true; 4527 return true; 4528 } 4529 endstate2: 4530 4531 state3: 4532 // ($m_0) 4533 // path: [/] 4534 { 4535 if (inputCopy.length == 0) 4536 { 4537 if (input.ptr == inputCopy.ptr) 4538 return false; 4539 else if (hasPreviousSymbol) 4540 return false; 4541 else 4542 throw lexerException("EOF", "[^]", inputCopy.ptr - input.ptr); 4543 } 4544 char currentChar = inputCopy[0]; 4545 if (currentChar < 0x80) 4546 { 4547 if (currentChar == '+') 4548 { 4549 inputCopy = inputCopy[1 .. $]; 4550 goto state4; 4551 } 4552 else if (currentChar == '/') 4553 { 4554 inputCopy = inputCopy[1 .. $]; 4555 goto state3; 4556 } 4557 else 4558 { 4559 inputCopy = inputCopy[1 .. $]; 4560 goto state0; 4561 } 4562 } 4563 else 4564 { 4565 string inputCopyNext = inputCopy; 4566 import std.utf; 4567 4568 dchar currentDchar = decodeFront!(Yes.useReplacementDchar)(inputCopyNext); 4569 4570 { 4571 inputCopy = inputCopyNext; 4572 goto state0; 4573 } 4574 } 4575 } 4576 4577 state4: 4578 // ($m_0) 4579 // path: [/] [+] 4580 { 4581 // RecursiveLexer 4582 if (lexPart0(inputCopy, hasPreviousSymbol)) 4583 goto state0; 4584 else 4585 return false; 4586 } 4587 4588 assert(false); 4589 } 4590 4591 SingleParseException!Location lexerException(string errorText, string expected, size_t len, 4592 string file = __FILE__, size_t line = __LINE__) 4593 { 4594 string str = errorText; 4595 if (expected.length) 4596 str ~= ", expected " ~ expected; 4597 return new SingleParseException!Location(str, front.currentLocation, front.currentLocation, file, line); 4598 } 4599 } 4600 4601 immutable allNonterminalTokens = [ 4602 /* 0: */ immutable(Nonterminal)("$null", NonterminalFlags.none, [], []), 4603 /* 1: */ immutable(Nonterminal)("Identifier", NonterminalFlags.none, ["lowPrio"], []), 4604 /* 2: */ immutable(Nonterminal)("StringLiteral", NonterminalFlags.none, [], []), 4605 /* 3: */ immutable(Nonterminal)("CharacterSetLiteral", NonterminalFlags.none, [], []), 4606 /* 4: */ immutable(Nonterminal)("IntegerLiteral", NonterminalFlags.none, [], []), 4607 /* 5: */ immutable(Nonterminal)("\";\"", NonterminalFlags.none, [], []), 4608 /* 6: */ immutable(Nonterminal)("\"=\"", NonterminalFlags.none, [], []), 4609 /* 7: */ immutable(Nonterminal)("\"fragment\"", NonterminalFlags.none, [], []), 4610 /* 8: */ immutable(Nonterminal)("\"token\"", NonterminalFlags.none, [], []), 4611 /* 9: */ immutable(Nonterminal)("\"(\"", NonterminalFlags.none, [], []), 4612 /* 10: */ immutable(Nonterminal)("\")\"", NonterminalFlags.none, [], []), 4613 /* 11: */ immutable(Nonterminal)("\",\"", NonterminalFlags.none, [], []), 4614 /* 12: */ immutable(Nonterminal)("\"...\"", NonterminalFlags.none, [], []), 4615 /* 13: */ immutable(Nonterminal)("\"option\"", NonterminalFlags.none, [], []), 4616 /* 14: */ immutable(Nonterminal)("\"import\"", NonterminalFlags.none, [], []), 4617 /* 15: */ immutable(Nonterminal)("\"match\"", NonterminalFlags.none, [], []), 4618 /* 16: */ immutable(Nonterminal)("\"@\"", NonterminalFlags.none, [], []), 4619 /* 17: */ immutable(Nonterminal)("\":\"", NonterminalFlags.none, [], []), 4620 /* 18: */ immutable(Nonterminal)("\"{\"", NonterminalFlags.none, [], []), 4621 /* 19: */ immutable(Nonterminal)("\"}\"", NonterminalFlags.none, [], []), 4622 /* 20: */ immutable(Nonterminal)("\"?\"", NonterminalFlags.none, [], []), 4623 /* 21: */ immutable(Nonterminal)("\"!\"", NonterminalFlags.none, [], []), 4624 /* 22: */ immutable(Nonterminal)("\"<\"", NonterminalFlags.none, [], []), 4625 /* 23: */ immutable(Nonterminal)("\">\"", NonterminalFlags.none, [], []), 4626 /* 24: */ immutable(Nonterminal)("\"*\"", NonterminalFlags.none, [], []), 4627 /* 25: */ immutable(Nonterminal)("\">>\"", NonterminalFlags.none, [], []), 4628 /* 26: */ immutable(Nonterminal)("\"<<\"", NonterminalFlags.none, [], []), 4629 /* 27: */ immutable(Nonterminal)("\"-\"", NonterminalFlags.none, [], []), 4630 /* 28: */ immutable(Nonterminal)("\"anytoken\"", NonterminalFlags.none, [], []), 4631 /* 29: */ immutable(Nonterminal)("\"|\"", NonterminalFlags.none, [], []), 4632 /* 30: */ immutable(Nonterminal)("\"^\"", NonterminalFlags.none, [], []), 4633 /* 31: */ immutable(Nonterminal)("\"+\"", NonterminalFlags.none, [], []), 4634 /* 32: */ immutable(Nonterminal)("\"t(\"", NonterminalFlags.none, [], []), 4635 /* 33: */ immutable(Nonterminal)("StringPart", NonterminalFlags.none, [], []), 4636 /* 34: */ immutable(Nonterminal)("CharacterSetPart", NonterminalFlags.none, [], []), 4637 /* 35: */ immutable(Nonterminal)("CharacterSetPart2", NonterminalFlags.none, [], []), 4638 /* 36: */ immutable(Nonterminal)("EscapeSequence", NonterminalFlags.none, [], []), 4639 /* 37: */ immutable(Nonterminal)("Hex", NonterminalFlags.none, [], []), 4640 /* 38: */ immutable(Nonterminal)("Space", NonterminalFlags.none, ["ignoreToken"], []), 4641 /* 39: */ immutable(Nonterminal)("LineComment", NonterminalFlags.none, ["ignoreToken"], []), 4642 /* 40: */ immutable(Nonterminal)("BlockComment", NonterminalFlags.none, ["ignoreToken"], []), 4643 /* 41: */ immutable(Nonterminal)("BlockCommentPart", NonterminalFlags.none, [], []), 4644 /* 42: */ immutable(Nonterminal)("NestingBlockComment", NonterminalFlags.none, ["ignoreToken"], []), 4645 /* 43: */ immutable(Nonterminal)("NestingBlockCommentPart", NonterminalFlags.none, [], []), 4646 /* 44: */ immutable(Nonterminal)("[a-zA-Z0-9_]+", NonterminalFlags.none, ["array"], []), 4647 /* 45: */ immutable(Nonterminal)("[a-zA-Z0-9_]*", NonterminalFlags.none, ["array"], []), 4648 /* 46: */ immutable(Nonterminal)("StringPart+", NonterminalFlags.none, ["array"], []), 4649 /* 47: */ immutable(Nonterminal)("StringPart*", NonterminalFlags.none, ["array"], []), 4650 /* 48: */ immutable(Nonterminal)("\"^\"?", NonterminalFlags.none, [], []), 4651 /* 49: */ immutable(Nonterminal)("CharacterSetPart+", NonterminalFlags.none, ["array"], []), 4652 /* 50: */ immutable(Nonterminal)("CharacterSetPart*", NonterminalFlags.none, ["array"], []), 4653 /* 51: */ immutable(Nonterminal)("[0-9]+", NonterminalFlags.none, ["array"], []), 4654 /* 52: */ immutable(Nonterminal)("[0-9]*", NonterminalFlags.none, ["array"], []), 4655 /* 53: */ immutable(Nonterminal)("[_\\n\\r\\t]+", NonterminalFlags.none, ["array"], []), 4656 /* 54: */ immutable(Nonterminal)("[^\\n\\r]+", NonterminalFlags.none, ["array"], []), 4657 /* 55: */ immutable(Nonterminal)("[^\\n\\r]*", NonterminalFlags.none, ["array"], []), 4658 /* 56: */ immutable(Nonterminal)("BlockCommentPart+", NonterminalFlags.none, ["array"], []), 4659 /* 57: */ immutable(Nonterminal)("BlockCommentPart*", NonterminalFlags.none, ["array"], []), 4660 /* 58: */ immutable(Nonterminal)("\"*\"+", NonterminalFlags.none, ["array"], []), 4661 /* 59: */ immutable(Nonterminal)("\"*\"*", NonterminalFlags.none, ["array"], []), 4662 /* 60: */ immutable(Nonterminal)("NestingBlockCommentPart+", NonterminalFlags.none, ["array"], []), 4663 /* 61: */ immutable(Nonterminal)("NestingBlockCommentPart*", NonterminalFlags.none, ["array"], []), 4664 /* 62: */ immutable(Nonterminal)("\"+\"+", NonterminalFlags.none, ["array"], []), 4665 /* 63: */ immutable(Nonterminal)("\"+\"*", NonterminalFlags.none, ["array"], []), 4666 /* 64: */ immutable(Nonterminal)("\"/\"+", NonterminalFlags.none, ["array"], []), 4667 /* 65: */ immutable(Nonterminal)("\"/\"*", NonterminalFlags.none, ["array"], []), 4668 ];