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

📄 parse.c

📁 一个C语言的编译器
💻 C
📖 第 1 页 / 共 4 页
字号:
		}
		break;
	case 73:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 425 ".\\parse.y"
 yyval.ptree = newExpNode(OpK);
				  yyval.ptree -> child[0] = yyattribute(1 - 3).ptree;
				  yyval.ptree -> child[1] = yyattribute(3 - 3).ptree;
				  yyval.ptree -> attr.op = B_LEFT;
				
#line 1319 "parse.c"
			}
		}
		break;
	case 74:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 431 ".\\parse.y"
 yyval.ptree = newExpNode(OpK);
				  yyval.ptree -> child[0] = yyattribute(1 - 3).ptree;
				  yyval.ptree -> child[1] = yyattribute(3 - 3).ptree;
				  yyval.ptree -> attr.op = B_RIGHT;
				
#line 1336 "parse.c"
			}
		}
		break;
	case 75:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[3];
			yyinitdebug(yya, 3);
#endif
			{
#line 437 ".\\parse.y"
 yyval.ptree = newExpNode(OpK);
				  yyval.ptree -> child[0] = yyattribute(2 - 2).ptree;
			      yyval.ptree -> attr.op = NOT;
			    
#line 1352 "parse.c"
			}
		}
		break;
	case 76:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[3];
			yyinitdebug(yya, 3);
#endif
			{
#line 442 ".\\parse.y"
 yyval.ptree = newExpNode(OpK);
				  yyval.ptree -> child[0] = yyattribute(2 - 2).ptree;
			      yyval.ptree -> attr.op = B_NOT;
			    
#line 1368 "parse.c"
			}
		}
		break;
	case 77:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 447 ".\\parse.y"
 yyval.ptree = yyattribute(1 - 1).ptree; 
#line 1381 "parse.c"
			}
		}
		break;
	case 78:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 450 ".\\parse.y"
 yyval.ptree = yyattribute(2 - 3).ptree; 
#line 1394 "parse.c"
			}
		}
		break;
	case 79:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 452 ".\\parse.y"
 yyval.ptree = yyattribute(1 - 1).ptree; 
#line 1407 "parse.c"
			}
		}
		break;
	case 80:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 454 ".\\parse.y"
 yyval.ptree = yyattribute(1 - 1).ptree; 
#line 1420 "parse.c"
			}
		}
		break;
	case 81:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 456 ".\\parse.y"
 yyval.ptree = newExpNode(NumK);
			      yyval.ptree -> type = Integer;
			      yyval.ptree -> attr.val.i = atoi(tokenString);
			    
#line 1436 "parse.c"
			}
		}
		break;
	case 82:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 461 ".\\parse.y"
 yyval.ptree = newExpNode(FnumK);
			      yyval.ptree -> type = Double;
			      yyval.ptree -> attr.val.f = atof(tokenString);
			    
#line 1452 "parse.c"
			}
		}
		break;
	case 83:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 466 ".\\parse.y"
 yyval.ptree = newExpNode(CharK);
			      yyval.ptree -> type = Char;
			      yyval.ptree -> attr.val.i = *(tokenString + 1);
			    
#line 1468 "parse.c"
			}
		}
		break;
	case 84:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[5];
			yyinitdebug(yya, 5);
#endif
			{
#line 472 ".\\parse.y"
 yyval.ptree = newStmtNode(CallK);
				  yyval.ptree -> attr.name = yyattribute(1 - 4).ptree -> attr.name;
                  yyval.ptree -> child[0] = yyattribute(3 - 4).ptree;
                
#line 1484 "parse.c"
			}
		}
		break;
	case 85:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[4];
			yyinitdebug(yya, 4);
#endif
			{
#line 478 ".\\parse.y"
 TreeNode * t = yyattribute(1 - 3).ptree;
				  if (t != NULL)
				  { while (t->sibling != NULL)
					t = t->sibling;
					t->sibling = yyattribute(3 - 3).ptree;
					yyval.ptree = yyattribute(1 - 3).ptree; }
				  else yyval.ptree = yyattribute(3 - 3).ptree;
				
#line 1504 "parse.c"
			}
		}
		break;
	case 86:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 487 ".\\parse.y"
 yyval.ptree = yyattribute(1 - 1).ptree; 
#line 1517 "parse.c"
			}
		}
		break;
	case 87:
		{
#ifdef YYDEBUG
			YYSTYPE YYFAR *yya[2];
			yyinitdebug(yya, 2);
#endif
			{
#line 490 ".\\parse.y"
 yyval.ptree = yyattribute(1 - 1).ptree; 
#line 1530 "parse.c"
			}
		}
		break;
	case 88:
		{
#line 492 ".\\parse.y"
 yyval.ptree = NULL; 
#line 1538 "parse.c"
		}
		break;
	default:
		yyassert(0);
		break;
	}
}
#ifdef YYDEBUG
YYCONST yysymbol_t YYNEARFAR YYBASED_CODE YYDCDECL yysymbol[] = {
	{ "$end", 0 },
	{ "error", 256 },
	{ "INT", 259 },
	{ "CHAR", 260 },
	{ "DOUBLE", 261 },
	{ "VOID", 262 },
	{ "IF", 263 },
	{ "ELSE", 264 },
	{ "WHILE", 265 },
	{ "ASSIGN", 266 },
	{ "RETURN", 267 },
	{ "FOR", 268 },
	{ "INPUT", 269 },
	{ "OUTPUT", 270 },
	{ "ID", 271 },
	{ "NUM", 272 },
	{ "FNUM", 273 },
	{ "SCHAR", 274 },
	{ "SEMI", 275 },
	{ "COMMA", 276 },
	{ "LP", 277 },
	{ "RP", 278 },
	{ "LSP", 279 },
	{ "RSP", 280 },
	{ "LFP", 281 },
	{ "RFP", 282 },
	{ "PLUS", 283 },
	{ "SUB", 284 },
	{ "MUT", 285 },
	{ "DIV", 286 },
	{ "MOD", 287 },
	{ "INC", 288 },
	{ "DEC", 289 },
	{ "B_AND", 290 },
	{ "B_OR", 291 },
	{ "B_NOT", 292 },
	{ "B_XOR", 293 },
	{ "B_LEFT", 294 },
	{ "B_RIGHT", 295 },
	{ "EQ", 296 },
	{ "GT", 297 },
	{ "LT", 298 },
	{ "GE", 299 },
	{ "LE", 300 },
	{ "NEQ", 301 },
	{ "AND", 302 },
	{ "OR", 303 },
	{ "NOT", 304 },
	{ NULL, 0 }
};

YYCONST char *YYCONST YYNEARFAR YYBASED_CODE YYDCDECL yyrule[] = {
	"$accept: program",
	"program: dec_list",
	"dec_list: dec_list dec",
	"dec_list: dec",
	"dec: var_dec",
	"dec: fun_dec",
	"dec: fun_def",
	"id: ID",
	"fid:",
	"var_dec: type_spec id_list SEMI",
	"id_list: id_list COMMA var",
	"id_list: var",
	"id_list: id_list COMMA id ASSIGN simple_exp",
	"id_list: id ASSIGN simple_exp",
	"type_spec: INT",
	"type_spec: DOUBLE",
	"type_spec: CHAR",
	"type_spec: VOID",
	"fun_def: type_spec id fid LP params RP comp_stmt",
	"fun_def: id fid LP params RP comp_stmt",
	"fun_dec: type_spec id fid LP params RP SEMI",
	"fun_dec: id fid LP params RP SEMI",
	"params: param_list",
	"params:",
	"param_list: param_list COMMA param",
	"param_list: param",
	"param: type_spec",
	"param: type_spec id",
	"comp_stmt: LFP local_dec stmt_list RFP",
	"local_dec: local_dec var_dec",
	"local_dec:",
	"stmt_list: stmt_list stmt",
	"stmt_list:",
	"stmt: exp_stmt",
	"stmt: sele_stmt",
	"stmt: iter_stmt",
	"stmt: return_stmt",
	"stmt: comp_stmt",
	"stmt: input_stmt",
	"stmt: output_stmt",
	"exp_stmt: exp SEMI",
	"exp_stmt: SEMI",
	"sele_stmt: IF LP exp RP stmt",
	"sele_stmt: IF LP exp RP stmt ELSE stmt",
	"iter_stmt: WHILE LP exp RP stmt",
	"iter_stmt: FOR LP exp_stmt exp_stmt exp RP stmt",
	"input_stmt: INPUT LP id RP SEMI",
	"output_stmt: OUTPUT LP id RP SEMI",
	"return_stmt: RETURN SEMI",
	"return_stmt: RETURN exp SEMI",
	"exp: var ASSIGN exp",
	"exp: simple_exp",
	"var: id",
	"var: id LSP factor RSP",
	"simple_exp: simple_exp OR simple_exp",
	"simple_exp: simple_exp AND simple_exp",
	"simple_exp: simple_exp LT simple_exp",
	"simple_exp: simple_exp LE simple_exp",
	"simple_exp: simple_exp GT simple_exp",
	"simple_exp: simple_exp GE simple_exp",
	"simple_exp: simple_exp EQ simple_exp",
	"simple_exp: simple_exp NEQ simple_exp",
	"simple_exp: simple_exp PLUS simple_exp",
	"simple_exp: simple_exp SUB simple_exp",
	"simple_exp: simple_exp MUT simple_exp",
	"simple_exp: simple_exp DIV simple_exp",
	"simple_exp: simple_exp MOD simple_exp",
	"simple_exp: simple_exp INC",
	"simple_exp: LP INC simple_exp RP",
	"simple_exp: simple_exp DEC",
	"simple_exp: LP DEC simple_exp RP",
	"simple_exp: simple_exp B_AND simple_exp",
	"simple_exp: simple_exp B_XOR simple_exp",
	"simple_exp: simple_exp B_OR simple_exp",
	"simple_exp: simple_exp B_LEFT factor",
	"simple_exp: simple_exp B_RIGHT factor",
	"simple_exp: NOT factor",
	"simple_exp: B_NOT factor",
	"simple_exp: factor",
	"factor: LP exp RP",
	"factor: var",
	"factor: call",
	"factor: NUM",
	"factor: FNUM",
	"factor: SCHAR",
	"call: var LP args RP",
	"arg_list: arg_list COMMA exp",
	"arg_list: exp",
	"args: arg_list",
	"args:"
};
#endif

YYCONST yyreduction_t YYNEARFAR YYBASED_CODE YYDCDECL yyreduction[] = {
	{ 0, 1, -1 },
	{ 1, 1, 0 },
	{ 2, 2, 1 },
	{ 2, 1, 2 },
	{ 3, 1, 3 },
	{ 3, 1, 4 },
	{ 3, 1, 5 },
	{ 4, 1, 6 },
	{ 5, 0, 7 },
	{ 6, 3, 8 },
	{ 7, 3, 9 },
	{ 7, 1, 10 },
	{ 7, 5, 11 },
	{ 7, 3, 12 },
	{ 8, 1, 13 },
	{ 8, 1, 14 },
	{ 8, 1, 15 },
	{ 8, 1, 16 },
	{ 9, 7, 17 },
	{ 9, 6, 18 },
	{ 10, 7, 19 },
	{ 10, 6, 20 },
	{ 11, 1, 21 },
	{ 11, 0, 22 },
	{ 12, 3, 23 },
	{ 12, 1, 24 },
	{ 13, 1, 25 },
	{ 13, 2, 26 },
	{ 14, 4, 27 },
	{ 15, 2, 28 },
	{ 15, 0, 29 },
	{ 16, 2, 30 },
	{ 16, 0, 31 },
	{ 17, 1, 32 },
	{ 17, 1, 33 },
	{ 17, 1, 34 },
	{ 17, 1, 35 },
	{ 17, 1, 36 },
	{ 17, 1, 37 },
	{ 17, 1, 38 },
	{ 18, 2, 39 },
	{ 18, 1, 40 },
	{ 19, 5, 41 },
	{ 19, 7, 42 },
	{ 20, 5, 43 },
	{ 20, 7, 44 },
	{ 21, 5, 45 },
	{ 22, 5, 46 },
	{ 23, 2, 47 },
	{ 23, 3, 48 },
	{ 24, 3, 49 },
	{ 24, 1, 50 },
	{ 25, 1, 51 },
	{ 25, 4, 52 },
	{ 26, 3, 53 },
	{ 26, 3, 54 },
	{ 26, 3, 55 },
	{ 26, 3, 56 },
	{ 26, 3, 57 },
	{ 26, 3, 58 },
	{ 26, 3, 59 },
	{ 26, 3, 60 },
	{ 26, 3, 61 },
	{ 26, 3, 62 },
	{ 26, 3, 63 },
	{ 26, 3, 64 },
	{ 26, 3, 65 },
	{ 26, 2, 66 },
	{ 26, 4, 67 },
	{ 26, 2, 68 },
	{ 26, 4, 69 },
	{ 26, 3, 70 },
	{ 26, 3, 71 },
	{ 26, 3, 72 },
	{ 26, 3, 73 },
	{ 26, 3, 74 },
	{ 26, 2, 75 },
	{ 26, 2, 76 },
	{ 26, 1, 77 },
	{ 27, 3, 78 },
	{ 27, 1, 79 },
	{ 27, 1, 80 },
	{ 27, 1, 81 },
	{ 27, 1, 82 },
	{ 27, 1, 83 },
	{ 28, 4, 84 },
	{ 29, 3, 85 },
	{ 29, 1, 86 },
	{ 30, 1, 87 },
	{ 30, 0, 88 }
};

int YYNEAR YYDCDECL yytokenaction_size = 337;
YYCONST yytokenaction_t YYNEARFAR YYBASED_CODE YYDCDECL yytokenaction[] = {
	{ 81, YYAT_SHIFT, 111 },
	{ 139, YYAT_SHIFT, 21 },
	{ 90, YYAT_SHIFT, 59 },
	{ 90, YYAT_SHIFT, 60 },
	{ 161, YYAT_SHIFT, 165 },
	{ 81, YYAT_SHIFT, 54 },
	{ 81, YYAT_SHIFT, 55 },
	{ 81, YYAT_SHIFT, 56 },
	{ 81, YYAT_SHIFT, 57 },
	{ 81, YYAT_SHIFT, 58 },
	{ 81, YYAT_SHIFT, 59 },
	{ 81, YYAT_SHIFT, 60 },
	{ 81, YYAT_SHIFT, 61 },
	{ 81, YYAT_SHIFT, 62 },
	{ 139, YYAT_SHIFT, 22 },
	{ 81, YYAT_SHIFT, 63 },
	{ 81, YYAT_SHIFT, 64 },
	{ 81, YYAT_SHIFT, 65 },
	{ 81, YYAT_SHIFT, 66 },
	{ 81, YYAT_SHIFT, 67 },
	{ 81, YYAT_SHIFT, 68 },
	{ 81, YYAT_SHIFT, 69 },
	{ 81, YYAT_SHIFT, 70 },
	{ 81, YYAT_SHIFT, 71 },
	{ 81, YYAT_SHIFT, 72 },
	{ 81, YYAT_SHIFT, 73 },
	{ 79, YYAT_SHIFT, 54 },
	{ 79, YYAT_SHIFT, 55 },
	{ 79, YYAT_SHIFT, 56 },
	{ 79, YYAT_SHIFT, 57 },
	{ 79, YYAT_SHIFT, 58 },
	{ 79, YYAT_SHIFT, 59 },
	{ 79, YYAT_SHIFT, 60 },
	{ 79, YYAT_SHIFT, 61 },
	{ 79, YYAT_SHIFT, 62 },
	{ 159, YYAT_SHIFT, 164 },
	{ 79, YYAT_SHIFT, 63 },
	{ 79, YYAT_SHIFT, 64 },
	{ 79, YYAT_SHIFT, 65 },
	{ 79, YYAT_SHIFT, 66 },
	{ 79, YYAT_SHIFT, 67 },
	{ 79, YYAT_SHIFT, 68 },
	{ 79, YYAT_SHIFT, 69 },
	{ 79, YYAT_SHIFT, 70 },
	{ 79, YYAT_SHIFT, 71 },
	{ 79, YYAT_SHIFT, 72 },
	{ 79, YYAT_SHIFT, 73 },
	{ 50, YYAT_SHIFT, 54 },
	{ 50, YYAT_SHIFT, 55 },
	{ 50, YYAT_SHIFT, 56 },
	{ 50, YYAT_SHIFT, 57 },
	{ 50, YYAT_SHIFT, 58 },
	{ 50, YYAT_SHIFT, 59 },
	{ 50, YYAT_SHIFT, 60 },
	{ 50, YYAT_SHIFT, 61 },
	{ 50, YYAT_SHIFT, 62 },
	{ 158, YYAT_SHIFT, 163 },
	{ 50, YYAT_SHIFT, 63 },
	{ 50, YYAT_SHIFT, 64 },
	{ 50, YYAT_SHIFT, 65 },
	{ 50, YYAT_SHIFT, 66 },
	{ 50, YYAT_SHIFT, 67 },
	{ 50, YYAT_SHIFT, 68 },
	{ 50, YYAT_SHIFT, 69 },
	{ 50, YYAT_SHIFT, 70 },
	{ 50, YYAT_SHIFT, 71 },
	{ 50, YYAT_SHIFT, 72 },
	{ 50, YYAT_SHIFT, 73 },
	{ 34, YYAT_SHIFT, 54 },
	{ 34, YYAT_SHIFT, 55 },
	{ 34, YYAT_SHIFT, 56 },
	{ 34, YYAT_SHIFT, 57 },
	{ 34, YYAT_SHIFT, 58 },
	{ 34, YYAT_SHIFT, 59 },
	{ 34, YYAT_SHIFT, 60 },
	{ 34, YYAT_SHIFT, 61 },
	{ 34, YYAT_SHIFT, 62 },
	{ 157, YYAT_SHIFT, 162 },
	{ 34, YYAT_SHIFT, 63 },
	{ 34, YYAT_SHIFT, 64 },
	{ 34, YYAT_SHIFT, 65 },
	{ 34, YYAT_SHIFT, 66 },
	{ 34, YYAT_SHIFT, 67 },
	{ 34, YYAT_SHIFT, 68 },
	{ 34, YYAT_SHIFT, 69 },
	{ 34, YYAT_SHIFT, 70 },
	{ 34, YYAT_SHIFT, 71 },
	{ 34, YYAT_SHIFT, 72 },
	{ 34, YYAT_SHIFT, 73 },
	{ 104, YYAT_SHIFT, 54 },
	{ 104, YYAT_SHIFT, 55 },
	{ 104, YYAT_SHIFT, 56 },
	{ 104, YYAT_SHIFT, 57 },
	{ 104, YYAT_SHIFT, 58 },
	{ 104, YYAT_SHIFT, 59 },
	{ 104, YYAT_SHIFT, 60 },
	{ 104, YYAT_SHIFT, 61 },
	{ 104, YYAT_SHIFT, 62 },
	{ 153, YYAT_SHIFT, 158 },
	{ 104, YYAT_SHIFT, 63 },
	{ 104, YYAT_SHIFT, 64 },
	{ 104, YYAT_SHIFT, 65 },
	{ 104, YYAT_SHIFT, 66 },
	{ 104, YYAT_SHIFT, 67 },
	{ 104, YYAT_SHIFT, 68 },
	{ 104, YYAT_SHIFT, 69 },
	{ 104, YYAT_SHIFT, 70 },
	{ 104, YYAT_SHIFT, 71 },
	{ 104, YYAT_SHIFT, 72 },
	{ 103, YYAT_SHIFT, 54 },
	{ 103, YYAT_SHIFT, 55 },
	{ 103, YYAT_SHIFT, 56 },
	{ 103, YYAT_SHIFT, 57 },
	{ 103, YYAT_SHIFT, 58 },
	{ 103, YYAT_SHIFT, 59 },
	{ 103, YYAT_SHIFT, 60 },
	{ 103, YYAT_SHIFT, 61 },
	{ 103, YYAT_SHIFT, 62 },
	{ 152, YYAT_SHIFT, 157 },
	{ 103, YYAT_SHIFT, 63 },
	{ 103, YYAT_SHIFT, 64 },
	{ 103, YYAT_SHIFT, 65 },
	{ 103, YYAT_SHIFT, 66 },
	{ 103, YYAT_SHIFT, 67 },
	{ 103, YYAT_SHIFT, 68 },
	{ 103, YYAT_SHIFT, 69 },
	{ 103, YYAT_SHIFT, 70 },
	{ 103, YYAT_SHIFT, 71 },
	{ 94, YYAT_SHIFT, 54 },
	{ 94, YYAT_SHIFT, 55 },
	{ 94, YYAT_SHIFT, 56 },
	{ 94, YYAT_SHIFT, 57 },
	{ 94, YYAT_SHIFT, 58 },
	{ 94, YYAT_SHIFT, 59 },
	{ 94, YYAT_SHIFT, 60 },
	{ 117, YYAT_SHIFT, 1 },
	{ 117, YYAT_SHIFT, 2 },
	{ 117, YYAT_SHIFT, 3 },
	{ 117, YYAT_SHIFT, 4 },
	{ 94, YYAT_SHIFT, 64 },
	{ 94, YYAT_SHIFT, 65 },
	{ 94, YYAT_SHIFT, 66 },
	{ 94, YYAT_SHIFT, 67 },
	{ 94, YYAT_SHIFT, 68 },
	{ 94, YYAT_SHIFT, 69 },
	{ 94, YYAT_SHIFT, 70 },
	{ 94, YYAT_SHIFT, 71 },
	{ 93, YYAT_SHIFT, 54 },
	{ 93, YYAT_SHIFT, 55 },
	{ 93, YYAT_SHIFT, 56 },
	{ 93, YYAT_SHIFT, 57 },
	{ 93, YYAT_SHIFT, 58 },
	{ 93, YYAT_SHIFT, 59 },
	{ 93, YYAT_SHIFT, 60 },
	{ 77, YYAT_SHIFT, 1 },
	{ 77, YYAT_SHIFT, 2 },
	{ 77, YYAT_SHIFT, 3 },
	{ 77, YYAT_SHIFT, 4 },
	{ 93, YYAT_SHIFT, 64 },
	{ 93, YYAT_SHIFT, 65 },
	{ 93, YYAT_SHIFT, 66 },
	{ 93, YYAT_SHIFT, 67 },
	{ 93, YYAT_SHIFT, 68 },
	{ 93, YYAT_SHIFT, 69 },
	{ 93, YYAT_SHIFT, 70 },
	{ 93, YYAT_SHIFT, 71 },
	{ 92, YYAT_SHIFT, 54 },

⌨️ 快捷键说明

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