亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eccsaving.cpp

?? 學習編譯原理
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************/
/* 文件 ECCsaving.cpp								*/
/*													*/
/* 說明 TINY編譯器中間代碼的公共表達式優(yōu)化實現		*/
/****************************************************/

#include "globals.h"		/* 該頭文件定義全局類型和變量 */

#include "util.h"			/*該頭文件定義了一些實用函數*/

#include "Eccsaving.h"		/* 該頭文件聲明了公共表達式優(yōu)化界面函數*/

/* 值編碼表 */
ValuNum     *valuNumT = NULL;
/* 可用表達式代碼表 */
UsableExpr  *usableExprT = NULL;
/* 臨時變量的等價表 */
TempEqua    *tempEquaT = NULL;

/*記錄值編碼*/
int  Vnumber= 0;


/**********函數聲明***************/

int		     NewVN();

CodeFile    *ECCsave();

void	     SaveInBlock(int i);

void	     EquaSubsti(CodeFile *code);

TempEqua    *FindTempEqua(ArgRecord *arg);

int		     Process(CodeFile  *code , int  i);

ValuNum     *SearchValuNum(ArgRecord  *arg);

bool         IsEqual(ArgRecord *arg1,ArgRecord  *arg2);

void	     AppendValuNum(ArgRecord *arg , int  Vcode);

CodeFile    *FindECC(CodeKind  codekind,int  op1Code, int  op2Code);

void	     AppendTempEqua(ArgRecord  *arg1,ArgRecord  *arg2);

MirrorCode  *GenMirror(int op1,int op2,int result);

void		 AppendUsExpr(CodeFile  *code,MirrorCode  *mirror);

void		 SubstiVcode(ArgRecord  *arg,int Vcode);

void		 DelUsExpr(ArgRecord  *arg);

/********************************************************/
/* 函數名  NewVN		  								*/
/* 功  能  產生一個新的值編碼							*/
/* 說  明  通過全局變量Vnumber加1,產生新的值編碼		*/
/********************************************************/
int  NewVN()
{  Vnumber++;  
   return (Vnumber);
}

/****************************************************/
/* 函數名  ECCsave									*/
/* 功  能  公共表達式優(yōu)化主函數    					*/
/* 說  明  循環(huán)對各個基本塊進行公共表達式優(yōu)化	    */
/****************************************************/
/*注:考慮將blocknum用作局部變量,全局變量封裝不好*/

CodeFile  *ECCsave()
{ 
	ValuNum  *freeVN = NULL;
	UsableExpr  *freeUE = NULL;
	TempEqua  *freeTE = NULL;
	/*調用劃分基本塊函數*/
	int  blocknum = DivBaseBlock() ;

    //PrintBaseBlock(blocknum);
	//getchar( );

    /*循環(huán)對每個基本塊進行公共表達式優(yōu)化*/
	for (int i=0 ; i<blocknum ;i++)
	{  /*基本塊入口處置值編碼表,
		 可用表達式表,臨時變量等價表為空*/
	   valuNumT = NULL;
	   usableExprT = NULL;
	   tempEquaT = NULL;

	   /*基本塊的ECC節(jié)省*/
       SaveInBlock(i);

	   /*打印三個表*/
	   //printValuNum();
	   //printUsbleExpr();
	   //printTempEqua();

	   /*釋放此基本塊占用的表空間*/
		while (valuNumT!=NULL)
		{ freeVN = valuNumT ;
          valuNumT = valuNumT->next;
		  free(freeVN);
		}
		while (usableExprT!=NULL)
		{ freeUE = usableExprT;
		  usableExprT = usableExprT->next;
		  free(freeUE);
		}
        while(tempEquaT!=NULL)
		{ freeTE = tempEquaT;
		  tempEquaT = tempEquaT->next;
		  free(freeTE);
		}

	}
	/*返回優(yōu)化后的中間代碼*/
	return(firstCode);

}

/****************************************************/
/* 函數名  SaveInBlock								*/
/* 功  能  基本塊優(yōu)化函數	    					*/
/* 說  明										    */
/****************************************************/
void   SaveInBlock(int i)
{   
	int op1,op2,op3;
	/*可用的表達式代碼*/
	CodeFile  *substiCode = NULL;
	ValuNum  *Entry = NULL;
	
	/*指向基本塊第一條語句*/
	CodeFile *currentCode = baseBlock[i];
	CodeFile *formerCode = NULL;
	CodeFile *laterCode = NULL;

	/* 循環(huán)處理基本塊中的各條語句*/
	while ((currentCode!=baseBlock[i+1])&&(currentCode!=NULL))
	{
		/*進行等價替換*/
		EquaSubsti(currentCode);

		switch(currentCode->codeR.codekind)
		{ case  ADD:
		  case  SUB:
          case  MULT:
   	      case  DIV:
		  case  LTC:
		  case  EQC: 
		  case  AADD:
			   /*調用函數Process處理分量1,返回分量1的編碼*/
			   op1 = Process(currentCode ,1 );
			   /*調用函數Process處理分量2,返回分量2的編碼*/
			   op2 = Process(currentCode ,2 );

				/*查找可用表達式代碼表*/
				substiCode = FindECC(currentCode->codeR.codekind,op1,op2);
				/*若找到,當前代碼可節(jié)省*/
				if (substiCode!=NULL)
				{ 
                  /*向臨時變量等價表中添加一項*/
				  AppendTempEqua(currentCode->codeR.arg3,substiCode->codeR.arg3);
				  /*刪除當前代碼*/
				  formerCode = currentCode->former;
				  laterCode = currentCode->next;
				  if (formerCode!=NULL)
				  	  formerCode->next = laterCode;
				  if (laterCode!=NULL)
					  laterCode->former = formerCode; 
				  free(currentCode);
				  currentCode = formerCode;
				}				 
				else  /*沒找到,代碼不可節(jié)省*/
				{ 
				  /*為結果變量構造一個新的編碼,填入值編碼表*/
				  Vnumber++;
				  op3 = Vnumber;
				  AppendValuNum(currentCode->codeR.arg3,op3);
				  /*構造對應的映象碼*/
				  MirrorCode *mirror = GenMirror(op1,op2,op3);
				  /*當前代碼寫入可用表達式代碼表*/
				  AppendUsExpr(currentCode,mirror);
				}
				break;
		  case  ASSIG:
			    /*Process函數處理賦值右部,返回編碼*/
			    op1 = Process(currentCode ,1 );
				
				/*若是間接臨時變量,op1是地址碼;否則,是值碼*/
				op2 = op1;
				
				/*替換編碼表中賦值左部的值編碼*/
				SubstiVcode(currentCode->codeR.arg2, op2);

				/*刪除可用表達式代碼表中用到賦值左部值編碼的項*/
				DelUsExpr(currentCode->codeR.arg2);
				break;

		  default:  break;
		}
		/*處理下一條代碼*/
		currentCode = currentCode->next;
	}
}
/****************************************************/
/* 函數名  EquaSubsti								*/
/* 功  能  利用臨時變量等價表對當前代碼進行等價替換 */
/* 說  明  										    */
/****************************************************/
void  EquaSubsti(CodeFile *code)
{	
	TempEqua  *Entry = NULL ;
	if (code->codeR.arg1!=NULL)
		/*若操作數1是臨時變量,且存在于臨時變量等價表中,則替換*/
		if( code->codeR.arg1->form==AddrForm)
			if(code->codeR.arg1->Attr.addr.dataLevel == -1)
			{	Entry = FindTempEqua(code->codeR.arg1);
				if (Entry!=NULL)
					code->codeR.arg1 = Entry->arg2;
			}
    if (code->codeR.arg2!=NULL)
		/*若操作數2是臨時變量,且存在于臨時變量等價表中,則替換*/
		if( code->codeR.arg2->form==AddrForm)
			if(code->codeR.arg2->Attr.addr.dataLevel == -1)
			{	Entry = FindTempEqua(code->codeR.arg2);
				if (Entry!=NULL)
					code->codeR.arg2 = Entry->arg2;
			}
}

/****************************************************/
/* 函數名  Process									*/
/* 功  能  處理操作分量,并返回對應的編碼			*/
/* 說  明  若首次出現,則分配新編碼,填入編碼表中, */
/*	       返回值取這個新的編碼;否則,根據是否間接 */
/*	       變量,返回相應的值編碼或地址碼			*/	
/****************************************************/
int  Process(CodeFile  *code , int  i)
{
	ArgRecord  *arg;
	ValuNum  *Entry = NULL ;
	CodeKind  codekind = code->codeR.codekind;
	int  opC ;
	if (i==1)
			arg = code->codeR.arg1;
	else    arg = code->codeR.arg2;
	/*若操作數首次出現,則填入編碼表*/
	Entry = SearchValuNum(arg);
	if( Entry==NULL)
	{ Vnumber++;
	  opC = Vnumber; /*op1記錄操作數1的值編碼*/
	  AppendValuNum(arg,opC);
	}
	else 
	{  
		/*間接臨時變量*/
	   if (Entry->access == indir)
			/*用間接臨時變量的地址碼*/
			if((codekind == AADD)||(codekind == ASSIG))
					/*取地址碼*/
					opC= Entry->codeInfo.twoCode.addrcode;
			else   /*否則,取值碼*/
					opC = Entry->codeInfo.twoCode.valuecode;
		/*非間接臨時變量*/
		else    opC = Entry->codeInfo.valueCode;
	}

	return (opC);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区欧美一区| 亚洲国产wwwccc36天堂| 国产大陆a不卡| 国产日韩欧美麻豆| 成人av资源网站| 日韩伦理av电影| 欧美影片第一页| 日韩不卡一二三区| 久久嫩草精品久久久精品一| 不卡一区二区中文字幕| 一区二区三区国产精品| 91精品综合久久久久久| 激情五月激情综合网| 国产精品大尺度| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲欧美日韩国产成人精品影院| 91久久人澡人人添人人爽欧美| 亚洲电影在线播放| 26uuu欧美日本| 91一区二区三区在线观看| 亚洲国产精品嫩草影院| 精品国产麻豆免费人成网站| 丁香婷婷综合网| 午夜精品久久久久久久久久| 欧美电影免费观看高清完整版在 | 亚洲裸体xxx| 日韩欧美在线123| 99re热这里只有精品视频| 日本午夜一区二区| 亚洲视频电影在线| 精品国产91久久久久久久妲己| 91丝袜高跟美女视频| 日韩av在线免费观看不卡| 欧美国产精品一区二区| 91精品啪在线观看国产60岁| av一区二区不卡| 美女国产一区二区| 亚洲免费观看高清完整版在线观看| 日韩一本二本av| 日本道色综合久久| 大桥未久av一区二区三区中文| 三级一区在线视频先锋 | 中文字幕精品在线不卡| 欧美美女一区二区在线观看| 成人动漫视频在线| 秋霞电影网一区二区| 亚洲丝袜美腿综合| 久久久天堂av| 日韩免费福利电影在线观看| 欧美中文字幕不卡| 99这里都是精品| 国产成人av一区二区| 青青草成人在线观看| 亚洲欧美日韩一区| 国产精品看片你懂得| 精品久久久久久综合日本欧美 | 日韩欧美一区二区视频| 日本高清不卡一区| 99精品国产91久久久久久| 国产一区二区三区四| 欧美aaaaaa午夜精品| 亚洲成av人**亚洲成av**| 中文字幕一区二区三区在线播放| 精品国产1区二区| 精品国产欧美一区二区| 欧美va亚洲va| 2020国产精品| wwwwxxxxx欧美| www国产精品av| 久久久久久久久久久久久久久99 | 日韩视频一区二区| 7777精品伊人久久久大香线蕉完整版 | 高清av一区二区| 国产盗摄精品一区二区三区在线| 黄页视频在线91| 麻豆精品视频在线观看免费| 美女精品一区二区| 久久 天天综合| 久久99精品一区二区三区| 久久99久久久久| 韩国v欧美v日本v亚洲v| 精品一区二区免费视频| 激情丁香综合五月| 国产不卡免费视频| 成人免费高清视频在线观看| 成人激情开心网| 在线这里只有精品| 欧美猛男男办公室激情| 宅男噜噜噜66一区二区66| 欧美一级爆毛片| 精品国产精品一区二区夜夜嗨| 精品成a人在线观看| 亚洲国产岛国毛片在线| 亚洲男人的天堂在线aⅴ视频| 一区二区三区资源| 美女视频第一区二区三区免费观看网站| 久久97超碰国产精品超碰| 国产91丝袜在线18| 91美女福利视频| 中文字幕精品在线不卡| 国产精品国产精品国产专区不片| 中文字幕视频一区| 亚洲一二三四在线观看| 奇米精品一区二区三区四区 | 婷婷综合另类小说色区| 看片的网站亚洲| 成人激情文学综合网| 欧美日韩三级一区| 久久女同互慰一区二区三区| 亚洲精品国产成人久久av盗摄| 奇米精品一区二区三区四区| 高清久久久久久| 欧美美女一区二区三区| 欧美极品另类videosde| 亚洲一区在线观看网站| 国产一区在线精品| 欧美体内she精高潮| 亚洲精品在线免费观看视频| 亚洲毛片av在线| 国产精品中文有码| 欧美综合亚洲图片综合区| 精品对白一区国产伦| 一区二区在线观看不卡| 久久99蜜桃精品| 欧美三级日韩在线| 欧美国产乱子伦 | 欧美国产亚洲另类动漫| 午夜精品久久久久久久久久| 成人精品国产福利| 日韩一级片网站| 亚洲黄色小视频| 大胆亚洲人体视频| 欧美xxxx在线观看| 亚洲1区2区3区4区| 91蜜桃在线免费视频| 久久影院视频免费| 天天综合天天综合色| 91在线观看一区二区| 久久女同互慰一区二区三区| 天天色 色综合| 色综合天天做天天爱| 久久久99精品久久| 日欧美一区二区| 色成人在线视频| 中文字幕一区三区| 国产成人免费视频精品含羞草妖精| 欧美日韩一二三| 亚洲在线观看免费| 91小视频在线观看| 国产精品久久网站| 国产成人激情av| 中文字幕乱码亚洲精品一区| 韩国av一区二区| 精品国产一区久久| 久久精品国产99国产精品| 91精品国产乱| 日韩**一区毛片| 欧美精品乱码久久久久久| 洋洋成人永久网站入口| 在线亚洲一区二区| 日日欢夜夜爽一区| 91精品国产综合久久精品性色| 有码一区二区三区| 欧洲精品一区二区| 亚洲综合视频在线观看| 欧美亚洲综合另类| 亚洲国产日韩综合久久精品| 欧美性受xxxx| 日日嗨av一区二区三区四区| 日韩一区二区三区精品视频| 全国精品久久少妇| 精品不卡在线视频| 岛国一区二区在线观看| 中文字幕亚洲视频| 欧美性视频一区二区三区| 首页欧美精品中文字幕| 91精品国产91热久久久做人人| 日韩av高清在线观看| 精品日韩成人av| 成人午夜看片网址| 亚洲另类一区二区| 欧美日韩在线综合| 日韩成人伦理电影在线观看| 精品奇米国产一区二区三区| 国产精品一区在线观看你懂的| 国产欧美日韩视频一区二区| 99re8在线精品视频免费播放| 亚洲精品视频在线| 91精品国产综合久久精品性色| 国产一区在线看| 成人免费小视频| 欧美日韩国产色站一区二区三区| 免播放器亚洲一区| 久久先锋资源网| 成人美女视频在线观看| 夜夜爽夜夜爽精品视频| 欧美va亚洲va在线观看蝴蝶网| www.日韩在线| 免费视频最近日韩| 综合色天天鬼久久鬼色|