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

📄 totac.tab.c.bak

📁 一个用C++实现的C的Compiler。 代码风格良好。 原作者自己写了这个编译器
💻 BAK
📖 第 1 页 / 共 5 页
字号:
    {	yyval.int_list = yyvsp[-2].int_list; yyval.int_list.push_back(yyvsp[0].intval);							;}
    break;

  case 11:
#line 121 "toTAC.y"
    {	yyval = yyvsp[-1];											;}
    break;

  case 12:
#line 122 "toTAC.y"
    {	yyval.intval = yyvsp[-3].intval;
																	yyval.int_list = yyvsp[-1].int_list;
																	yyval.int_list.push_front(*yyvsp[-3].int_list.begin());		;}
    break;

  case 13:
#line 125 "toTAC.y"
    {	TACAddConstVariable(SymbolListTypeADDArrayList(yyvsp[-4].intval, yyvsp[-4].int_list), yyvsp[-3].intval, yyvsp[-1].expr.res_oprd.data.cint);
																														;}
    break;

  case 14:
#line 129 "toTAC.y"
    {	yyval.expr = yyvsp[-1].expr;											;}
    break;

  case 15:
#line 132 "toTAC.y"
    {	yyval.intval = SymbolListTypeADDArrayList(yyvsp[-1].intval, yyvsp[-1].int_list);
																	yyval.int_list.clear(); yyval.int_list.push_back(yyvsp[0].intval);		;}
    break;

  case 16:
#line 136 "toTAC.y"
    {	yyval.Ventry_list.clear(); 
																	TSymbolListVariableEntry Ventry;
																	Ventry.var_type = SymbolListTypeADDArrayList(yyvsp[0].intval, yyvsp[0].int_list);
																	yyval.Ventry_list.push_back(Ventry);								;}
    break;

  case 17:
#line 140 "toTAC.y"
    {	yyval.Ventry_list = yyvsp[-2].Ventry_list;
																	TSymbolListVariableEntry Ventry;
																	Ventry.var_type = SymbolListTypeADDArrayList(yyvsp[0].intval, yyvsp[0].int_list);
																	yyval.Ventry_list.push_back(Ventry);								;}
    break;

  case 18:
#line 146 "toTAC.y"
    {	yyval.intval = yyvsp[0].intval; yyval.int_list.clear();				;}
    break;

  case 19:
#line 147 "toTAC.y"
    {	yyval.intval = SymbolListTypeADDArrayList(yyvsp[-1].intval, yyvsp[-1].int_list);	
																	yyval.intval = SymbolListTypeADDStar(yyval.intval);
																	yyval.int_list.clear();								;}
    break;

  case 20:
#line 150 "toTAC.y"
    {	yyval.intval = yyvsp[-1].intval; yyval.int_list = yyvsp[-1].int_list;
																	yyval.int_list.push_back(yyvsp[0].expr.res_oprd.data.cint);			;}
    break;

  case 21:
#line 152 "toTAC.y"
    {	yyval.intval = SymbolListMakeFunctionType(SymbolListTypeADDArrayList(yyvsp[-5].intval, yyvsp[-5].int_list),
																						yyvsp[-1].Ventry_list);
																	yyval.int_list.clear();								;}
    break;

  case 22:
#line 157 "toTAC.y"
    {	yyval.intval = var_type_int;									;}
    break;

  case 23:
#line 158 "toTAC.y"
    {	yyval.intval = var_type_char;									;}
    break;

  case 24:
#line 159 "toTAC.y"
    {	yyval.intval = var_type_void									;}
    break;

  case 25:
#line 160 "toTAC.y"
    {	yyval.intval = yyvsp[0].intval;											;}
    break;

  case 26:
#line 163 "toTAC.y"
    {	TACAddFunctionDecl(SymbolListTypeADDArrayList(yyvsp[-5].intval, yyvsp[-5].int_list), 
																							yyvsp[-4].intval, yyvsp[-2].Ventry_list);					;}
    break;

  case 27:
#line 167 "toTAC.y"
    {	yyval.Ventry_list = yyvsp[0].Ventry_list;											;}
    break;

  case 28:
#line 168 "toTAC.y"
    {	yyval.Ventry_list.clear();											;}
    break;

  case 29:
#line 171 "toTAC.y"
    {	yyval.Ventry_list.clear(); yyval.Ventry_list.push_back(yyvsp[0].Ventry);						;}
    break;

  case 30:
#line 172 "toTAC.y"
    {	yyval.Ventry_list = yyvsp[-2].Ventry_list; yyval.Ventry_list.push_back(yyvsp[0].Ventry);							;}
    break;

  case 31:
#line 175 "toTAC.y"
    {	yyval.Ventry.var_type = yyvsp[0].intval;
																	yyval.Ventry.id = *yyvsp[0].int_list.begin();						;}
    break;

  case 32:
#line 179 "toTAC.y"
    {	TACAddFunctionDecl(SymbolListTypeADDArrayList(yyvsp[-4].intval, yyvsp[-4].int_list), yyvsp[-3].intval, yyvsp[-1].Ventry_list);
																	SymbolListNowLevel ++;
																	SymbolListScopeStack[SymbolListScopeStackTOP ++] = SymbolListScopeCNT ++;
																	SymbolListScope[SymbolListScopeStack[SymbolListScopeStackTOP - 1]].father
																		= SymbolListScopeStack[SymbolListScopeStackTOP - 2];																

																	for (list <TSymbolListVariableEntry> :: iterator p = yyvsp[-1].Ventry_list.begin(); p != yyvsp[-1].Ventry_list.end(); p++)
																	{
																		p->level = SymbolListNowLevel;
																		p->var_name_TAC = TACAllocateVar(p->var_type);
																		SymbolListAddVariableEntry(p->id, *p);
																	}
																	SymbolListFunction[yyvsp[-3].intval].arg_list = yyvsp[-1].Ventry_list;
																	SymbolListNowLevel --;
																	SymbolListScopeCNT --;
																	SymbolListScopeStackTOP --;							;}
    break;

  case 33:
#line 195 "toTAC.y"
    {	yyval.intval = yyvsp[-5].intval; yyval.ins = yyvsp[0].ins;						;}
    break;

  case 34:
#line 198 "toTAC.y"
    {	SymbolListAddTypeEntry(yyvsp[-2].intval, yyvsp[-1].Tentry);						;}
    break;

  case 35:
#line 201 "toTAC.y"
    {	yyval.Tentry = yyvsp[-1].Tentry;											;}
    break;

  case 36:
#line 202 "toTAC.y"
    {	SymbolListMakeNewStruct(yyval.Tentry);						;}
    break;

  case 37:
#line 205 "toTAC.y"
    {	SymbolListMakeNewStruct(yyval.Tentry);
																	TACAddVarDeclsToStruct(yyval.Tentry, yyvsp[0].intval, yyvsp[0].int_list);	;}
    break;

  case 38:
#line 207 "toTAC.y"
    {	yyval.Tentry = yyvsp[-1].Tentry;
																	TACAddVarDeclsToStruct(yyval.Tentry, yyvsp[0].intval, yyvsp[0].int_list);	;}
    break;

  case 39:
#line 212 "toTAC.y"
    {	SymbolListIncLevel();
																	SymbolListScopeStack[SymbolListScopeStackTOP ++] = SymbolListScopeCNT ++;
																	SymbolListScope[SymbolListScopeStack[SymbolListScopeStackTOP - 1]].father
																		= SymbolListScopeStack[SymbolListScopeStackTOP - 2];				;}
    break;

  case 40:
#line 216 "toTAC.y"
    {	yyval.ins = yyvsp[-1].ins;
																	SymbolListDecLevel();
																	SymbolListScopeStackTOP --;												;}
    break;

  case 41:
#line 221 "toTAC.y"
    {	yyval.ins = yyvsp[0].ins;											;}
    break;

  case 42:
#line 222 "toTAC.y"
    {	yyval.ins.clear(); yyval.ins.BreakChain.clear();					;}
    break;

  case 43:
#line 225 "toTAC.y"
    {	TACInstructionListJoin(yyvsp[-1].ins, yyvsp[0].ins, yyval.ins);					;}
    break;

  case 44:
#line 226 "toTAC.y"
    {	yyval.ins = yyvsp[0].ins;											;}
    break;

  case 45:
#line 229 "toTAC.y"
    {	yyval.ins = yyvsp[0].ins;											;}
    break;

  case 46:
#line 230 "toTAC.y"
    {	yyval.ins.clear(); yyval.ins.BreakChain.clear();					;}
    break;

  case 47:
#line 233 "toTAC.y"
    {	TACInstructionListJoin(yyvsp[-1].ins, yyvsp[0].ins, yyval.ins);					;}
    break;

  case 48:
#line 234 "toTAC.y"
    {	yyval.ins = yyvsp[0].ins;											;}
    break;

  case 49:
#line 238 "toTAC.y"
    {	TACRegOperation(REG_OP_READ, yyvsp[-4].str, yyvsp[-2].intval, yyval.ins);			;}
    break;

  case 50:
#line 240 "toTAC.y"
    {	TACRegOperation(REG_OP_WRITE, yyvsp[-4].str, yyvsp[-2].intval, yyval.ins);			;}
    break;

  case 51:
#line 241 "toTAC.y"
    {	TACBinaryASM(yyvsp[-2].intval, yyval.ins);								;}
    break;

  case 52:
#line 242 "toTAC.y"
    {	TACASM(yyval.ins, 0, yyvsp[-2].str);									;}
    break;

  case 53:
#line 243 "toTAC.y"
    {	TACASM(yyval.ins, 1, yyvsp[-4].str, yyvsp[-2].str);								;}
    break;

  case 54:
#line 245 "toTAC.y"
    {	TACASM(yyval.ins, 2, yyvsp[-6].str, yyvsp[-4].str, yyvsp[-2].str);							;}
    break;

  case 55:
#line 247 "toTAC.y"
    {	TACASM(yyval.ins, 3, yyvsp[-8].str, yyvsp[-6].str, yyvsp[-4].str, yyvsp[-2].str);						;}
    break;

  case 56:
#line 251 "toTAC.y"
    {	yyval.ins = yyvsp[0].ins;											;}
    break;

  case 57:
#line 252 "toTAC.y"
    {	TACAddVariableDecls(yyvsp[0].intval, yyvsp[0].int_list);		;}
    break;

  case 58:
#line 253 "toTAC.y"
    {	yyval.ins = yyvsp[-1].ins;											;}
    break;

  case 59:
#line 254 "toTAC.y"
    {	yyval.ins = yyvsp[0].ins;											;}
    break;

  case 60:
#line 255 "toTAC.y"
    {	yyval.ins = yyvsp[0].ins;											;}
    break;

  case 61:
#line 256 "toTAC.y"
    {	yyval.ins = yyvsp[0].ins;											;}
    break;

  case 62:
#line 257 "toTAC.y"
    {	yyval.ins = yyvsp[-1].ins;											;}
    break;

  case 63:
#line 258 "toTAC.y"
    {	yyval.ins = yyvsp[-1].ins;											;}
    break;

  case 64:
#line 259 "toTAC.y"
    {	yyval.ins = yyvsp[-2].ins;											;}
    break;

  case 65:
#line 262 "toTAC.y"
    {	yyval.ins = yyvsp[0].expr.ins;										;}
    break;

  case 66:
#line 263 "toTAC.y"
    {	yyval.ins.clear();											;}
    break;

  case 67:
#line 266 "toTAC.y"
    {	TACMakeICall(yyvsp[-3].expr, yyvsp[-1].expr_list, yyval.expr);							;}
    break;

  case 68:
#line 269 "toTAC.y"
    {	yyval.expr_list = yyvsp[0].expr_list;											;}
    break;

  case 69:
#line 270 "toTAC.y"
    {	yyval.expr_list.clear();											;}
    break;

  case 70:
#line 274 "toTAC.y"
    {	TACMakeFOR(yyvsp[-6].ins, yyvsp[-4].expr, yyvsp[-2].ins, yyvsp[0].ins, yyval.ins);						;}
    break;

  case 71:
#line 277 "toTAC.y"
    {	TACMakeWHILE(yyvsp[-2].expr, yyvsp[0].ins, yyval.ins);							;}
    break;

  case 72:
#line 280 "toTAC.y"
    {	TACMakeSingleIF(yyvsp[-2].expr, yyvsp[0].ins, yyval.ins);						;}
    break;

  case 73:
#line 281 "toTAC.y"
    {	TACMakeIFELSE(yyvsp[-4].expr, yyvsp[-2].ins, yyvsp[0].ins, yyval.ins);						;}
    break;

  case 74:
#line 284 "toTAC.y"
    {	TACMakeEXIT(yyval.ins);									;}
    break;

  case 75:
#line 285 "toTAC.y"
    {	TACMakeRETURN(yyvsp[0].expr, yyval.ins);								;}
    break;

  case 76:
#line 288 "toTAC.y"
    {	TACMakeBreak(yyval.ins);									;}
    break;

  case 77:
#line 291 "toTAC.y"
    {	yyval.expr_list.clear(); yyval.expr_list.push_back(yyvsp[0].expr);						;}
    break;

  case 78:
#line 292 "toTAC.y"
    {	yyv

⌨️ 快捷键说明

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