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

📄 cmmap.c

📁 a little DFA compiler.
💻 C
📖 第 1 页 / 共 4 页
字号:
/* Generated by re2c */#line 1 "cmmap.re"#include <stdlib.h>#include <stdio.h>#include <sys/stat.h>#include <sys/mman.h>#include <string.h>#define	ADDEQ	257#define	ANDAND	258#define	ANDEQ	259#define	ARRAY	260#define	ASM	261#define	AUTO	262#define	BREAK	263#define	CASE	264#define	CHAR	265#define	CONST	266#define	CONTINUE	267#define	DECR	268#define	DEFAULT	269#define	DEREF	270#define	DIVEQ	271#define	DO	272#define	DOUBLE	273#define	ELLIPSIS	274#define	ELSE	275#define	ENUM	276#define	EQL	277#define	EXTERN	278#define	FCON	279#define	FLOAT	280#define	FOR	281#define	FUNCTION	282#define	GEQ	283#define	GOTO	284#define	ICON	285#define	ID	286#define	IF	287#define	INCR	288#define	INT	289#define	LEQ	290#define	LONG	291#define	LSHIFT	292#define	LSHIFTEQ	293#define	MODEQ	294#define	MULEQ	295#define	NEQ	296#define	OREQ	297#define	OROR	298#define	POINTER	299#define	REGISTER	300#define	RETURN	301#define	RSHIFT	302#define	RSHIFTEQ	303#define	SCON	304#define	SHORT	305#define	SIGNED	306#define	SIZEOF	307#define	STATIC	308#define	STRUCT	309#define	SUBEQ	310#define	SWITCH	311#define	TYPEDEF	312#define	UNION	313#define	UNSIGNED	314#define	VOID	315#define	VOLATILE	316#define	WHILE	317#define	XOREQ	318#define	EOI	319typedef unsigned int unint;typedef unsigned char uchar;#define	YYCTYPE		uchar#define	YYCURSOR	cursor#define	YYLIMIT		s->lim#define	YYMARKER	s->ptr#define	YYFILL(n)	{cursor = fill(s, cursor);}#define	RET(i)	{s->cur = cursor; return i;}typedef struct Scanner {    uchar		*tok, *ptr, *cur, *pos, *lim, *eof;    unint		line;} Scanner;uchar *fill(Scanner *s, uchar *cursor){    if(!s->eof){	unint cnt = s->lim - s->tok;	uchar *buf = malloc((cnt + 1)*sizeof(uchar));	memcpy(buf, s->tok, cnt);	cursor = &buf[cursor - s->tok];	s->pos = &buf[s->pos - s->tok];	s->ptr = &buf[s->ptr - s->tok];	s->lim = &buf[cnt];	s->eof = s->lim; *(s->eof)++ = '\n';	s->tok = buf;    }    return cursor;}int scan(Scanner *s){	uchar *cursor = s->cur;std:	s->tok = cursor;#line 116 "cmmap.re"#line 113 "<stdout>"{	YYCTYPE yych;	unsigned int yyaccept = 0;	if((YYLIMIT - YYCURSOR) < 9) YYFILL(9);	yych = *YYCURSOR;	switch(yych) {	case 0x09:	case 0x0B:	case 0x0C:	case ' ':	goto yy73;	case 0x0A:	goto yy75;	case '!':	goto yy49;	case '"':	goto yy28;	case '%':	goto yy39;	case '&':	goto yy41;	case '\'':	goto yy24;	case '(':	goto yy61;	case ')':	goto yy63;	case '*':	goto yy37;	case '+':	goto yy33;	case ',':	goto yy57;	case '-':	goto yy35;	case '.':	goto yy26;	case '/':	goto yy2;	case '0':	goto yy21;	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	goto yy23;	case ':':	goto yy59;	case ';':	goto yy51;	case '<':	goto yy31;	case '=':	goto yy47;	case '>':	goto yy29;	case '?':	goto yy71;	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 'h':	case 'j':	case 'k':	case 'm':	case 'n':	case 'o':	case 'p':	case 'q':	case 'x':	case 'y':	case 'z':	goto yy20;	case '[':	goto yy65;	case ']':	goto yy67;	case '^':	goto yy43;	case 'a':	goto yy4;	case 'b':	goto yy6;	case 'c':	goto yy7;	case 'd':	goto yy8;	case 'e':	goto yy9;	case 'f':	goto yy10;	case 'g':	goto yy11;	case 'i':	goto yy12;	case 'l':	goto yy13;	case 'r':	goto yy14;	case 's':	goto yy15;	case 't':	goto yy16;	case 'u':	goto yy17;	case 'v':	goto yy18;	case 'w':	goto yy19;	case '{':	goto yy53;	case '|':	goto yy45;	case '}':	goto yy55;	case '~':	goto yy69;	default:	goto yy77;	}yy2:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '*':	goto yy341;	case '=':	goto yy339;	default:	goto yy3;	}yy3:#line 205 "cmmap.re"	{ RET('/'); }#line 227 "<stdout>"yy4:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case 'u':	goto yy335;	default:	goto yy180;	}yy5:#line 154 "cmmap.re"	{ RET(ID); }#line 237 "<stdout>"yy6:	yych = *++YYCURSOR;	switch(yych) {	case 'r':	goto yy330;	default:	goto yy180;	}yy7:	yych = *++YYCURSOR;	switch(yych) {	case 'a':	goto yy311;	case 'h':	goto yy312;	case 'o':	goto yy313;	default:	goto yy180;	}yy8:	yych = *++YYCURSOR;	switch(yych) {	case 'e':	goto yy297;	case 'o':	goto yy298;	default:	goto yy180;	}yy9:	yych = *++YYCURSOR;	switch(yych) {	case 'l':	goto yy283;	case 'n':	goto yy284;	case 'x':	goto yy285;	default:	goto yy180;	}yy10:	yych = *++YYCURSOR;	switch(yych) {	case 'l':	goto yy275;	case 'o':	goto yy276;	default:	goto yy180;	}yy11:	yych = *++YYCURSOR;	switch(yych) {	case 'o':	goto yy271;	default:	goto yy180;	}yy12:	yych = *++YYCURSOR;	switch(yych) {	case 'f':	goto yy266;	case 'n':	goto yy268;	default:	goto yy180;	}yy13:	yych = *++YYCURSOR;	switch(yych) {	case 'o':	goto yy262;	default:	goto yy180;	}yy14:	yych = *++YYCURSOR;	switch(yych) {	case 'e':	goto yy249;	default:	goto yy180;	}yy15:	yych = *++YYCURSOR;	switch(yych) {	case 'h':	goto yy216;	case 'i':	goto yy217;	case 't':	goto yy218;	case 'w':	goto yy219;	default:	goto yy180;	}yy16:	yych = *++YYCURSOR;	switch(yych) {	case 'y':	goto yy209;	default:	goto yy180;	}yy17:	yych = *++YYCURSOR;	switch(yych) {	case 'n':	goto yy197;	default:	goto yy180;	}yy18:	yych = *++YYCURSOR;	switch(yych) {	case 'o':	goto yy186;	default:	goto yy180;	}yy19:	yych = *++YYCURSOR;	switch(yych) {	case 'h':	goto yy181;	default:	goto yy180;	}yy20:	yych = *++YYCURSOR;	goto yy180;yy21:	yyaccept = 0;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case 'L':	case 'U':	case 'l':	case 'u':	goto yy155;	case 'X':	case 'x':	goto yy172;	default:	goto yy171;	}yy22:#line 158 "cmmap.re"	{ RET(ICON); }#line 350 "<stdout>"yy23:	yyaccept = 0;	yych = *(YYMARKER = ++YYCURSOR);	goto yy153;yy24:	yyaccept = 1;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case 0x0A:	goto yy25;	default:	goto yy143;	}yy25:#line 224 "cmmap.re"	{		printf("unexpected character: %c\n", *s->tok);		goto std;	    }#line 368 "<stdout>"yy26:	yyaccept = 2;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case '.':	goto yy131;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	goto yy132;	default:	goto yy27;	}yy27:#line 198 "cmmap.re"	{ RET('.'); }#line 389 "<stdout>"yy28:	yyaccept = 1;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case 0x0A:	goto yy25;	default:	goto yy121;	}yy29:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy114;	case '>':	goto yy116;	default:	goto yy30;	}yy30:#line 208 "cmmap.re"	{ RET('>'); }#line 407 "<stdout>"yy31:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '<':	goto yy110;	case '=':	goto yy108;	default:	goto yy32;	}yy32:#line 207 "cmmap.re"	{ RET('<'); }#line 418 "<stdout>"yy33:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '+':	goto yy104;	case '=':	goto yy106;	default:	goto yy34;	}yy34:#line 203 "cmmap.re"	{ RET('+'); }#line 429 "<stdout>"yy35:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '-':	goto yy100;	case '=':	goto yy102;	case '>':	goto yy98;	default:	goto yy36;	}yy36:#line 202 "cmmap.re"	{ RET('-'); }#line 441 "<stdout>"yy37:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy96;	default:	goto yy38;	}yy38:#line 204 "cmmap.re"	{ RET('*'); }#line 451 "<stdout>"yy39:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy94;	default:	goto yy40;	}yy40:#line 206 "cmmap.re"	{ RET('%'); }#line 461 "<stdout>"yy41:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '&':	goto yy90;	case '=':	goto yy92;	default:	goto yy42;	}yy42:#line 199 "cmmap.re"	{ RET('&'); }#line 472 "<stdout>"yy43:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy88;	default:	goto yy44;	}yy44:#line 209 "cmmap.re"	{ RET('^'); }#line 482 "<stdout>"yy45:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy86;	case '|':	goto yy84;	default:	goto yy46;	}yy46:#line 210 "cmmap.re"	{ RET('|'); }#line 493 "<stdout>"yy47:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy82;	default:	goto yy48;	}yy48:#line 193 "cmmap.re"	{ RET('='); }#line 503 "<stdout>"yy49:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy80;	default:	goto yy50;	}yy50:#line 200 "cmmap.re"	{ RET('!'); }#line 513 "<stdout>"yy51:	++YYCURSOR;#line 188 "cmmap.re"	{ RET(';'); }#line 518 "<stdout>"yy53:	++YYCURSOR;#line 189 "cmmap.re"	{ RET('{'); }#line 523 "<stdout>"yy55:	++YYCURSOR;#line 190 "cmmap.re"	{ RET('}'); }#line 528 "<stdout>"yy57:	++YYCURSOR;#line 191 "cmmap.re"	{ RET(','); }#line 533 "<stdout>"yy59:	++YYCURSOR;#line 192 "cmmap.re"	{ RET(':'); }#line 538 "<stdout>"yy61:	++YYCURSOR;#line 194 "cmmap.re"	{ RET('('); }#line 543 "<stdout>"yy63:	++YYCURSOR;#line 195 "cmmap.re"	{ RET(')'); }#line 548 "<stdout>"yy65:	++YYCURSOR;#line 196 "cmmap.re"	{ RET('['); }#line 553 "<stdout>"yy67:	++YYCURSOR;#line 197 "cmmap.re"	{ RET(']'); }#line 558 "<stdout>"yy69:	++YYCURSOR;#line 201 "cmmap.re"	{ RET('~'); }#line 563 "<stdout>"yy71:	++YYCURSOR;#line 211 "cmmap.re"	{ RET('?'); }#line 568 "<stdout>"yy73:	++YYCURSOR;	yych = *YYCURSOR;	goto yy79;yy74:#line 214 "cmmap.re"	{ goto std; }#line 576 "<stdout>"yy75:	++YYCURSOR;#line 217 "cmmap.re"	{		if(cursor == s->eof) RET(EOI);		s->pos = cursor; s->line++;		goto std;	    }#line 585 "<stdout>"yy77:	yych = *++YYCURSOR;	goto yy25;yy78:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;yy79:	switch(yych) {	case 0x09:	case 0x0B:	case 0x0C:	case ' ':	goto yy78;	default:	goto yy74;	}yy80:	++YYCURSOR;#line 187 "cmmap.re"	{ RET(NEQ); }#line 605 "<stdout>"yy82:	++YYCURSOR;#line 186 "cmmap.re"	{ RET(EQL); }#line 610 "<stdout>"yy84:	++YYCURSOR;#line 183 "cmmap.re"	{ RET(OROR); }#line 615 "<stdout>"yy86:	++YYCURSOR;#line 176 "cmmap.re"	{ RET(OREQ); }#line 620 "<stdout>"yy88:	++YYCURSOR;#line 175 "cmmap.re"	{ RET(XOREQ); }#line 625 "<stdout>"yy90:	++YYCURSOR;#line 182 "cmmap.re"	{ RET(ANDAND); }#line 630 "<stdout>"yy92:	++YYCURSOR;#line 174 "cmmap.re"	{ RET(ANDEQ); }#line 635 "<stdout>"yy94:	++YYCURSOR;#line 173 "cmmap.re"	{ RET(MODEQ); }#line 640 "<stdout>"yy96:	++YYCURSOR;#line 171 "cmmap.re"	{ RET(MULEQ); }#line 645 "<stdout>"yy98:	++YYCURSOR;#line 181 "cmmap.re"	{ RET(DEREF); }#line 650 "<stdout>"yy100:	++YYCURSOR;#line 180 "cmmap.re"	{ RET(DECR); }#line 655 "<stdout>"yy102:	++YYCURSOR;#line 170 "cmmap.re"	{ RET(SUBEQ); }#line 660 "<stdout>"yy104:	++YYCURSOR;#line 179 "cmmap.re"	{ RET(INCR); }#line 665 "<stdout>"yy106:	++YYCURSOR;#line 169 "cmmap.re"	{ RET(ADDEQ); }#line 670 "<stdout>"yy108:	++YYCURSOR;#line 184 "cmmap.re"	{ RET(LEQ); }#line 675 "<stdout>"yy110:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy112;	default:	goto yy111;	}yy111:#line 178 "cmmap.re"	{ RET(LSHIFT); }#line 685 "<stdout>"yy112:	++YYCURSOR;#line 168 "cmmap.re"	{ RET(LSHIFTEQ); }#line 690 "<stdout>"yy114:	++YYCURSOR;#line 185 "cmmap.re"	{ RET(GEQ); }#line 695 "<stdout>"yy116:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy118;	default:	goto yy117;	}yy117:#line 177 "cmmap.re"	{ RET(RSHIFT); }#line 705 "<stdout>"yy118:	++YYCURSOR;#line 167 "cmmap.re"	{ RET(RSHIFTEQ); }#line 710 "<stdout>"yy120:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;yy121:	switch(yych) {	case 0x0A:	goto yy122;	case '"':	goto yy124;	case '\\':	goto yy123;	default:	goto yy120;	}yy122:	YYCURSOR = YYMARKER;	switch(yyaccept) {	case 0: 	goto yy22;	case 1: 	goto yy25;	case 2: 	goto yy27;	case 3: 	goto yy134;	}yy123:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;	switch(yych) {	case '"':	case '\'':	case '?':	case '\\':	case 'a':	case 'b':	case 'f':	case 'n':	case 'r':	case 't':	case 'v':	goto yy120;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	goto yy127;	case 'x':	goto yy126;	default:	goto yy122;	}yy124:	++YYCURSOR;#line 164 "cmmap.re"	{ RET(SCON); }#line 761 "<stdout>"yy126:	++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':	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	goto yy129;	default:	goto yy122;	}yy127:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;	switch(yych) {	case 0x0A:	goto yy122;	case '"':	goto yy124;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	goto yy127;	case '\\':	goto yy123;	default:	goto yy120;	}yy129:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;	switch(yych) {	case 0x0A:	goto yy122;	case '"':	goto yy124;	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 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	goto yy129;	case '\\':	goto yy123;	default:	goto yy120;	}yy131:	yych = *++YYCURSOR;	switch(yych) {	case '.':	goto yy140;	default:	goto yy122;	}yy132:	yyaccept = 3;	YYMARKER = ++YYCURSOR;	if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);	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 yy132;	case 'E':	case 'e':	goto yy135;	case 'F':	case 'L':	case 'f':	case 'l':	goto yy136;	default:	goto yy134;	}yy134:#line 161 "cmmap.re"	{ RET(FCON); }#line 874 "<stdout>"yy135:	yych = *++YYCURSOR;	switch(yych) {	case '+':	case '-':	goto yy137;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	goto yy138;	default:	goto yy122;	}yy136:	yych = *++YYCURSOR;	goto yy134;yy137:	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 yy138;	default:	goto yy122;	}yy138:	++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 yy138;	case 'F':	case 'L':	case 'f':	case 'l':	goto yy136;	default:	goto yy134;	}yy140:	++YYCURSOR;#line 166 "cmmap.re"	{ RET(ELLIPSIS); }#line 935 "<stdout>"yy142:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;yy143:	switch(yych) {	case 0x0A:	goto yy122;	case '\'':	goto yy145;	case '\\':	goto yy144;	default:	goto yy142;	}yy144:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;	switch(yych) {	case '"':	case '\'':	case '?':	case '\\':	case 'a':	case 'b':	case 'f':	case 'n':	case 'r':	case 't':	case 'v':	goto yy142;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	goto yy147;	case 'x':	goto yy146;	default:	goto yy122;	}yy145:	yych = *++YYCURSOR;	goto yy22;yy146:	++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':	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	goto yy149;	default:	goto yy122;	}yy147:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;	switch(yych) {	case 0x0A:	goto yy122;	case '\'':	goto yy145;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	goto yy147;	case '\\':	goto yy144;	default:	goto yy142;	}yy149:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;	switch(yych) {	case 0x0A:	goto yy122;	case '\'':	goto yy145;	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 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':	goto yy149;	case '\\':	goto yy144;	default:	goto yy142;	}yy151:	yyaccept = 3;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case 'E':	case 'e':	goto yy162;	default:	goto yy161;	}yy152:	yyaccept = 0;	YYMARKER = ++YYCURSOR;	if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);	yych = *YYCURSOR;yy153:	switch(yych) {	case '.':	goto yy151;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	goto yy152;	case 'E':	case 'e':	goto yy154;	case 'L':	case 'U':	case 'l':	case 'u':	goto yy155;	default:	goto yy22;	}yy154:	yych = *++YYCURSOR;	switch(yych) {	case '+':	case '-':	goto yy157;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	goto yy158;	default:	goto yy122;	}

⌨️ 快捷键说明

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