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

📄 cnokw.c

📁 a little DFA compiler.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Generated by re2c */#line 1 "cnokw.re"#include <stdlib.h>#include <stdio.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 uint;typedef unsigned char uchar;#define	BSIZE	8192#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 {    int			fd;    uchar		*bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof;    uint		line;} Scanner;uchar *fill(Scanner *s, uchar *cursor){    if(!s->eof){	uint cnt = s->tok - s->bot;	if(cnt){	    memcpy(s->bot, s->tok, s->lim - s->tok);	    s->tok = s->bot;	    s->ptr -= cnt;	    cursor -= cnt;	    s->pos -= cnt;	    s->lim -= cnt;	}	if((s->top - s->lim) < BSIZE){	    uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar));	    memcpy(buf, s->tok, s->lim - s->tok);	    s->tok = buf;	    s->ptr = &buf[s->ptr - s->bot];	    cursor = &buf[cursor - s->bot];	    s->pos = &buf[s->pos - s->bot];	    s->lim = &buf[s->lim - s->bot];	    s->top = &s->lim[BSIZE];	    free(s->bot);	    s->bot = buf;	}	if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){	    s->eof = &s->lim[cnt]; *(s->eof)++ = '\n';	}	s->lim += cnt;    }    return cursor;}int scan(Scanner *s){	uchar *cursor = s->cur;std:	s->tok = cursor;#line 133 "cnokw.re"#line 130 "<stdout>"{	YYCTYPE yych;	unsigned int yyaccept = 0;	if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);	yych = *YYCURSOR;	switch(yych) {	case 0x09:	case 0x0B:	case 0x0C:	case ' ':	goto yy58;	case 0x0A:	goto yy60;	case '!':	goto yy34;	case '"':	goto yy13;	case '%':	goto yy24;	case '&':	goto yy26;	case '\'':	goto yy9;	case '(':	goto yy46;	case ')':	goto yy48;	case '*':	goto yy22;	case '+':	goto yy18;	case ',':	goto yy42;	case '-':	goto yy20;	case '.':	goto yy11;	case '/':	goto yy2;	case '0':	goto yy6;	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	goto yy8;	case ':':	goto yy44;	case ';':	goto yy36;	case '<':	goto yy16;	case '=':	goto yy32;	case '>':	goto yy14;	case '?':	goto yy56;	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 yy4;	case '[':	goto yy50;	case ']':	goto yy52;	case '^':	goto yy28;	case '{':	goto yy38;	case '|':	goto yy30;	case '}':	goto yy40;	case '~':	goto yy54;	default:	goto yy62;	}yy2:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '*':	goto yy168;	case '=':	goto yy166;	default:	goto yy3;	}yy3:#line 189 "cnokw.re"	{ RET('/'); }#line 244 "<stdout>"yy4:	++YYCURSOR;	yych = *YYCURSOR;	goto yy165;yy5:#line 138 "cnokw.re"	{ RET(ID); }#line 252 "<stdout>"yy6:	yyaccept = 0;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case 'L':	case 'U':	case 'l':	case 'u':	goto yy140;	case 'X':	case 'x':	goto yy157;	default:	goto yy156;	}yy7:#line 142 "cnokw.re"	{ RET(ICON); }#line 268 "<stdout>"yy8:	yyaccept = 0;	yych = *(YYMARKER = ++YYCURSOR);	goto yy138;yy9:	yyaccept = 1;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case 0x0A:	goto yy10;	default:	goto yy128;	}yy10:#line 208 "cnokw.re"	{		printf("unexpected character: %c\n", *s->tok);		goto std;	    }#line 286 "<stdout>"yy11:	yyaccept = 2;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case '.':	goto yy116;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	goto yy117;	default:	goto yy12;	}yy12:#line 182 "cnokw.re"	{ RET('.'); }#line 307 "<stdout>"yy13:	yyaccept = 1;	yych = *(YYMARKER = ++YYCURSOR);	switch(yych) {	case 0x0A:	goto yy10;	default:	goto yy106;	}yy14:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy99;	case '>':	goto yy101;	default:	goto yy15;	}yy15:#line 192 "cnokw.re"	{ RET('>'); }#line 325 "<stdout>"yy16:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '<':	goto yy95;	case '=':	goto yy93;	default:	goto yy17;	}yy17:#line 191 "cnokw.re"	{ RET('<'); }#line 336 "<stdout>"yy18:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '+':	goto yy89;	case '=':	goto yy91;	default:	goto yy19;	}yy19:#line 187 "cnokw.re"	{ RET('+'); }#line 347 "<stdout>"yy20:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '-':	goto yy85;	case '=':	goto yy87;	case '>':	goto yy83;	default:	goto yy21;	}yy21:#line 186 "cnokw.re"	{ RET('-'); }#line 359 "<stdout>"yy22:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy81;	default:	goto yy23;	}yy23:#line 188 "cnokw.re"	{ RET('*'); }#line 369 "<stdout>"yy24:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy79;	default:	goto yy25;	}yy25:#line 190 "cnokw.re"	{ RET('%'); }#line 379 "<stdout>"yy26:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '&':	goto yy75;	case '=':	goto yy77;	default:	goto yy27;	}yy27:#line 183 "cnokw.re"	{ RET('&'); }#line 390 "<stdout>"yy28:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy73;	default:	goto yy29;	}yy29:#line 193 "cnokw.re"	{ RET('^'); }#line 400 "<stdout>"yy30:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy71;	case '|':	goto yy69;	default:	goto yy31;	}yy31:#line 194 "cnokw.re"	{ RET('|'); }#line 411 "<stdout>"yy32:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy67;	default:	goto yy33;	}yy33:#line 177 "cnokw.re"	{ RET('='); }#line 421 "<stdout>"yy34:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy65;	default:	goto yy35;	}yy35:#line 184 "cnokw.re"	{ RET('!'); }#line 431 "<stdout>"yy36:	++YYCURSOR;#line 172 "cnokw.re"	{ RET(';'); }#line 436 "<stdout>"yy38:	++YYCURSOR;#line 173 "cnokw.re"	{ RET('{'); }#line 441 "<stdout>"yy40:	++YYCURSOR;#line 174 "cnokw.re"	{ RET('}'); }#line 446 "<stdout>"yy42:	++YYCURSOR;#line 175 "cnokw.re"	{ RET(','); }#line 451 "<stdout>"yy44:	++YYCURSOR;#line 176 "cnokw.re"	{ RET(':'); }#line 456 "<stdout>"yy46:	++YYCURSOR;#line 178 "cnokw.re"	{ RET('('); }#line 461 "<stdout>"yy48:	++YYCURSOR;#line 179 "cnokw.re"	{ RET(')'); }#line 466 "<stdout>"yy50:	++YYCURSOR;#line 180 "cnokw.re"	{ RET('['); }#line 471 "<stdout>"yy52:	++YYCURSOR;#line 181 "cnokw.re"	{ RET(']'); }#line 476 "<stdout>"yy54:	++YYCURSOR;#line 185 "cnokw.re"	{ RET('~'); }#line 481 "<stdout>"yy56:	++YYCURSOR;#line 195 "cnokw.re"	{ RET('?'); }#line 486 "<stdout>"yy58:	++YYCURSOR;	yych = *YYCURSOR;	goto yy64;yy59:#line 198 "cnokw.re"	{ goto std; }#line 494 "<stdout>"yy60:	++YYCURSOR;#line 201 "cnokw.re"	{		if(cursor == s->eof) RET(EOI);		s->pos = cursor; s->line++;		goto std;	    }#line 503 "<stdout>"yy62:	yych = *++YYCURSOR;	goto yy10;yy63:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;yy64:	switch(yych) {	case 0x09:	case 0x0B:	case 0x0C:	case ' ':	goto yy63;	default:	goto yy59;	}yy65:	++YYCURSOR;#line 171 "cnokw.re"	{ RET(NEQ); }#line 523 "<stdout>"yy67:	++YYCURSOR;#line 170 "cnokw.re"	{ RET(EQL); }#line 528 "<stdout>"yy69:	++YYCURSOR;#line 167 "cnokw.re"	{ RET(OROR); }#line 533 "<stdout>"yy71:	++YYCURSOR;#line 160 "cnokw.re"	{ RET(OREQ); }#line 538 "<stdout>"yy73:	++YYCURSOR;#line 159 "cnokw.re"	{ RET(XOREQ); }#line 543 "<stdout>"yy75:	++YYCURSOR;#line 166 "cnokw.re"	{ RET(ANDAND); }#line 548 "<stdout>"yy77:	++YYCURSOR;#line 158 "cnokw.re"	{ RET(ANDEQ); }#line 553 "<stdout>"yy79:	++YYCURSOR;#line 157 "cnokw.re"	{ RET(MODEQ); }#line 558 "<stdout>"yy81:	++YYCURSOR;#line 155 "cnokw.re"	{ RET(MULEQ); }#line 563 "<stdout>"yy83:	++YYCURSOR;#line 165 "cnokw.re"	{ RET(DEREF); }#line 568 "<stdout>"yy85:	++YYCURSOR;#line 164 "cnokw.re"	{ RET(DECR); }#line 573 "<stdout>"yy87:	++YYCURSOR;#line 154 "cnokw.re"	{ RET(SUBEQ); }#line 578 "<stdout>"yy89:	++YYCURSOR;#line 163 "cnokw.re"	{ RET(INCR); }#line 583 "<stdout>"yy91:	++YYCURSOR;#line 153 "cnokw.re"	{ RET(ADDEQ); }#line 588 "<stdout>"yy93:	++YYCURSOR;#line 168 "cnokw.re"	{ RET(LEQ); }#line 593 "<stdout>"yy95:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy97;	default:	goto yy96;	}yy96:#line 162 "cnokw.re"	{ RET(LSHIFT); }#line 603 "<stdout>"yy97:	++YYCURSOR;#line 152 "cnokw.re"	{ RET(LSHIFTEQ); }#line 608 "<stdout>"yy99:	++YYCURSOR;#line 169 "cnokw.re"	{ RET(GEQ); }#line 613 "<stdout>"yy101:	++YYCURSOR;	switch((yych = *YYCURSOR)) {	case '=':	goto yy103;	default:	goto yy102;	}yy102:#line 161 "cnokw.re"	{ RET(RSHIFT); }#line 623 "<stdout>"yy103:	++YYCURSOR;#line 151 "cnokw.re"	{ RET(RSHIFTEQ); }#line 628 "<stdout>"yy105:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;yy106:	switch(yych) {	case 0x0A:	goto yy107;	case '"':	goto yy109;	case '\\':	goto yy108;	default:	goto yy105;	}yy107:	YYCURSOR = YYMARKER;	switch(yyaccept) {	case 0: 	goto yy7;	case 1: 	goto yy10;	case 2: 	goto yy12;	case 3: 	goto yy119;	}yy108:	++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 yy105;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	goto yy112;	case 'x':	goto yy111;	default:	goto yy107;	}yy109:	++YYCURSOR;#line 148 "cnokw.re"	{ RET(SCON); }#line 679 "<stdout>"yy111:	++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 yy114;	default:	goto yy107;	}yy112:	++YYCURSOR;	if(YYLIMIT == YYCURSOR) YYFILL(1);	yych = *YYCURSOR;	switch(yych) {	case 0x0A:	goto yy107;	case '"':	goto yy109;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	goto yy112;	case '\\':	goto yy108;	default:	goto yy105;	}yy114:

⌨️ 快捷键说明

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