📄 push.fg.c
字号:
&&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34, &&yy34 }; goto *yytarget[yych]; }yy2: ++YYCURSOR; if((yych = *YYCURSOR) == 'f') goto yy67; goto yy39;yy3:#line 246 "push.fg.re" { SEND(kIdentifier); }#line 326 "<stdout>"yy4: yych = *++YYCURSOR; if(yych == 'o') goto yy64; goto yy39;yy5: yych = *++YYCURSOR; if(yych == 'l') goto yy60; goto yy39;yy6: yych = *++YYCURSOR; if(yych == 'o') goto yy56; goto yy39;yy7: yych = *++YYCURSOR; if(yych == 'r') goto yy51; goto yy39;yy8: yych = *++YYCURSOR; if(yych == 'h') goto yy46; goto yy39;yy9: yych = *++YYCURSOR; if(yych == 'e') goto yy40; goto yy39;yy10: yych = *++YYCURSOR; goto yy39;yy11: yych = *++YYCURSOR; goto yy39;yy12: ++YYCURSOR; yych = *YYCURSOR; goto yy37;yy13:#line 247 "push.fg.re" { SEND(kDecimalConstant);}#line 364 "<stdout>"yy14: ++YYCURSOR;#line 249 "push.fg.re" { SEND(kEqual); }#line 369 "<stdout>"yy16: ++YYCURSOR;#line 250 "push.fg.re" { SEND(kLeftParen); }#line 374 "<stdout>"yy18: ++YYCURSOR;#line 251 "push.fg.re" { SEND(kRightParen); }#line 379 "<stdout>"yy20: ++YYCURSOR;#line 252 "push.fg.re" { SEND(kMinus); }#line 384 "<stdout>"yy22: ++YYCURSOR;#line 253 "push.fg.re" { SEND(kPlus); }#line 389 "<stdout>"yy24: ++YYCURSOR;#line 254 "push.fg.re" { SEND(kStar); }#line 394 "<stdout>"yy26: ++YYCURSOR;#line 255 "push.fg.re" { SEND(kSlash); }#line 399 "<stdout>"yy28: ++YYCURSOR;#line 257 "push.fg.re" { SKIP(); }#line 404 "<stdout>"yy30: ++YYCURSOR;#line 258 "push.fg.re" { SKIP(); }#line 409 "<stdout>"yy32: ++YYCURSOR;#line 259 "push.fg.re" { send(kEOF); return 1; }#line 414 "<stdout>"yy34: ++YYCURSOR;#line 260 "push.fg.re" { SEND(kUnknown); }#line 419 "<stdout>"yy36: ++YYCURSOR; YYSETSTATE(1); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel1: yych = *YYCURSOR;yy37: if(yybm[0+yych] & 64) { goto yy36; } goto yy13;yy38: ++YYCURSOR; YYSETSTATE(2); if(YYLIMIT == YYCURSOR) YYFILL(1);yyFillLabel2: yych = *YYCURSOR;yy39: if(yybm[0+yych] & 128) { goto yy38; } goto yy3;yy40: yych = *++YYCURSOR; if(yych != 't') goto yy39; yych = *++YYCURSOR; if(yych != 'u') goto yy39; yych = *++YYCURSOR; if(yych != 'r') goto yy39; yych = *++YYCURSOR; if(yych != 'n') goto yy39; ++YYCURSOR; if(yybm[0+(yych = *YYCURSOR)] & 128) { goto yy38; }#line 245 "push.fg.re" { SEND(kReturn); }#line 457 "<stdout>"yy46: yych = *++YYCURSOR; if(yych != 'i') goto yy39; yych = *++YYCURSOR; if(yych != 'l') goto yy39; yych = *++YYCURSOR; if(yych != 'e') goto yy39; ++YYCURSOR; if(yybm[0+(yych = *YYCURSOR)] & 128) { goto yy38; }#line 244 "push.fg.re" { SEND(kWhile); }#line 471 "<stdout>"yy51: yych = *++YYCURSOR; if(yych != 'e') goto yy39; yych = *++YYCURSOR; if(yych != 'a') goto yy39; yych = *++YYCURSOR; if(yych != 'k') goto yy39; ++YYCURSOR; if(yybm[0+(yych = *YYCURSOR)] & 128) { goto yy38; }#line 243 "push.fg.re" { SEND(kBreak); }#line 485 "<stdout>"yy56: yych = *++YYCURSOR; if(yych != 't') goto yy39; yych = *++YYCURSOR; if(yych != 'o') goto yy39; ++YYCURSOR; if(yybm[0+(yych = *YYCURSOR)] & 128) { goto yy38; }#line 242 "push.fg.re" { SEND(kGoto); }#line 497 "<stdout>"yy60: yych = *++YYCURSOR; if(yych != 's') goto yy39; yych = *++YYCURSOR; if(yych != 'e') goto yy39; ++YYCURSOR; if(yybm[0+(yych = *YYCURSOR)] & 128) { goto yy38; }#line 241 "push.fg.re" { SEND(kElse); }#line 509 "<stdout>"yy64: yych = *++YYCURSOR; if(yych != 'r') goto yy39; ++YYCURSOR; if(yybm[0+(yych = *YYCURSOR)] & 128) { goto yy38; }#line 240 "push.fg.re" { SEND(kFor); }#line 519 "<stdout>"yy67: ++YYCURSOR; if(yybm[0+(yych = *YYCURSOR)] & 128) { goto yy38; }#line 239 "push.fg.re" { SEND(kIf); }#line 527 "<stdout>" }}#line 261 "push.fg.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 + -