scanner.c
来自「a little DFA compiler.」· C语言 代码 · 共 1,421 行 · 第 1/2 页
C
1,421 行
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 yy67; case ':': goto yy65; default: goto yy69; }yy69:#line 218 "scanner.re" { cur = cursor; tok+= 5; /* skip "re2c:" */ iscfg = 1; yylval.str = new Str(token()); return CONFIG; }#line 755 "<stdout>"yy70: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR;yy71: switch(yych) { case 0x0A: goto yy66; case '\\': goto yy74; case ']': goto yy75; default: goto yy70; }yy72: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy66; case '\\': goto yy77; case ']': goto yy78; default: goto yy72; }yy74: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy66; default: goto yy70; }yy75: ++YYCURSOR;#line 190 "scanner.re" { cur = cursor; yylval.regexp = ranToRE(token()); return RANGE; }#line 791 "<stdout>"yy77: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy66; default: goto yy72; }yy78: ++YYCURSOR;#line 186 "scanner.re" { cur = cursor; yylval.regexp = invToRE(token()); return RANGE; }#line 806 "<stdout>"yy80: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR;yy81: switch(yych) { case 0x0A: goto yy66; case '\'': goto yy83; case '\\': goto yy82; default: goto yy80; }yy82: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy66; default: goto yy80; }yy83: ++YYCURSOR;#line 179 "scanner.re" { cur = cursor; yylval.regexp = strToCaseInsensitiveRE(token()); return STRING; }#line 832 "<stdout>"yy85: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR;yy86: switch(yych) { case 0x0A: goto yy66; case '"': goto yy88; case '\\': goto yy87; default: goto yy85; }yy87: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy66; default: goto yy85; }yy88: ++YYCURSOR;#line 175 "scanner.re" { cur = cursor; yylval.regexp = strToRE(token()); return STRING; }#line 858 "<stdout>"yy90: ++YYCURSOR;#line 172 "scanner.re" { tok = cursor; RETURN(0); }#line 864 "<stdout>"yy92: ++YYCURSOR;#line 169 "scanner.re" { depth = 1; goto comment; }#line 870 "<stdout>"yy94: yych = *++YYCURSOR; switch(yych) { case ',': goto yy108; default: goto yy96; }yy95: ++YYCURSOR; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR;yy96: switch(yych) { case ',': goto yy101; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy95; case '}': goto yy99; default: goto yy66; }yy97: ++YYCURSOR;yy98:#line 216 "scanner.re" { fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers"); }#line 902 "<stdout>"yy99: ++YYCURSOR;#line 204 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = atoi((char *)tok+1); RETURN(CLOSESIZE); }#line 909 "<stdout>"yy101: yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); switch(yych) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy104; case '}': goto yy102; default: goto yy98; }yy102: ++YYCURSOR;#line 212 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = -1; RETURN(CLOSESIZE); }#line 933 "<stdout>"yy104: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy104; case '}': goto yy106; default: goto yy66; }yy106: ++YYCURSOR;#line 208 "scanner.re" { yylval.extop.minsize = atoi((char *)tok+1); yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1)); RETURN(CLOSESIZE); }#line 958 "<stdout>"yy108: yyaccept = 6; yych = *(YYMARKER = ++YYCURSOR); switch(yych) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy104; case '}': goto yy109; default: goto yy98; }yy109: ++YYCURSOR;#line 201 "scanner.re" { yylval.op = '*'; RETURN(CLOSE); }#line 981 "<stdout>"}#line 247 "scanner.re"code:#line 988 "<stdout>"{ YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy117; case '"': goto yy121; case '\'': goto yy122; case '{': goto yy115; case '}': goto yy113; default: goto yy119; }yy113: ++YYCURSOR;#line 251 "scanner.re" { if(--depth == 0){ cur = cursor; yylval.token = new Token(token(), tline); return CODE; } goto code; }#line 1010 "<stdout>"yy115: ++YYCURSOR;#line 257 "scanner.re" { ++depth; goto code; }#line 1016 "<stdout>"yy117: ++YYCURSOR;#line 259 "scanner.re" { if(cursor == eof) fatal("missing '}'"); pos = cursor; cline++; goto code; }#line 1024 "<stdout>"yy119: ++YYCURSOR;yy120:#line 263 "scanner.re" { goto code; }#line 1030 "<stdout>"yy121: yych = *(YYMARKER = ++YYCURSOR); switch(yych) { case 0x0A: goto yy120; default: goto yy128; }yy122: yych = *(YYMARKER = ++YYCURSOR); switch(yych) { case 0x0A: goto yy120; default: goto yy124; }yy123: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR;yy124: switch(yych) { case 0x0A: goto yy125; case '\'': goto yy119; case '\\': goto yy126; default: goto yy123; }yy125: YYCURSOR = YYMARKER; goto yy120;yy126: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy125; default: goto yy123; }yy127: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR;yy128: switch(yych) { case 0x0A: goto yy125; case '"': goto yy119; case '\\': goto yy129; default: goto yy127; }yy129: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy125; default: goto yy127; }}#line 264 "scanner.re"comment:#line 1090 "<stdout>"{ YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy135; case '*': goto yy132; case '/': goto yy134; default: goto yy137; }yy132: ++YYCURSOR; switch((yych = *YYCURSOR)) { case '/': goto yy140; default: goto yy133; }yy133:#line 279 "scanner.re" { if(cursor == eof) RETURN(0); goto comment; }#line 1111 "<stdout>"yy134: yych = *++YYCURSOR; switch(yych) { case '*': goto yy138; default: goto yy133; }yy135: ++YYCURSOR;#line 275 "scanner.re" { if(cursor == eof) RETURN(0); tok = pos = cursor; cline++; goto comment; }#line 1125 "<stdout>"yy137: yych = *++YYCURSOR; goto yy133;yy138: ++YYCURSOR;#line 272 "scanner.re" { ++depth; fatal("ambiguous /* found"); goto comment; }#line 1135 "<stdout>"yy140: ++YYCURSOR;#line 268 "scanner.re" { if(--depth == 0) goto scan; else goto comment; }#line 1143 "<stdout>"}#line 281 "scanner.re"config:#line 1150 "<stdout>"{ YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych) { case 0x09: case ' ': goto yy144; case '=': goto yy146; default: goto yy148; }yy144: ++YYCURSOR; yych = *YYCURSOR; goto yy153;yy145:#line 285 "scanner.re" { goto config; }#line 1168 "<stdout>"yy146: ++YYCURSOR; yych = *YYCURSOR; goto yy151;yy147:#line 286 "scanner.re" { iscfg = 2; cur = cursor; RETURN('='); }#line 1179 "<stdout>"yy148: ++YYCURSOR;#line 290 "scanner.re" { fatal("missing '='"); }#line 1184 "<stdout>"yy150: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR;yy151: switch(yych) { case 0x09: case ' ': goto yy150; default: goto yy147; }yy152: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR;yy153: switch(yych) { case 0x09: case ' ': goto yy152; default: goto yy145; }}#line 291 "scanner.re"value:#line 1211 "<stdout>"{ YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch(yych) { case 0x09: case 0x0A: case 0x0D: case ' ': case ';': goto yy156; case '"': goto yy164; case '\'': goto yy166; case '-': goto yy159; case '0': goto yy157; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy160; default: goto yy162; }yy156:#line 300 "scanner.re" { cur = cursor; yylval.str = new Str(token()); iscfg = 0; return VALUE; }#line 1244 "<stdout>"yy157: ++YYCURSOR; switch((yych = *YYCURSOR)) { case 0x09: case 0x0A: case 0x0D: case ' ': case ';': goto yy158; default: goto yy162; }yy158:#line 295 "scanner.re" { cur = cursor; yylval.number = atoi(token().to_string().c_str()); iscfg = 0; return NUMBER; }#line 1262 "<stdout>"yy159: yych = *++YYCURSOR; switch(yych) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy160; default: goto yy163; }yy160: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x09: case 0x0A: case 0x0D: case ' ': case ';': goto yy158; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': goto yy160; default: goto yy162; }yy162: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR;yy163: switch(yych) { case 0x09: case 0x0A: case 0x0D: case ' ': case ';': goto yy156; default: goto yy162; }yy164: YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x09: case 0x0D: case ' ': case ';': goto yy174; case 0x0A: goto yy156; case '"': goto yy162; case '\\': goto yy176; default: goto yy164; }yy166: YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x09: case 0x0D: case ' ': case ';': goto yy168; case 0x0A: goto yy156; case '\'': goto yy162; case '\\': goto yy171; default: goto yy166; }yy168: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy170; case '\'': goto yy172; case '\\': goto yy173; default: goto yy168; }yy170: YYCURSOR = YYMARKER; goto yy156;yy171: YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x09: case 0x0D: case ' ': case ';': goto yy168; case 0x0A: goto yy156; default: goto yy166; }yy172: yych = *++YYCURSOR; goto yy156;yy173: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy170; default: goto yy168; }yy174: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy170; case '"': goto yy172; case '\\': goto yy177; default: goto yy174; }yy176: YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x09: case 0x0D: case ' ': case ';': goto yy174; case 0x0A: goto yy156; default: goto yy164; }yy177: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch(yych) { case 0x0A: goto yy170; default: goto yy174; }}#line 305 "scanner.re"}void Scanner::fatal(uint ofs, const char *msg) const{ out.flush(); std::cerr << "re2c: error: " << "line " << tline << ", column " << (tchar + ofs + 1) << ": " << msg << std::endl; exit(1);}} // end namespace re2c
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?