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 + -
显示快捷键?