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

📄 yacc.c

📁 用C++编写的一个编译器
💻 C
📖 第 1 页 / 共 5 页
字号:
case 38:
#line 213 "yacc.y"
{yyval.bt=bt_union;;
    break;}
case 39:
#line 218 "yacc.y"
{yyval.stmt=yyvsp[0].stmt;;
    break;}
case 40:
#line 220 "yacc.y"
{
			
			appendObject(&yyvsp[-1].stmt, yyvsp[0].stmt);
			yyval.stmt=yyvsp[-1].stmt;
		;
    break;}
case 41:
#line 229 "yacc.y"
{
			yyval.stmt=newDeclStmt(yyvsp[-2].st, yyvsp[-1].sym, currentfile, lineno);
		;
    break;}
case 42:
#line 236 "yacc.y"
{;
    break;}
case 43:
#line 238 "yacc.y"
{;
    break;}
case 44:
#line 240 "yacc.y"
{;
    break;}
case 45:
#line 245 "yacc.y"
{
			if(yyvsp[0].sym->value.i==UNKNOWN)
				yyvsp[0].sym->value.i=0;
			yyval.sym = yyvsp[0].sym;
		;
    break;}
case 46:
#line 251 "yacc.y"
{
			if(yyvsp[0].sym->value.i==UNKNOWN)
				yyvsp[0].sym->value.i=yyvsp[-2].sym->value.i+1;
			yyval.sym = yyvsp[0].sym;
		;
    break;}
case 47:
#line 260 "yacc.y"
{
			yyval.sym = newEnumerator(yyvsp[0].val.s, NULL);
		;
    break;}
case 48:
#line 264 "yacc.y"
{
			yyval.sym = newEnumerator(yyvsp[-2].val.s, yyvsp[0].exp);
		;
    break;}
case 49:
#line 271 "yacc.y"
{yyval.type = yyvsp[0].type;;
    break;}
case 50:
#line 273 "yacc.y"
{yyval.type = compoundType(yyvsp[0].type, yyvsp[-1].type);;
    break;}
case 51:
#line 278 "yacc.y"
{
			yyval.type=newType(NULL, bt_pointer, NULL);
		;
    break;}
case 52:
#line 282 "yacc.y"
{
			yyvsp[0].type->subtype = newType(NULL, bt_pointer, NULL);
			yyval.type=yyvsp[0].type;
		;
    break;}
case 53:
#line 290 "yacc.y"
{yyval.sym=yyvsp[0].sym;;
    break;}
case 54:
#line 292 "yacc.y"
{
			appendObject(&yyvsp[-2].sym, yyvsp[0].sym);
			yyval.sym=yyvsp[-2].sym;
		;
    break;}
case 55:
#line 300 "yacc.y"
{yyval.sym=yyvsp[0].sym;;
    break;}
case 56:
#line 302 "yacc.y"
{
			yyvsp[-2].sym->init = yyvsp[0].exp;
			yyval.sym=yyvsp[-2].sym;
		;
    break;}
case 57:
#line 310 "yacc.y"
{yyval.sym=yyvsp[0].sym;;
    break;}
case 58:
#line 312 "yacc.y"
{
			appendObject(&yyvsp[-2].sym, yyvsp[0].sym);
			yyval.sym = yyvsp[-2].sym;
		;
    break;}
case 59:
#line 320 "yacc.y"
{
			yyvsp[0].sym->datatype = compoundType(yyvsp[0].sym->datatype, yyvsp[-1].type);
			yyval.sym = yyvsp[0].sym;
		;
    break;}
case 60:
#line 325 "yacc.y"
{yyval.sym = yyvsp[0].sym;;
    break;}
case 61:
#line 330 "yacc.y"
{
			yyval.sym = newSymbol(yyvsp[0].val.s, UNKNOWN, NULL);
		;
    break;}
case 62:
#line 334 "yacc.y"
{yyval.sym=yyvsp[-1].sym;;
    break;}
case 63:
#line 336 "yacc.y"
{
			Type *extype = newType(NULL, bt_pointer, yyvsp[-1].exp);
			yyvsp[-3].sym->datatype = compoundType(yyvsp[-3].sym->datatype, extype);
			yyval.sym = yyvsp[-3].sym;
		;
    break;}
case 64:
#line 342 "yacc.y"
{
			Type *extype = newType(NULL, bt_pointer, evaluate_void_exp());
			yyvsp[-2].sym->datatype = compoundType(yyvsp[-2].sym->datatype, extype);
			yyval.sym = yyvsp[-2].sym;
		;
    break;}
case 65:
#line 348 "yacc.y"
{
			Type *func = newType(NULL, bt_func, NULL);
			func->arglist = yyvsp[-1].sym;
			yyvsp[-3].sym->datatype = compoundType(yyvsp[-3].sym->datatype, func);
			yyval.sym = yyvsp[-3].sym;
		;
    break;}
case 66:
#line 355 "yacc.y"
{
			Type *func = newType(NULL, bt_func, NULL);
			func->arglist = newSymbol(NULL, UNKNOWN, 
				newType(NULL, bt_void, NULL));
			yyvsp[-2].sym->datatype = compoundType(yyvsp[-2].sym->datatype, func);
			yyval.sym = yyvsp[-2].sym;
		;
    break;}
case 67:
#line 366 "yacc.y"
{
			yyval.sym=yyvsp[0].sym;
		;
    break;}
case 68:
#line 370 "yacc.y"
{
			Symbol *one;
			one = newSymbol("...", sc_arg, newType(NULL, bt_ellipsis, NULL));
			appendObject(&yyvsp[-2].sym, one);
			yyval.sym = yyvsp[-2].sym;
		;
    break;}
case 69:
#line 380 "yacc.y"
{
			yyval.sym = yyvsp[0].sym;
		;
    break;}
case 70:
#line 384 "yacc.y"
{
			appendObject(&yyvsp[-2].sym, yyvsp[0].sym);
			yyval.sym = yyvsp[-2].sym;
		;
    break;}
case 71:
#line 392 "yacc.y"
{
			yyvsp[0].sym->storage_class = sc_arg;
			yyvsp[0].sym->datatype = compoundType(yyvsp[0].sym->datatype, yyvsp[-1].type);
			yyval.sym=yyvsp[0].sym;
		;
    break;}
case 72:
#line 398 "yacc.y"
{
			yyval.sym=newSymbol(NULL, sc_arg, compoundType(yyvsp[0].type, yyvsp[-1].type));
		;
    break;}
case 73:
#line 405 "yacc.y"
{
			yyval.exp = yyvsp[0].exp;
		;
    break;}
case 74:
#line 409 "yacc.y"
{
			yyval.exp = evaluate_brace_exp(yyvsp[-1].exp);
		;
    break;}
case 75:
#line 416 "yacc.y"
{
			yyval.exp = yyvsp[0].exp;
		;
    break;}
case 76:
#line 420 "yacc.y"
{
			appendObject(&yyvsp[-2].exp, yyvsp[0].exp);
			yyval.exp = yyvsp[-2].exp;
		;
    break;}
case 77:
#line 428 "yacc.y"
{yyval.stmt=yyvsp[0].stmt;;
    break;}
case 78:
#line 430 "yacc.y"
{yyval.stmt=yyvsp[0].stmt;;
    break;}
case 79:
#line 432 "yacc.y"
{yyval.stmt=yyvsp[0].stmt;;
    break;}
case 80:
#line 434 "yacc.y"
{yyval.stmt=yyvsp[0].stmt;;
    break;}
case 81:
#line 436 "yacc.y"
{yyval.stmt=yyvsp[0].stmt;;
    break;}
case 82:
#line 438 "yacc.y"
{yyval.stmt=yyvsp[0].stmt;;
    break;}
case 83:
#line 440 "yacc.y"
{
			yyval.stmt=local_define(yyvsp[0].stmt->spec, yyvsp[0].stmt->declist);//return init exp statement
		;
    break;}
case 84:
#line 447 "yacc.y"
{
			if(yyvsp[0].stmt->labelno == UNKNOWN)
				yyvsp[0].stmt->labelno = newlabelno++;
			add_named_label(yyvsp[-2].val.s,yyvsp[0].stmt->labelno);
			yyval.stmt=yyvsp[0].stmt;
		;
    break;}
case 85:
#line 454 "yacc.y"
{
			if(yyvsp[0].stmt->labelno ==UNKNOWN)
				yyvsp[0].stmt->labelno = newlabelno++;
			yyval.stmt = newCalcStmt(stmt_case, yyvsp[-2].exp, yyvsp[0].stmt, NULL, NULL, currentfile, lineno);
			yyval.stmt ->labelno = yyvsp[0].stmt->labelno;
		;
    break;}
case 86:
#line 461 "yacc.y"
{
			if(yyvsp[0].stmt->labelno ==UNKNOWN)
				yyvsp[0].stmt->labelno = newlabelno++;
			yyval.stmt = newCalcStmt(stmt_default, NULL, yyvsp[0].stmt, NULL, NULL, currentfile, lineno);
			yyval.stmt ->labelno = yyvsp[0].stmt->labelno;
		;
    break;}
case 87:
#line 471 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_compound, NULL, NULL, NULL, NULL, currentfile, lineno);
		;
    break;}
case 88:
#line 475 "yacc.y"
{
			if(blocklevel++)
				enter_block();
		;
    break;}
case 89:
#line 480 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_compound, NULL, yyvsp[-1].stmt, NULL, NULL, currentfile, lineno);
			if(--blocklevel)
				leave_block();
		;
    break;}
case 90:
#line 489 "yacc.y"
{yyval.stmt=yyvsp[0].stmt;;
    break;}
case 91:
#line 491 "yacc.y"
{
			appendObject(&yyvsp[-1].stmt, yyvsp[0].stmt);
			yyval.stmt = yyvsp[-1].stmt;
		;
    break;}
case 92:
#line 499 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_exp, yyvsp[-1].exp, NULL, NULL, NULL, currentfile, lineno);
		;
    break;}
case 93:
#line 506 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_if, yyvsp[-2].exp, NULL, yyvsp[0].stmt, NULL, currentfile, lineno);
		;
    break;}
case 94:
#line 510 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_if, yyvsp[-4].exp, NULL, yyvsp[-2].stmt, yyvsp[0].stmt, currentfile, lineno);
		;
    break;}
case 95:
#line 514 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_switch, yyvsp[-2].exp, yyvsp[0].stmt, NULL, NULL, currentfile, lineno);
		;
    break;}
case 96:
#line 521 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_while, yyvsp[-2].exp, yyvsp[0].stmt, NULL, NULL, currentfile, lineno);
		;
    break;}
case 97:
#line 525 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_do, yyvsp[-2].exp, yyvsp[-5].stmt, NULL, NULL, currentfile, lineno);
		;
    break;}
case 98:
#line 529 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_for, yyvsp[-4].exp, yyvsp[0].stmt, yyvsp[-5].stmt, 
					newCalcStmt(stmt_exp, yyvsp[-2].exp, NULL, NULL, NULL, currentfile, lineno),
					currentfile, lineno);
		;
    break;}
case 99:
#line 535 "yacc.y"
{
			int tmp=blocklevel;
			enter_block();
			blocklevel=0;//do like aguments
			
			yyval.stmt=local_define(yyvsp[0].stmt->spec, yyvsp[0].stmt->declist);//return init exp statement
			yyval.stmt->lineno = tmp;
		;
    break;}
case 100:
#line 544 "yacc.y"
{
			//need to record the defined symbols
			yyval.stmt = newCalcStmt(stmt_for, yyvsp[-4].exp, yyvsp[0].stmt, yyvsp[-5].stmt, 
					newCalcStmt(stmt_exp, yyvsp[-2].exp, NULL, NULL, NULL, currentfile, lineno),
					currentfile, lineno);
			
			leave_block();
			blocklevel=yyvsp[-5].stmt->lineno;
		;
    break;}
case 101:
#line 557 "yacc.y"
{
			ExpNode *aexp = evaluate_label_exp(yyvsp[-1].val.s);
			yyval.stmt = newCalcStmt(stmt_goto, aexp, NULL, NULL, NULL, currentfile, lineno);
		;
    break;}
case 102:
#line 562 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_continue, NULL, NULL, NULL, NULL, currentfile, lineno);
		;
    break;}
case 103:
#line 566 "yacc.y"
{
			yyval.stmt = newCalcStmt(stmt_break, NULL, NULL, NULL, NULL, currentfile, lineno);
		;
    break;}

⌨️ 快捷键说明

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