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

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

?? symbtable.cpp

?? 編譯原理學(xué)習(xí)使用的代碼 內(nèi)容有從詞法分析到中間代碼生成的代碼 并且含有注釋
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************/
/* 文件 symbTable.cpp       	  					*/
/* 說明 類PASCAL語言編譯器符號表處理程序  			*/
/* 主題 編譯器結(jié)構(gòu):原理和實例						*/	
/****************************************************/

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

#include "stdio.h"

#include "string.h"

#include "util.h"



static void printTy(TypeIR * ty);

static void printVar(SymbTable * entry);

static void printProc(SymbTable * entry);

//static void printTab(int tabnum);


/**********************************************************/
/****************   符號表相關(guān)操作   **********************/
/**********************************************************/


/********************************************************/
/* 函數(shù)名  PrintFieldTable								*/
/* 功  能  打印紀(jì)錄類型的域表							*/
/* 說  明										        */
/********************************************************/
void   PrintFieldChain(fieldChain  *currentP)
{ 
  fprintf(listing,"\n--------------Field  chain--------------------\n");
  fieldChain  *t=currentP;
  while (t!=NULL)
  { /*輸出標(biāo)識符名字*/
	fprintf(listing ,"%s:  ",t->id );
	/*輸出標(biāo)識符的類型信息*/
	
	switch(t->UnitType->kind)
	{case  intTy :  fprintf(listing ,"intTy     ");   break;
	 case  charTy:	fprintf(listing ,"charTy    ");  break;
	 case  arrayTy: fprintf(listing ,"arrayTy   "); break;
	 case  recordTy:fprintf(listing ,"recordTy  ");break;
	 default : fprintf(listing ,"error  type!  "); break;
	}
    fprintf(listing ,"off = %d\n",t->off); 
	
  t = t->Next;
  }
}
/********************************************************/
/* 函數(shù)名  PrintOneLayer								*/
/* 功  能  打印符號表的一層								*/
/* 說  明  有符號表打印函數(shù)PrintSymbTable調(diào)用	        */
/********************************************************/
void  PrintOneLayer(int level)
{
  SymbTable  *t= scope[level];
  fprintf(listing,"\n-------SymbTable  in level %d ---------\n",level);

  while (t!=NULL)
  { /*輸出標(biāo)識符名字*/
	fprintf(listing ,"%s:   ",t->idName);
	AttributeIR  *Attrib = &(t->attrIR );
	/*輸出標(biāo)識符的類型信息,過程標(biāo)識符除外*/
	if (Attrib->idtype!=NULL)  /*過程標(biāo)識符*/
	   switch(Attrib->idtype->kind)
		{case  intTy :  fprintf(listing ,"intTy  ");   break;
		 case  charTy:	fprintf(listing ,"charTy  ");  break;
		 case  arrayTy: fprintf(listing ,"arrayTy  "); break;
		 case  recordTy:fprintf(listing ,"recordTy  ");break;
		 default : fprintf(listing ,"error  type!  "); break;
		}
	/*輸出標(biāo)識符的類別,并根據(jù)不同類型輸出不同其它屬性*/
	switch(Attrib->kind)
	{case  typeKind : 
	      fprintf(listing, "typekind  "); break;
	 case  varKind :
		  fprintf(listing, "varkind  ");
		  fprintf(listing ,"Level = %d  ", Attrib->More.VarAttr.level);
		  fprintf(listing ,"Offset= %d  ", Attrib->More.VarAttr.off);
	      
          switch(Attrib->More.VarAttr.access)
		  { case  dir :  fprintf(listing ,"dir  "); break;
		    case  indir: fprintf(listing ,"indir  ");break;
			default :fprintf(listing ,"errorkind  ");  break;
		  }
          break;
	case  procKind:
		  fprintf(listing ,"funckind   ");
		  fprintf(listing ,"Level= %d  ",Attrib->More.ProcAttr.level);
		  fprintf(listing ,"Noff= %d  ",Attrib->More.ProcAttr.nOff);
		  break;
    default :fprintf(listing ,"error  ");
	}
  fprintf(listing,"\n");
  t = t->next;
  }
}






/********************************************************/
/* 函數(shù)名  PrintSymbTable								*/
/* 功  能  打印生成的符號表								*/
/* 說  明										        */
/********************************************************/
void   PrintSymbTable( )
{ /*層數(shù)從0開始*/
  int  level=0;
  while (scope[level]!=NULL)
  { PrintOneLayer(level);
    level++;
  }
}















/***********************************************************/
/* 函數(shù)名 NewTable                                         */
/* 功  能 創(chuàng)建當(dāng)前空符號表                                 */
/* 說  明 遇到新的無聲明的標(biāo)識符時創(chuàng)建新的空符號表,并返回 */
/*		  指向它的指針							           */
/***********************************************************/
SymbTable * NewTable(void)
{
	/* 內(nèi)存中動態(tài)申請分配單元,返回指向該單元的符號表類型指針t */
	SymbTable * table = (SymbTable *) malloc(sizeof(SymbTable));

	/* 符號表類型指針table為NULL,未能成功分配內(nèi)存單元	*
	 * 將出錯信息及行號lineno寫入列表文件listing		*/
    if (table==NULL)
	{
		fprintf(listing,"Out of memory error !");
		Error = TRUE;
	}
	table->next = NULL;
	
	table->attrIR.kind = typeKind;
	table->attrIR.idtype = NULL;
	table->next = NULL;
	table->attrIR.More.VarAttr.isParam = false;



	/* 符號表類型指針table不是NULL,內(nèi)存單元已經(jīng)成功分配 */
	return table;
}

/**********************************************************/
/*函數(shù)名 CreatTable                                       */
/*功  能 創(chuàng)建空符號表                                     */
/*說  明 當(dāng)進入一個新的局部化單位時,調(diào)用本子程序。功能是:*/
/*		 建立一個空符號表table,層數(shù)加1,偏移初始化為0。  */
/**********************************************************/
void CreatTable(void)
{
	
	Level = Level +1;                 /*層數(shù)加一*/
	scope[Level] = NULL;	          /*申請了新的一層scope棧的空間*/
	Off = INITOFF;			          /*偏移初始化*/
}

//void printTable();
/***********************************************************/
/* 函數(shù)名 DestroyTable                                     */
/* 功  能 撤銷當(dāng)前符號表                                   */
/* 說  明 退出一個局部化區(qū)時,調(diào)用本子程序。功能是層數(shù)減1,*/
/*		  并撤銷當(dāng)前符號表                                 */
/***********************************************************/
void  DestroyTable()
{
	/*如果語義分析跟蹤標(biāo)志為TURE,則將語法分析產(chǎn)生的符號表顯示出來*/
	/*if ((TraceTable)&&(Error==FALSE))
	{
		printTable();
		getchar();
	}*/
	Level = Level - 1;
}

/***********************************************************/
/* 函數(shù)名 Enter                                            */
/* 功  能 登記標(biāo)識符和屬性                                 */
/* 說  明 Enter的輸入是一個標(biāo)識符id和一個屬性attrib以及    */
/*		  符號表指針entry,而完成的任務(wù)是把給定id和屬性    */
/*        Atrrib登記到符號表中,并返回登記項的地址。在登   */
/*		  記時應(yīng)檢查在本層中是否有重復(fù)聲明錯誤,為此聲明   */
/*        Enter返回類型為bool,如果已有id項則該變量返回1   */
/*        值,否則返回0。                                  */
/***********************************************************/
int  Enter(char * id, AttributeIR * attribP, SymbTable ** entry)
{
	int present = FALSE;
	int result = 1;
	SymbTable * curentry = scope[Level];
	SymbTable * prentry = scope[Level];

	if(scope[Level]==NULL)
	{
		curentry = NewTable();
		scope[Level] = curentry;
	}
	else
	{
		while (curentry != NULL)
		{
			prentry = curentry;
			result = strcmp(id,curentry->idName);
			if(result == 0)
			{
				fprintf(listing,"repetition declaration error !");
				Error = TRUE;
				present = TRUE;
			}
			else
				curentry = (prentry->next);
		}   /*在該層符號表內(nèi)檢查是否有重復(fù)定義錯誤*/
    
		if(present==FALSE)
		{
			curentry = NewTable();
			prentry->next = curentry;
		}
	}
		
		/*將標(biāo)識符名和屬性登記到表中*/
		strcpy(curentry->idName,id);

		curentry->attrIR.idtype = attribP->idtype;
		curentry->attrIR.kind = attribP->kind;
		switch( attribP->kind)
		{ 
		  case  typeKind : break;
		  case  varKind : 
			   curentry->attrIR.More.VarAttr.level =attribP->More.VarAttr.level;
			   curentry->attrIR.More.VarAttr.off=attribP->More.VarAttr.off;
			   curentry->attrIR.More.VarAttr.access=attribP->More.VarAttr.access;
			   break;
		  case  procKind :
			   curentry->attrIR.More.ProcAttr.level=attribP->More.ProcAttr.level;
			   curentry->attrIR.More.ProcAttr.param=attribP->More.ProcAttr.param;
			   break;
		  default :break;
		}
		(* entry) = curentry;
	
	return present;
}

/***********************************************************/
/* 函數(shù)名 FindEntry                                        */
/* 功  能 尋找表項地址                                     */
/* 說  明 對給定的標(biāo)識符id (id為字符串類型) 求出其表項地址,*/
/*        并在entry的實參單元中返回表項地址。如果符號表里沒*/
/*		  有所找的id項,則返回present為0,則函數(shù)中的參數(shù)entry*/
/*        賦值為指向該表項地址的指針;否則,present賦值為1。 */
/***********************************************************/
int FindEntry(char * id , SymbTable ** entry)
{
	int present = FALSE;    /*返回值*/
	int result = 1;         /*標(biāo)識符名字比較結(jié)果*/
	int lev = Level;		/*臨時記錄層數(shù)的變量*/

	SymbTable *  findentry = scope[lev];

	while((lev!=-1)&&(present!=TRUE))
	{
		while ((findentry!=NULL)&&(present!=TRUE))
		{
			result = strcmp(id,findentry->idName);
			if ( result==0 )
				present = TRUE;    
							/*如果標(biāo)識符名字相同,則返回TRUE*/
			else 
				findentry = findentry->next;
							/*如果沒找到,則繼續(xù)鏈表中的查找*/
		}
		if(present!=TRUE)
		{
			lev = lev-1;
			findentry = scope[lev];
			
		}
	}/*如果在本層中沒有查到,則轉(zhuǎn)到上一個局部化區(qū)域中繼續(xù)查找*/
    if (present!=TRUE)
	{
		(* entry) = NULL;
	}
	else 
		(* entry) = findentry;

	return present;
}


/***********************************************************/
/* 函數(shù)名 FindAtrr                                         */
/* 功  能 屬性查詢                                         */
/* 說  明 對給定表項地址,求出其屬性值,并將其返回給Atrrib */
/*        的實參單元中。                                   */
/***********************************************************/
AttributeIR FindAttr(SymbTable * entry)
{
	AttributeIR attrIr = entry->attrIR;
	return attrIr;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲精品一区二区三区不卡| 亚洲综合成人网| 91精品国产综合久久蜜臀| 在线观看网站黄不卡| 91色视频在线| 91免费小视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美日韩国产高清一区| 欧美写真视频网站| 欧美蜜桃一区二区三区| 欧美疯狂做受xxxx富婆| 91精品中文字幕一区二区三区| 91福利在线看| 欧美老人xxxx18| 777xxx欧美| 日韩欧美中文字幕制服| 欧美精品一区二区三区久久久| 精品国产sm最大网站| 久久人人爽人人爽| 中文字幕av一区二区三区免费看| 国产精品伦理一区二区| 亚洲欧美偷拍卡通变态| 亚洲一线二线三线视频| 爽爽淫人综合网网站 | 成人毛片视频在线观看| 成人性生交大片免费看中文 | 狠狠色丁香久久婷婷综| 国产一区二区三区蝌蚪| 成人综合在线视频| 91黄色免费观看| 91精品国产手机| 久久午夜国产精品| 中文字幕制服丝袜一区二区三区| 一区二区三区**美女毛片| 午夜成人在线视频| 国产真实乱子伦精品视频| 成人午夜电影久久影院| 欧美在线视频日韩| 日韩精品一区二区三区swag | 色噜噜久久综合| 欧美乱妇15p| 国产视频一区在线播放| 中文字幕一区二区三区在线观看| 亚洲午夜久久久久久久久电影网| 老司机精品视频导航| 国产激情精品久久久第一区二区 | 国产成人午夜精品5599| 色综合色狠狠天天综合色| 欧美一区二视频| 欧美国产精品一区| 五月婷婷综合网| 成熟亚洲日本毛茸茸凸凹| 欧美日本精品一区二区三区| 久久久久久久精| 亚洲在线视频免费观看| 国产一区二区三区| 欧美少妇xxx| 国产性做久久久久久| 亚洲午夜电影在线| 国产成人无遮挡在线视频| 在线亚洲欧美专区二区| 精品国产乱码久久久久久久| 亚洲美女免费在线| 久久99国产精品尤物| 91久久国产综合久久| 精品国产一区二区精华| 一卡二卡欧美日韩| 国产成人免费xxxxxxxx| 欧美精品九九99久久| 国产精品少妇自拍| 老司机精品视频一区二区三区| 日本乱码高清不卡字幕| 久久久不卡影院| 日韩电影在线一区| 在线精品视频免费播放| 国产精品毛片无遮挡高清| 久久精品国产亚洲aⅴ| 欧美亚洲丝袜传媒另类| 中文字幕一区二区三区四区| 精品一区二区三区免费| 欧美日韩一区高清| 亚洲女与黑人做爰| 国产福利一区二区三区视频在线 | 亚洲免费观看高清完整| 国产黄色成人av| 欧美刺激午夜性久久久久久久| 国产精品一二三四| 欧美三级日本三级少妇99| 国产精品传媒视频| 成人小视频免费在线观看| 日韩精品一区二区三区在线观看| 午夜精品久久久久影视| 在线观看亚洲一区| 一区二区三区中文在线| www.成人在线| 国产精品―色哟哟| 国产精品538一区二区在线| 精品久久久久久久一区二区蜜臀| 日韩综合小视频| 精品视频一区二区不卡| 亚洲综合激情另类小说区| 91国产精品成人| 亚洲一区在线视频| 色网站国产精品| 亚洲精品视频在线观看免费| 97se亚洲国产综合在线| 国产精品国产三级国产普通话蜜臀| 丰满亚洲少妇av| 欧美激情一区不卡| 成人av电影免费在线播放| 国产精品热久久久久夜色精品三区 | 欧美一区二区啪啪| 日韩国产精品久久| 在线综合+亚洲+欧美中文字幕| 亚洲午夜精品网| 从欧美一区二区三区| 久久99国内精品| 高清国产午夜精品久久久久久| 国产一区欧美日韩| 欧美三级中文字| 亚洲欧洲国产日韩| 蜜臀a∨国产成人精品| 亚洲综合色丁香婷婷六月图片| 亚洲欧美区自拍先锋| 国产三级一区二区三区| 一区二区成人在线视频| 国产亚洲欧美激情| 欧美午夜精品电影| 欧美视频日韩视频在线观看| 国产成a人亚洲精品| 国产一区二区电影| 久久精品国产秦先生| 视频在线观看国产精品| 亚洲福中文字幕伊人影院| 一区二区三区四区视频精品免费| 亚洲激情图片一区| 亚洲国产一区二区视频| 亚洲一区二区三区四区在线 | 欧美极品少妇xxxxⅹ高跟鞋 | 欧美日韩一区二区三区在线| 91丨porny丨蝌蚪视频| 国产黄色成人av| 99v久久综合狠狠综合久久| 亚洲夂夂婷婷色拍ww47| 91精品国产一区二区三区 | 日本精品一区二区三区高清| 亚洲r级在线视频| 欧美精品一区二区久久久| 大胆欧美人体老妇| 亚洲成av人综合在线观看| 精品sm在线观看| 在线观看视频一区| 国产乱子伦视频一区二区三区| 国产精品久久久久影院亚瑟| 91精品国产综合久久精品麻豆| 亚洲黄色小视频| 美日韩一区二区三区| 国产伦精品一区二区三区免费迷| jizzjizzjizz欧美| voyeur盗摄精品| 欧美乱妇15p| 欧美一区二区三区在线观看视频| 在线不卡一区二区| 夜夜揉揉日日人人青青一国产精品| 午夜精品免费在线观看| 麻豆精品在线视频| 在线不卡中文字幕播放| 日韩午夜在线观看| 亚洲成人免费影院| 久久久久久久久蜜桃| 欧美天天综合网| 国产传媒久久文化传媒| 日韩精品电影在线| 综合久久给合久久狠狠狠97色| 日韩欧美一区二区免费| 色哟哟一区二区在线观看| 国内精品久久久久影院色| 亚洲一区二区三区影院| 国产精品久久久久久亚洲毛片| 日韩欧美自拍偷拍| 欧美午夜精品一区二区三区| 成人黄色大片在线观看| 精久久久久久久久久久| 亚洲大尺度视频在线观看| 国产精品久久看| 国产日本欧洲亚洲| 欧美v亚洲v综合ⅴ国产v| 欧美天堂亚洲电影院在线播放| 99久久久无码国产精品| 国产一区二区三区在线观看精品| 日韩精品91亚洲二区在线观看| 亚洲激情在线激情| 亚洲日本免费电影| 国产精品久久毛片a| 国产欧美日韩卡一| 久久久久久麻豆| 精品噜噜噜噜久久久久久久久试看| 欧美裸体一区二区三区| 欧美色精品在线视频| 色偷偷88欧美精品久久久|