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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? loopopti.cpp

?? 編譯原理學(xué)習(xí)使用的代碼 內(nèi)容有從詞法分析到中間代碼生成的代碼 并且含有注釋
?? CPP
字號(hào):
/****************************************************/
/* 文件 loopOpti.cpp								*/
/*													*/
/* 說(shuō)明 TINY編譯器中間代碼的循環(huán)不變式外提優(yōu)化  	*/
/****************************************************/

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

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

#include "loopOpti.h"		/* 該頭文件聲明了循環(huán)不變式優(yōu)化界面函數(shù)*/


/*變量定值表,用變量的arg結(jié)構(gòu)表示變量*/
 ArgRecord  *varTable[100];
 int  TotalNum = 0;

/*循環(huán)信息棧*/
LoopStack  *loopTop = NULL;
bool  loopStackEmpty;


/***************函數(shù)聲明********************/

CodeFile * LoopOpti();

void      whileEntry(CodeFile *code);

void      whileEnd(CodeFile *code);

void      call(CodeFile  *code);

void	  LoopOutside(CodeFile  *entry);

int  	  SearchTable(ArgRecord  *arg , int  head);

void      DelItem(ArgRecord  *arg, int head);

void      AddTable(ArgRecord *arg);

void      printVarTable();


/****************************************************/
/* 函數(shù)名  LoopOpti									*/
/* 功  能  循環(huán)不變式優(yōu)化主函數(shù)						*/
/* 說(shuō)  明										    */
/****************************************************/
CodeFile  *LoopOpti()
{   
   /*初始化變量定值表*/
	for (int i=0;i<100;i++)
		varTable[i] = NULL;

	/*從第一條代碼開始優(yōu)化過程*/
    CodeFile  *currentCode = firstCode;
	
    fprintf(listing,"\n>>Var  def  Table  after  each  code:\n");

	/*循環(huán)處理每條代碼,直到中間代碼結(jié)束*/
	while (currentCode!=NULL)
	{   
		switch(currentCode->codeR.codekind)
		{ /*算術(shù)和關(guān)系操作*/
		  case  AADD:
		  case  ADD:
		  case  SUB:
          case  MULT:
   	      case  DIV:
		  case  LTC:
		  case  EQC:	
			        /*將被定值的變量名填入變量定值表中*/
			  	    AddTable(currentCode->codeR.arg3);
					break;
		  /*賦值語(yǔ)句*/
	      case ASSIG:
			        /*將被定值的變量填入變量定值表中*/
			  	    AddTable(currentCode->codeR.arg2);
					break;
		  /*循環(huán)入口*/
		  case WHILESTART:
					whileEntry(currentCode);
					break;
		  /*循環(huán)出口*/
		  case ENDWHILE:  
					whileEnd(currentCode);
					break;
		  /*過程調(diào)用語(yǔ)句*/
		  case CALL:
			        call(currentCode);
			        break;

		  default : break;
        }
      /*調(diào)用函數(shù)輸出變量定值表,以現(xiàn)在處理完每條代碼后,
	    表的變化*/
      printVarTable();
	  /*令指針指向下一條代碼*/
	  currentCode = currentCode->next;

	 
	}
   return (firstCode);
}

/****************************************************/
/* 函數(shù)名  whileEntry								*/
/* 功  能  循環(huán)入口部分的處理函數(shù)					*/
/* 說(shuō)  明										    */
/****************************************************/
void whileEntry(CodeFile *code)
{
	LoopInfo  *infoItem = (LoopInfo*)malloc(sizeof(LoopInfo));

	/*外提標(biāo)志初始化為可以外提標(biāo)志1*/
	infoItem->state = 1;
	/*此循環(huán)在變量定值表的入口*/
	infoItem->varDef = TotalNum;
	/*循環(huán)入口指針*/
	infoItem->whileEntry = code;
	/*循環(huán)出口此處不能確定*/
	//infoItem.whileEnd = NULL;
    /*循環(huán)信息表壓棧*/
    PushLoop(infoItem);

}

/****************************************************/
/* 函數(shù)名  call										*/
/* 功  能  遇到過程調(diào)用語(yǔ)句的特別處理				*/
/* 說(shuō)  明  所有包含此調(diào)用語(yǔ)句的循環(huán)都不能做不變式   */
/*		   外提									    */
/****************************************************/
void  call(CodeFile  *code)
{ 
  /*所有打開著的循環(huán)均為不可外提狀態(tài),是這些循環(huán)信息中的
    State取0*/
   LoopStack  *Item = loopTop;
  
   while (Item!=NULL)
   { Item->loopInfo->state = 0;
     Item = Item->under;
   }

}

/****************************************************/
/* 函數(shù)名  whileEnd									*/
/* 功  能  循環(huán)出口部分的處理函數(shù)					*/
/* 說(shuō)  明										    */
/****************************************************/

void whileEnd(CodeFile *code)
{
  /*循環(huán)信息棧的棧頂*/
  LoopStack  *Item = loopTop;

  /*可以外提*/
  if (Item->loopInfo->state == 1)
  {   
	  /*填寫循環(huán)出口位置指針*/
	  loopTop->loopInfo->whileEnd = code;
	  /*找到循環(huán)入口*/
      CodeFile  *entry  = loopTop->loopInfo->whileEntry;
      /*循環(huán)外提處理部分*/
      LoopOutside(entry );
  }

  /*彈循環(huán)信息棧,此層循環(huán)處理結(jié)束*/
  PopLoop();

}


/****************************************************/
/* 函數(shù)名  LoopOutside								*/
/* 功  能  循環(huán)外提處理函數(shù)							*/
/* 說(shuō)  明										    */
/****************************************************/
void   LoopOutside(CodeFile  *entry)
{
   /*外提的位置,為循環(huán)入口位置*/
   CodeFile  *place = entry;
   /*當(dāng)前處理代碼,注:跳過循環(huán)開始標(biāo)號(hào)語(yǔ)句*/
   CodeFile  *code =  entry->next;
   
   /*取循環(huán)信息棧頂指針*/
   LoopStack *Item = loopTop;
   /*取得本層循環(huán)的出口位置*/
   CodeFile  *end = Item->loopInfo->whileEnd;
   /*取得本層循環(huán)的變量信息表*/
   int  head = Item->loopInfo->varDef;

   int  present1, present2;

   /*用于跳過內(nèi)層循環(huán)*/
   int  Level = 0;

   /*循環(huán)檢查每條代碼是否可以外提,直到此層循環(huán)結(jié)束*/
	while (code != end )
	{   
		switch(code->codeR.codekind)
		{ 
		  case  WHILESTART:
				Level++;	break;
		  case  ENDWHILE:
			    Level--;	break;
		  case  ADD:
		  case  SUB:
          case  MULT:
		  case  AADD:
			   /*跳過內(nèi)層循環(huán)*/
			   if (Level==0)
				{
				 present1 = SearchTable(code->codeR.arg1,head);
				 present2 = SearchTable(code->codeR.arg2,head);
				 /*兩個(gè)分量都不在變量定值標(biāo)號(hào)中,可以外提*/
				 if ((present1<0)&&(present2<0))
				 {  /*操作結(jié)果也是不變量,故若在表中,從表中刪除*/
					
					DelItem(code->codeR.arg3, head);
					/*外提*/
					/*在當(dāng)前位置,刪除此代碼*/
					CodeFile *formerCode = code->former;
					CodeFile *nextCode = code->next;
					formerCode->next = nextCode;
					nextCode->former = formerCode;

					/*將代碼加入到應(yīng)外提的位置*/
					CodeFile *fplace = place->former;
					fplace->next  = code;
					code->former = fplace;
  			    	code->next = place;
					place->former = code;

					/*回到當(dāng)前位置處,準(zhǔn)備處理下一條語(yǔ)句*/
					code = formerCode;					
				 }
				 else
					/*否則,將變量定值加入當(dāng)前變量定值表中*/ 
					AddTable(code->codeR.arg3);
				}
			   break;
          default :  break;
		}

		/*檢查下一條語(yǔ)句*/
		code = code->next;
	}

}


/****************************************************/
/* 函數(shù)名  SearchTable								*/
/* 功  能  循環(huán)變量定值表查找函數(shù)					*/
/* 說(shuō)  明  參數(shù)head指明了本層循環(huán)的變量定值在表中的 */
/*		   起始位置,arg表示要查找的變量,返回變量   */
/*		   在表中的位置,若不存在返回值為-1		*/
/****************************************************/
int	SearchTable(ArgRecord  *arg , int  head)
{
	/*初始化為負(fù)數(shù),不再表中*/
	int  present = -1 ;

	if (arg->form ==AddrForm)
	{   
		int  level = arg->Attr.addr.dataLevel;
	    int  off = arg->Attr.addr.dataOff;
		/*注:臨時(shí)變量和源變量都可以通過比較層數(shù)和偏移看是否存在
		      于表中*/
		for (int i = head; i<TotalNum; i++)
			if ((varTable[i]->Attr.addr.dataLevel == level)
				&&(varTable[i]->Attr.addr.dataOff == off))
			{	present = i;
				break;
			}
    }   
	return(present);
}

/****************************************************/
/* 函數(shù)名  DelItem									*/
/* 功  能  刪除變量定值表中此項(xiàng)						*/
/* 說(shuō)  明										    */
/****************************************************/
void  DelItem(ArgRecord  *arg, int head)
{
   /*調(diào)用函數(shù)查找變量定值表*/
   int present = SearchTable(arg , head);
   /*若在表中,則刪除*/
   if (present!=-1)
   {   for (int i=present;i<TotalNum ; i++)
           varTable[i] =varTable[i+1];
       TotalNum--;
   }
}

/****************************************************/
/* 函數(shù)名  AddTable									*/
/* 功  能  將被定值的變量填入變量定值表				*/
/* 說(shuō)  明										    */
/****************************************************/
void  AddTable(ArgRecord  *arg)
{  
   /*若不在循環(huán)中,則從頭查表,以免表中重復(fù)填入相同的變量*/
   int head = 0;
   /*若在循環(huán)中,則只要在當(dāng)前循環(huán)層沒有重復(fù)定義即可*/
   if (loopTop!=NULL)
	    head = loopTop->loopInfo->varDef;

   int  present = SearchTable(arg , head);
   /*表中沒有,則添加*/
   if  (present==-1)
       varTable[TotalNum++] = arg;


}

/****************************************************/
/* 函數(shù)名  printVarTable							*/
/* 功  能  輸出變量定值表							*/
/* 說(shuō)  明										    */
/****************************************************/
void  printVarTable()
{  
	  fprintf(listing,">>");
	  /*輸出變量定值表*/
	  for (int i=0;i<TotalNum;i++)
	  {
		if (varTable[i]!=NULL)
		{	  if (varTable[i]->Attr.addr.dataLevel== -1)
				{ fprintf(listing, "temp");
				  fprintf(listing,"%d",varTable[i]->Attr.addr.dataOff);
		          fprintf(listing," ");
				}
			   else 
			      fprintf(listing, "%s  ",varTable[i]->Attr.addr.name);
		}
	  }
	  fprintf(listing,"\n");
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人精品3d动漫h| 国产自产2019最新不卡| 一区二区在线看| 亚洲日本成人在线观看| 日韩欧美一区在线观看| 欧美日韩在线播| 日韩二区在线观看| 亚洲一区二区五区| 日韩三级.com| 久久精品一区二区三区不卡 | 91在线无精精品入口| 欧美在线免费观看视频| 中文字幕中文乱码欧美一区二区| 久久精品一区二区| 亚洲欧洲日韩综合一区二区| 中文字幕中文在线不卡住| 亚洲欧美一区二区久久| 亚洲精品国产成人久久av盗摄| 美女性感视频久久| 日本韩国欧美在线| 9191精品国产综合久久久久久| 日韩亚洲欧美成人一区| 精品少妇一区二区三区免费观看| 国产偷国产偷精品高清尤物| 亚洲欧美一区二区视频| 日本在线不卡一区| 欧美日韩国产综合一区二区三区| 欧美激情一区在线观看| 日韩电影一二三区| 日本道色综合久久| 国产欧美一区二区精品性色超碰| 性做久久久久久免费观看欧美| 美国欧美日韩国产在线播放| 91网站视频在线观看| 日韩欧美色电影| 亚洲国产综合色| 奇米精品一区二区三区四区| 91在线国产福利| 日本一区二区三区四区在线视频| 日韩中文字幕麻豆| 欧美片网站yy| 五月婷婷欧美视频| 欧美日韩国产综合一区二区三区| 亚洲精品成a人| 色婷婷久久久久swag精品 | 日本免费在线视频不卡一不卡二| 在线一区二区视频| 五月激情综合网| 日韩欧美视频一区| 国产精品一区二区x88av| 久久久久国产精品人| 国产精品 欧美精品| 中文字幕中文字幕在线一区| 91香蕉视频污| 精品亚洲成a人| 国产精品国产成人国产三级| 一本色道综合亚洲| 日韩专区欧美专区| 亚洲国产高清在线观看视频| 91麻豆自制传媒国产之光| 五月天精品一区二区三区| 精品日韩一区二区三区| 99精品久久久久久| 日韩福利视频导航| 1区2区3区欧美| 2023国产精品视频| 欧美日韩免费高清一区色橹橹| 精品一区精品二区高清| 亚洲欧美一区二区三区国产精品| 欧美久久免费观看| 91精品国产黑色紧身裤美女| 国产成人精品免费视频网站| 黑人巨大精品欧美黑白配亚洲| 韩日精品视频一区| 91在线你懂得| 制服.丝袜.亚洲.另类.中文| 在线亚洲免费视频| 欧美精品久久天天躁| 2021国产精品久久精品| 日本一二三不卡| 亚洲一区二区三区三| 国产一区二区美女诱惑| 色欧美日韩亚洲| 精品国产成人在线影院 | 欧洲一区二区三区在线| 国产乱一区二区| 韩国在线一区二区| 国产精品主播直播| 波多野结衣一区二区三区| 国产在线播放一区| 成人午夜精品在线| 91香蕉视频mp4| 欧美精品日日鲁夜夜添| 日韩精品综合一本久道在线视频| 久久久影视传媒| 亚洲伦理在线免费看| 日本不卡一区二区三区| 国产一区二区三区在线观看免费视频 | 另类人妖一区二区av| 国产99一区视频免费| 91黄色免费观看| 久久精品亚洲一区二区三区浴池 | 色视频一区二区| 精品国产乱码久久久久久图片| 午夜不卡在线视频| 国产成人综合网| 免费看欧美女人艹b| 欧美性xxxxxx少妇| 欧美精品在线观看一区二区| 91丝袜国产在线播放| 91麻豆国产在线观看| 91看片淫黄大片一级| 欧美大肚乱孕交hd孕妇| 久久欧美中文字幕| 天天操天天色综合| 99国产精品久| 亚洲国产成人一区二区三区| 婷婷一区二区三区| 色综合久久66| 国产精品伦理在线| 国产99一区视频免费| 久久这里只有精品首页| 久久国产精品99久久人人澡| 欧美性猛片aaaaaaa做受| 中文字幕欧美激情一区| 国产91在线观看丝袜| 久久综合色播五月| 国产一区二区三区最好精华液 | 91精品婷婷国产综合久久性色| 中文字幕一区二区三区不卡 | 国产香蕉久久精品综合网| 三级在线观看一区二区| 欧美人牲a欧美精品| 日韩精品一二三四| 日韩丝袜美女视频| 精品在线观看视频| 精品国产一区二区国模嫣然| 久久成人麻豆午夜电影| 精品国产精品网麻豆系列| 国产伦精品一区二区三区在线观看| 精品欧美一区二区久久| 国产精品1区2区3区在线观看| 亚洲国产精品激情在线观看| 91天堂素人约啪| 日本在线播放一区二区三区| 欧美一级午夜免费电影| 国内不卡的二区三区中文字幕| 久久久精品日韩欧美| 91在线观看高清| 毛片av一区二区三区| 亚洲女厕所小便bbb| 91精品国产品国语在线不卡| 国产激情偷乱视频一区二区三区 | 不卡影院免费观看| 亚洲成a人片综合在线| 中文字幕va一区二区三区| 欧美日韩国产片| 高清视频一区二区| 日韩电影在线免费看| 综合欧美亚洲日本| 欧美成人vr18sexvr| 欧美色男人天堂| 99久精品国产| 国产美女一区二区三区| 人人爽香蕉精品| 天天色综合天天| 午夜精品福利久久久| 亚洲自拍偷拍综合| 亚洲专区一二三| 一区二区在线观看av| 欧美国产精品专区| 欧美高清在线一区二区| 久久久综合网站| 久久午夜羞羞影院免费观看| 欧美日韩一区二区欧美激情| 91成人看片片| 欧美日韩国产123区| 欧美精品自拍偷拍| 日韩一卡二卡三卡国产欧美| 欧美日韩成人高清| 精品视频1区2区| 日韩一区二区三区在线| 欧美片在线播放| 色哟哟精品一区| 欧美日本一道本在线视频| 欧美日韩一本到| 6080yy午夜一二三区久久| 日韩精品一区二区三区老鸭窝 | 久草这里只有精品视频| 国产成人无遮挡在线视频| 99vv1com这只有精品| 在线播放欧美女士性生活| 精品欧美乱码久久久久久| 国产精品美女一区二区在线观看| 一区二区三区欧美在线观看| 日韩影院在线观看| 国产一区二区在线免费观看| 不卡在线视频中文字幕| 日韩一本二本av| 中文字幕精品—区二区四季|