⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 push.c

📁 a little DFA compiler.
💻 C
📖 第 1 页 / 共 2 页
字号:
	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	goto yy38;	default:	goto yy45;	}yy45:#line 245 "push.re"	{ SEND(kReturn);         }#line 618 "<stdout>"yy46:	yych = *++YYCURSOR;	switch(yych) {	case 'i':	goto yy47;	default:	goto yy39;	}yy47:	yych = *++YYCURSOR;	switch(yych) {	case 'l':	goto yy48;	default:	goto yy39;	}yy48:	yych = *++YYCURSOR;	switch(yych) {	case 'e':	goto yy49;	default:	goto yy39;	}yy49:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case '_':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	goto yy38;	default:	goto yy50;	}yy50:#line 244 "push.re"	{ SEND(kWhile);          }#line 708 "<stdout>"yy51:	yych = *++YYCURSOR;	switch(yych) {	case 'e':	goto yy52;	default:	goto yy39;	}yy52:	yych = *++YYCURSOR;	switch(yych) {	case 'a':	goto yy53;	default:	goto yy39;	}yy53:	yych = *++YYCURSOR;	switch(yych) {	case 'k':	goto yy54;	default:	goto yy39;	}yy54:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case '_':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	goto yy38;	default:	goto yy55;	}yy55:#line 243 "push.re"	{ SEND(kBreak);          }#line 798 "<stdout>"yy56:	yych = *++YYCURSOR;	switch(yych) {	case 't':	goto yy57;	default:	goto yy39;	}yy57:	yych = *++YYCURSOR;	switch(yych) {	case 'o':	goto yy58;	default:	goto yy39;	}yy58:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case '_':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	goto yy38;	default:	goto yy59;	}yy59:#line 242 "push.re"	{ SEND(kGoto);           }#line 882 "<stdout>"yy60:	yych = *++YYCURSOR;	switch(yych) {	case 's':	goto yy61;	default:	goto yy39;	}yy61:	yych = *++YYCURSOR;	switch(yych) {	case 'e':	goto yy62;	default:	goto yy39;	}yy62:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case '_':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	goto yy38;	default:	goto yy63;	}yy63:#line 241 "push.re"	{ SEND(kElse);           }#line 966 "<stdout>"yy64:	yych = *++YYCURSOR;	switch(yych) {	case 'r':	goto yy65;	default:	goto yy39;	}yy65:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case '_':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	goto yy38;	default:	goto yy66;	}yy66:#line 240 "push.re"	{ SEND(kFor);            }#line 1044 "<stdout>"yy67:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'G':	case 'H':	case 'I':	case 'J':	case 'K':	case 'L':	case 'M':	case 'N':	case 'O':	case 'P':	case 'Q':	case 'R':	case 'S':	case 'T':	case 'U':	case 'V':	case 'W':	case 'X':	case 'Y':	case 'Z':	case '_':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	case 'g':	case 'h':	case 'i':	case 'j':	case 'k':	case 'l':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'r':	case 's':	case 't':	case 'u':	case 'v':	case 'w':	case 'x':	case 'y':	case 'z':	goto yy38;	default:	goto yy68;	}yy68:#line 239 "push.re"	{ SEND(kIf);             }#line 1116 "<stdout>"}#line 261 "push.re"    fill:        ssize_t unfinishedSize = cursor-start;        printf(            "scanner needs a refill. Exiting for now with:\n"            "    saved fill state = %d\n"            "    unfinished token size = %d\n",            state,            unfinishedSize        );        if(0<unfinishedSize && start<limit)        {            printf("    unfinished token is :");            fwrite(start, 1, cursor-start, stdout);            putchar('\n');        }        putchar('\n');        /*         * Once we get here, we can get rid of         * everything before start and after limit.         */        if(eof==true) goto start;        if(buffer<start)        {            size_t startOffset = start-buffer;            memmove(buffer, start, limit-start);            marker -= startOffset;            cursor -= startOffset;            limit -= startOffset;            start -= startOffset;        }        return 0;    }};// ----------------------------------------------------------------------int main(    int     argc,    char    **argv){    // Parse cmd line    int input = 0;    if(1<argc)    {        input = open(argv[1], O_RDONLY | O_BINARY);        if(input<0)        {            fprintf(                stderr,                "could not open file %s\n",                argv[1]            );            exit(1);        }    }    /*     * Tokenize input file by pushing batches     * of data one by one into the scanner.     */    const size_t batchSize = 256;    uint8_t buffer[batchSize];    PushScanner scanner;    while(1)    {        ssize_t n = read(input, buffer, batchSize);        scanner.push(buffer, n);        if(n<batchSize) break;    }    scanner.push(0, -1);    close(input);    // Done    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -