📄 push.c
字号:
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 + -