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

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

?? consopti.cpp

?? 編譯原理學習使用的代碼 內容有從詞法分析到中間代碼生成的代碼 并且含有注釋
?? CPP
字號:
/****************************************************/
/* 文件 consOpti.cpp								*/
/*													*/
/* 說明 TINY編譯器中間代碼的常量表達式優化實現		*/
/****************************************************/

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

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

#include "ConsOpti.h"		/* 該頭文件聲明了常表達式優化界面函數*/

/*常量定值表*/
ConstDefT  *table = NULL;


/**********函數聲明************/
void   OptiBlock(int  i) ;

bool   ArithC( CodeFile  *code) ;

void   SubstiArg(CodeFile  *code,int i);

bool   FindConstT(ArgRecord *arg, ConstDefT **Entry);

void   AppendTable(ArgRecord  *arg , int result);

void   DelConst(ArgRecord  *arg);

void   printConstTable(int i);


/****************************************************/
/* 函數名  ConstOptimize							*/
/* 功  能  常表達式優化主函數      					*/
/* 說  明  循環對各個基本塊進行常表達式優化		    */
/****************************************************/
CodeFile  *ConstOptimize()
{    
	/*用于釋放空間*/
	ConstDefT  * freeTemp = NULL;
	/*調用劃分基本塊函數*/
	int blocknum = DivBaseBlock();

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

    /*循環對每個基本塊進行常表達式優化*/
	for (int i=0 ; i<blocknum ;i++)
	{  /*基本塊入口處置常量定值表為空*/
	   table = NULL;
	   /*基本塊的常表達式優化*/
       OptiBlock(i);
	   /*釋放此基本塊的常量定值表空間*/
	   while (table!=NULL)
	   {  freeTemp = table;
	      table = freeTemp->next;
		  free(freeTemp);
	   }
	}
	/*返回優化后的中間代碼*/
	return(firstCode);
}

/****************************************************/
/* 函數名  OptiBlock								*/
/* 功  能  對一個基本塊進行常表達式優化				*/
/* 說  明										    */
/****************************************************/
void OptiBlock(int  i)
{   
	bool  delCode ;
	/*指向基本塊第一條語句*/
	CodeFile *currentCode = baseBlock[i] ;
	CodeFile *formerCode = NULL;
	CodeFile *laterCode = NULL;
	    
	ArgRecord  *arg1 = NULL ;
	ArgRecord  *arg2 = NULL ;

	
	/*循環處理每條代碼,直到當前基本塊結束*/
	while ((currentCode!=baseBlock[i+1])&&(currentCode!=NULL))
	{   
		switch(currentCode->codeR.codekind)
		{ /*算術和關系操作*/
		  case  ADD:
		  case  SUB:
          case  MULT:
   	      case  DIV:
		  case  LTC:
		  case  EQC: 
			 /*調用算術和關系運算處理函數*/ 
			  delCode = ArithC(currentCode);
			 /*刪除標識為真時,刪除當前多元式*/
             if (delCode)
			 {  formerCode = currentCode->former;
			    laterCode = currentCode->next;
				if (formerCode!=NULL)
					formerCode->next = laterCode;
				if (laterCode!=NULL)
					laterCode->former = formerCode; 
				free(currentCode);
				currentCode = formerCode ;
			 }
		     break;
		
		  /*賦值語句*/
	      case ASSIG:
			    /*對第一個ARG結構進行值替換*/
			    SubstiArg(currentCode,1);
				arg1 = currentCode->codeR.arg1;
				arg2 = currentCode->codeR.arg2;
				/*若是常數結構,則將常量定值加入常量定值表*/
				if (arg1->form==ValueForm)
					AppendTable(arg2,arg1->Attr.value);
				else  /*刪除表中含有此變量的定值*/ 
					 DelConst(arg2);
				break;
		  case JUMP0:
		  case WRITEC:
			    /*對第一個ARG結構進行值替換*/
				SubstiArg(currentCode,1);
				break;
		  case AADD:
			    /*對第二個ARG結構進行值替換*/
				SubstiArg(currentCode,2);
				break;
		  default :      break;
        }

	  /*調用函數輸出當前常量定值表*/
      printConstTable(i); /*對應于每條代碼,常量定值表的變化情況*/

	  /*令指針指向下一條代碼*/
	  currentCode = currentCode->next;
    }

}

/****************************************************/
/* 函數名  ArithC									*/
/* 功  能  處理算術操作和關系比較操作				*/
/* 說  明  對運算分量1和運算分量2進行值替換,若都是 */
/*		   常數,將結果寫入常量定值表,并置四元式	*/
/*		   刪除標志為真								*/
/****************************************************/
bool  ArithC (CodeFile  *code)
{
	bool  delCode = false;
    int  value1,value2,result;
	/*對分量1進行值替換*/
	SubstiArg(code,1);
	ArgRecord  *arg1 = code->codeR.arg1;
	/*對分量2進行值替換*/
	SubstiArg(code,2);
	ArgRecord  *arg2 = code->codeR.arg2;

	CodeKind  codekind =code->codeR.codekind;
	ArgRecord  *arg3 = code->codeR.arg3;

	/*操作分量都是常數*/
	if ( (arg1->form==ValueForm) && (arg2->form==ValueForm))
	{   value1 = arg1->Attr.value;
		value2 = arg2->Attr.value;
		switch( codekind)
		{	case ADD:   result = value1+value2; break;
			case SUB:   result = value1-value2; break;
			case MULT:  result = value1*value2; break;
			case DIV:   result = value1/value2; break;
			case LTC:   if (value1<value2)
							  result = 1;
						else  result = 0;
						break;
			case EQC:   if (value1==value2)
							  result = 1;
						else  result = 0;
						break;
			default:  break;
		}
		/*操作結果寫入常量定值表*/
		AppendTable( arg3 ,result);
		/*當前多元式應刪除*/
        delCode = true;
	}
  
	return (delCode);
}

/****************************************************/
/* 函數名  SubstiArg								*/
/* 功  能  對一個ARG結構進行值替換					*/
/* 說  明  參數i指出對中間代碼的哪個ARG結構進行替換 */
/****************************************************/
void   SubstiArg(CodeFile  *code,int i)
{   
	ConstDefT  *Entry = NULL ;
	ArgRecord  *arg = NULL;
	ArgRecord  *newArg = NULL;

	if (1==i)
		 arg = code->codeR.arg1;
	else arg = code->codeR.arg2;
    /*若ARG結構是地址類,且常量定值表中有定值,則值替換*/
	if ( arg->form ==AddrForm)
	{  
		bool constflag = FindConstT(arg,&Entry);
		if (constflag==true)
		{ /*創建一個值的ARG結構,替換原有的ARG結構*/
		  newArg = (ArgRecord *)malloc(sizeof(ArgRecord));
		  newArg->form = ValueForm ;
		  newArg->Attr.value = Entry->constValue;
		  if (1==i)
			   code->codeR.arg1 = newArg;
		  else code->codeR.arg2 = newArg;
		}
	}
}


/****************************************************/
/* 函數名  FindConstT								*/
/* 功  能  在常量定值表中查找當前變量是否有定值		*/
/* 說  明  輸入為變量的ARG結構,根據變量是臨時變量  */
/*		   還是一般標識符變量,分別處理				*/
/****************************************************/
bool FindConstT(ArgRecord *arg, ConstDefT  **Entry)
{ 
	bool  present = false;

	int  level = arg->Attr.addr.dataLevel;
	int  off = arg->Attr.addr.dataOff;
	
	ConstDefT *t =table;
	while((t != NULL)&&(present==false))
	{
	   if ((t->variable->Attr.addr.dataLevel == level)
			    &&(t->variable->Attr.addr.dataOff ==off))
		{	present = true;
			(*Entry) = t ;
		}
	   t = t->next;
	}
		
	return(present);
}

/****************************************************/
/* 函數名  AppendTable								*/
/* 功  能  將變量和其常量值寫入常量定值表			*/
/* 說  明  創建一個新的節點,填寫常量定值內容,并連 */
/*		   入表中									*/
/****************************************************/
void   AppendTable(ArgRecord  *arg , int result)
{ 
  ConstDefT  *last = table;
  ConstDefT  *current = table;
  ConstDefT  *Entry = NULL ;
  /*查找,若已存在此變量,則改變其值*/
  bool  present =  FindConstT(arg, &Entry) ;
  if ( present )
		Entry->constValue = result ;
  else
  {	/*否則,創建一個新的節點*/
	ConstDefT  *newConst = (ConstDefT  *) malloc (sizeof(ConstDefT));
	newConst->former = NULL ;
	newConst->next = NULL;
	newConst->constValue = result ;
    newConst->variable = arg;

	/*當前節點加入常量定值表中*/
	if (table==NULL)
		  table = newConst ;
	else 
	{	 while (last->next != NULL)
			  last = last->next;
		 last->next = newConst ;
		 newConst->former = last ;
	}	
  }
}

/****************************************************/
/* 函數名  DelConst									*/
/* 功  能  刪除一個常量定值							*/
/* 說  明  若存在,則從常量定值表中刪除,否則結束	*/
/****************************************************/
void   DelConst(ArgRecord  *arg)
{   
	ConstDefT  *Entry = NULL;
	ConstDefT  *former = NULL;
	ConstDefT  *later = NULL;
	/*查找變量,若存在則刪除;否則,結束*/
    bool  present =  FindConstT(arg, &Entry) ;
	if ( present )
	{	former = Entry->former;
		later = Entry->next;
		former->next = later;
		later->former = former;
		free(Entry);
	}

}

/****************************************************/
/* 函數名  printConstTalbe							*/
/* 功  能  輸出常量定值表							*/
/* 說  明										    */
/****************************************************/
void  printConstTable(int i)
{
	 /*輸出當前常量定值表*/ 
      ConstDefT  *print = table;
	  printf("%d%s",i,": ");
	  while (print!=NULL)
	  {
		  printf("(");
		  if (print->variable->Attr.addr.dataLevel!=-1)
			    printf(print->variable->Attr.addr.name);
		  else
		  {printf("temp");
		          printf("%d",print->variable->Attr.addr.dataOff);
		  }
	      printf(",");
		  printf("%d",print->constValue);
		  printf(")");
		  printf(" ");

		  print=print->next;
	  }
      printf("\n");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉影视欧美成人| 午夜精品福利在线| 欧美久久一区二区| 国产成人精品免费在线| 亚洲电影第三页| 国产精品私人自拍| 欧美va亚洲va国产综合| 色视频欧美一区二区三区| 国产曰批免费观看久久久| 亚洲chinese男男1069| 国产精品女主播av| 精品国产一区二区在线观看| 在线免费观看一区| jlzzjlzz欧美大全| 国产精品一区一区| 久久精工是国产品牌吗| 午夜伦欧美伦电影理论片| 亚洲免费观看高清完整版在线 | 久久99精品国产| 亚洲已满18点击进入久久| 欧美综合天天夜夜久久| 国内精品在线播放| 日韩av二区在线播放| 亚洲精选一二三| 中文字幕综合网| 国产精品天干天干在线综合| 久久综合给合久久狠狠狠97色69| 欧美日韩亚洲综合一区| 色综合色狠狠天天综合色| 岛国精品在线播放| 高清shemale亚洲人妖| 精品一区中文字幕| 蜜臀精品一区二区三区在线观看| 亚洲成人黄色小说| 午夜私人影院久久久久| 亚洲在线一区二区三区| 亚洲免费观看高清完整版在线观看熊 | 亚洲一区二区三区四区的| 日韩伦理av电影| 成人免费在线播放视频| 中文字幕亚洲精品在线观看| 国产精品色噜噜| 亚洲欧洲av另类| 日韩美女视频一区二区| 亚洲免费av观看| 亚洲一本大道在线| 日韩综合小视频| 日本一区中文字幕| 国产最新精品精品你懂的| 国产毛片精品视频| 国产激情视频一区二区三区欧美| 成人中文字幕电影| 成人av在线播放网址| 9久草视频在线视频精品| 色综合中文字幕| 欧美曰成人黄网| 91精品国产综合久久香蕉的特点| 日韩一区二区三区四区| 国产日韩亚洲欧美综合| **性色生活片久久毛片| 一区二区三区不卡在线观看| 亚洲国产精品人人做人人爽| 蜜臀av性久久久久蜜臀aⅴ四虎 | 色综合久久中文字幕| 欧美综合视频在线观看| 欧美一区二区成人| 国产亚洲一二三区| 亚洲黄网站在线观看| 免费观看30秒视频久久| 国产精品1区二区.| 91国产丝袜在线播放| 在线成人小视频| 国产亚洲成年网址在线观看| 一区二区在线观看免费视频播放| 天天做天天摸天天爽国产一区| 九九九精品视频| 91丝袜美女网| 欧美一区二区三区在线| 国产精品青草久久| 三级在线观看一区二区| 成人精品免费视频| 91精品国产高清一区二区三区 | 五月婷婷另类国产| 国产目拍亚洲精品99久久精品| av亚洲精华国产精华精| 欧美性色欧美a在线播放| 精品久久久久久综合日本欧美| 中文字幕一区在线观看| 日韩国产欧美在线观看| 成人午夜精品在线| 日韩亚洲欧美一区二区三区| 国产精品欧美一级免费| 日韩成人一级片| 91丝袜国产在线播放| 2024国产精品视频| 亚洲va国产va欧美va观看| 国产成人精品一区二| 91麻豆精品国产91久久久久 | 18涩涩午夜精品.www| 蜜臀a∨国产成人精品| 91在线视频播放地址| 精品剧情在线观看| 五月婷婷色综合| 色国产综合视频| 国产肉丝袜一区二区| 免费在线看一区| 在线欧美一区二区| 最新欧美精品一区二区三区| 国产麻豆精品久久一二三| 在线不卡免费欧美| 一区二区三区美女视频| 粉嫩蜜臀av国产精品网站| 日韩欧美一区二区久久婷婷| 性欧美疯狂xxxxbbbb| 色综合天天狠狠| 中文字幕国产精品一区二区| 国产综合色在线| 精品欧美一区二区三区精品久久| 丝袜美腿亚洲色图| 欧美日韩国产高清一区二区| 亚洲人xxxx| 99在线精品视频| 国产区在线观看成人精品| 久久99久久99小草精品免视看| 欧美日韩三级在线| 亚洲成精国产精品女| 欧美亚洲一区二区在线| 亚洲综合一二区| 欧美日韩专区在线| 夜夜嗨av一区二区三区中文字幕 | 国产精品久久久久久久第一福利| 韩国视频一区二区| 久久伊人中文字幕| 国产一区二区毛片| 久久精品视频在线看| 国产麻豆精品在线| 国产精品天干天干在观线| 成人av电影在线| 综合欧美亚洲日本| 91黄色在线观看| 午夜精品久久久久久久久久| 欧美日韩大陆一区二区| 天天综合网天天综合色| 欧美一区二区久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩视频免费观看高清完整版在线观看| 日韩激情视频在线观看| 日韩一级二级三级| 国产毛片一区二区| 国产精品传媒在线| 在线观看www91| 午夜精品久久久久久不卡8050| 91精品免费观看| 狠狠色狠狠色综合系列| 国产精品麻豆99久久久久久| 91视频在线看| 午夜欧美在线一二页| 精品国产乱子伦一区| 成人午夜视频网站| 亚洲制服丝袜av| 欧美电影免费观看高清完整版在线| 激情图片小说一区| 成人欧美一区二区三区| 欧美日韩一区二区三区在线| 免费成人在线影院| 欧美激情一区二区三区| 在线亚洲精品福利网址导航| 日本中文字幕不卡| 国产午夜亚洲精品理论片色戒| 91丨porny丨蝌蚪视频| 日本va欧美va瓶| 亚洲国产精品高清| 欧美日韩一区视频| 国产一区美女在线| 亚洲尤物在线视频观看| 欧美成人乱码一区二区三区| 成人激情黄色小说| 日本中文字幕一区二区有限公司| 欧美国产日韩a欧美在线观看 | 色成年激情久久综合| 久久99精品久久久久久国产越南| 国产精品久久三| 91精品国产乱| 色综合天天综合网天天看片| 美腿丝袜亚洲三区| 亚洲欧美另类图片小说| 欧美精品一区在线观看| 色成人在线视频| 国产成人自拍高清视频在线免费播放| 亚洲一区视频在线| 欧美激情一区二区三区全黄 | 26uuu亚洲综合色| 欧美日韩免费电影| 成人黄页在线观看| 捆绑紧缚一区二区三区视频| 一区二区三区影院| 国产日韩亚洲欧美综合| 日韩精品一区二区三区视频在线观看| 色偷偷88欧美精品久久久| 国产一区二区三区久久久 |