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

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

?? symbtable.cpp

?? snl編譯器 開發環境visual c
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
}


/***********************************************************/
/* 函數名 Compat                                           */
/* 功  能 判斷類型是否相容                                 */
/* 說  明 由于TINY語言中只有整數類型、字符類型、數組類型和 */
/*        記錄類型,故類型相容等于類型等價,只需判斷每個結 */
/*        構類型的內部表示產生的指針值是否相同即可。       */
/***********************************************************/
int   Compat(TypeIR * tp1,TypeIR * tp2)
{
	int  present; 
	if (tp1!=tp2)
		present = FALSE;  /*類型不等*/
	else
		present = TRUE;   /*類型等價*/
	return present;
}

/***********************************************************/
/* 函數名 NewTy	                                           */
/* 功  能 創建當前空類型內部表示                           */
/* 說  明 參數為類型,函數返回該類型的內部表示的地址       */
/***********************************************************/
TypeIR * NewTy(TypeKind  kind)
{
	/* 內存中動態申請分配單元,
	   返回指向該單元的類型內部表示類型指針t */
	TypeIR * table = (TypeIR *) malloc(sizeof(TypeIR));

	/* 類型內部表示類型指針table為NULL,
       未能成功分配內存單元將顯示提示錯誤信息*/
    if (table==NULL)
	{
		fprintf(listing,"Out of memory error !");
		Error = TRUE;
	}
	/* 類型內部表示類型指針table不是NULL,內存單元已經成功分配 */
	else
		switch(kind)
		{
			case intTy:
			case charTy:
			case boolTy:
				table->kind = kind;
				table->size = 1;
				break;
			case arrayTy:
				table->kind = arrayTy;
				table->More.ArrayAttr.indexTy = NULL;
				table->More.ArrayAttr.elemTy = NULL;
				break;
			case recordTy:
				table->kind = recordTy;
				table->More.body = NULL;
				break;
		}
	return table;
}

/***********************************************************/
/* 函數名 NewBody                                          */
/* 功  能 創建當前空記錄類型中域的鏈表                     */
/* 說  明 函數返回該類型的新的鏈表的單元地址               */
/***********************************************************/
fieldChain * NewBody(void)
{
	fieldChain * Ptr = (fieldChain *) malloc(sizeof(fieldChain));

	if (Ptr==NULL)
	{
		fprintf(listing,"Out of memory error !");
		Error = TRUE;
	}
	else
	{
		Ptr->Next = NULL;
		Ptr->off = 0;
		Ptr->UnitType = NULL;
	}
	return Ptr;
}

/***********************************************************/
/* 函數名 NewParam	                                       */
/* 功  能 創建當前空形參鏈表                               */
/* 說  明 函數返回新申請的單元地址                         */
/***********************************************************/
ParamTable * NewParam(void)
{
	ParamTable * Ptr = (ParamTable *) malloc(sizeof(ParamTable));

    if (Ptr==NULL)
	{
		fprintf(listing,"Out of memory error !");
		Error = TRUE;
	}
	else
	{
		Ptr->entry = NULL;
		Ptr->next = NULL;
	}
		
	return Ptr;
}

/***********************************************************/
/* 函數名 ErrorPrompt                                      */
/* 功  能 錯誤提示                                         */
/* 說  明 在輸出文件中顯示錯誤提示,并給全局量Error賦值為1 */
/***********************************************************/
void ErrorPrompt(int line,char * name,char * message)
{
	fprintf(listing,">>>Line: %d, %s %s",line,name,message);
	Error = TRUE;
	exit(0);
}


/***********************************************************/
/* 函數名 printTab                                         */
/* 功  能 打印空格                                         */
/* 說  明 在輸出文件中打印個數為參數tabnum的空格           */
/***********************************************************/
void printTab(int tabnum)
{
	for(int i=0;i<tabnum;i++)
		fprintf(listing," ");
}


/***********************************************************/
/* 函數名  printTable                                      */
/* 功  能  把符號表在輸出文件中顯示出來                    */
/* 說  明  分層顯示符號表內容,并在下面顯示該符號的類型內部*/
/*         表示                                            */
/***********************************************************/
/*void printTable(void)
{
	SymbTable * table = NULL;
	TypeIR * tp = NULL;
	
    //fprintf(listing,"\n symble table:\n\n");
   
	/*while*if (scope[Level]!=NULL)
	{
		fprintf(listing,"\n------  level: %d  ------\n",Level);
		table = scope[Level];
		while (table!=NULL)
		{
			switch(table->attrIR.kind)
			{
			case typeKind:
				fprintf(listing,"typeDec:\n");
				printTab(5);
				fprintf(listing,"name->%s;\n",table->idName);
				printTab(5);
				tp = table->attrIR.idtype;
				if(tp!=NULL)
					printTy(tp);
				else
					fprintf(listing,"type error!\n");
				break;
			case varKind:
				fprintf(listing,"varDec:\n");
				printTab(5);
				printVar(table);
				break;
			case procKind:
				fprintf(listing,"procDec:\n");
				printTab(5);
				printProc(table);
				break;
			}
			table = table->next;
		}
	}
}

*/
/***********************************************************/
/* 函數名  printTy                                         */
/* 功  能  把類型內部表示在輸出文件中顯示出來              */
/* 說  明  顯示其類型名,大小,及其他相關信息              */
/***********************************************************/
/*void printTy(TypeIR * ty)
{
	switch(ty->kind)
	{
	case intTy:
		fprintf(listing,"kind->intTy;\n");
		printTab(5);
		fprintf(listing,"size->%d;\n",ty->size);
		break;
	case charTy:
		fprintf(listing,"kind->charTy;\n");
		printTab(5);
		fprintf(listing,"size->%d;\n",ty->size);
		break;
	case arrayTy:
		fprintf(listing,"kind->arrayTy;\n");
		printTab(5);
		fprintf(listing,"size->%d;\n",ty->size);
		printTab(5);
		
		if(ty->More.ArrayAttr.indexTy->kind==intTy)
		    fprintf(listing,"indextype->intTy;\n");
		else
			fprintf(listing,"indextype->charTy;\n");
		
		printTab(5);
		if(ty->More.ArrayAttr.elemTy->kind==intTy)
		    fprintf(listing,"elemtype->intTy;\n");
		else
			fprintf(listing,"elemtype->charTy;\n");
		break;
	case recordTy:
		fprintf(listing,"kind->recordTy;\n");
		printTab(5);
		fprintf(listing,"size->%d;\n",ty->size);
		
		fieldChain * tyBody = ty->More.body;
		fprintf(listing,"\n");
		printTab(3);
		fprintf(listing,"field:\n");
		
		while(tyBody!=NULL)
		{
			printTab(5);
			fprintf(listing,"id->%s;\n",tyBody->id);
			printTab(5);
			fprintf(listing,"unit");
			printTy(tyBody->UnitType);
			printTab(5);
			fprintf(listing,"off->%d;\n",tyBody->off);
			tyBody = tyBody->Next;
			fprintf(listing,"\n");
		}
		break;
	}
}
*/
/***********************************************************/
/* 函數名  printVar                                        */
/* 功  能  把變量內部表示在輸出文件中顯示出來              */
/* 說  明  顯示其變量名稱,偏移,類型名及其他              */
/***********************************************************/
/*void printVar(SymbTable * entry)
{
    fprintf(listing,"name->%s;\n",entry->idName);
				
	AttributeIR  attr = entry->attrIR;
	printTab(5);
	fprintf(listing,"level->%d;\n",attr.More.VarAttr.level);
	printTab(5);
	fprintf(listing,"off->%d;\n",attr.More.VarAttr.off);
	printTab(5);
	if(attr.More.VarAttr.isParam==true)
		fprintf(listing,"param\n");
	else
		fprintf(listing,"not param\n");
	printTab(5);
	if(attr.More.VarAttr.access==dir)
		fprintf(listing,"access->dir;\n");
	else
		fprintf(listing,"access->indir;\n");

	printTab(5);
	fprintf(listing,"\n");
	
	if(entry->attrIR.idtype!=NULL)
    {	
		printTab(5);
		printTy(entry->attrIR.idtype);
    }	
}


*/
/***********************************************************/
/* 函數名  printProc                                       */
/* 功  能  把過程內部表示在輸出文件中顯示出來              */
/* 說  明  顯示過程名,層數                                */
/***********************************************************/
/*void printProc(SymbTable * entry)
{
	
	SymbTable * entry0 = NULL;

	fprintf(listing,"name->%s;\n",entry->idName);
				
	AttributeIR  attr = entry->attrIR;
	printTab(5);
	fprintf(listing,"level->%d;\n",attr.More.ProcAttr.level);
	ParamTable * ptable = attr.More.ProcAttr.param;
	printTab(5);

	fprintf(listing,"noff->%d; \n",entry->attrIR.More.ProcAttr.nOff);
	printTab(5);
	fprintf(listing,"moff->%d; \n",entry->attrIR.More.ProcAttr.mOff);
}

*/		
/********************************************************/
/* 函數名  FindField	  								*/
/* 功  能  查找紀錄的域名								*/
/* 說  明  返回值為是否找到標志,變量Entry返回此域名在  */
/*		   紀錄的域表中的位置.							*/
/********************************************************/
bool  FindField(char * Id , fieldChain  *head,fieldChain  **Entry )
{ 
	bool  present =false;
   /*記錄當前節點*/
	fieldChain *currentItem = head;
   /*從表頭開始查找這個標識符,直到找到或到達表尾*/
   while ((currentItem!=NULL)&&( present==false))
   { 
	  if  (strcmp(currentItem->id, Id )==0) 
	  { present= true;
	    if (Entry!=NULL)
	       (*Entry)=currentItem;
      }
      else  currentItem=currentItem->Next;
   }

  return(present);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品久久久| 久久综合久久99| 91免费观看在线| 972aa.com艺术欧美| 99热这里都是精品| 色综合久久久久久久久久久| 91色在线porny| 色欧美日韩亚洲| 欧美日韩在线播放三区四区| 欧美日韩在线播放三区四区| 欧美电影在线免费观看| 欧美一区二区三区四区久久| 欧美一区二区精品在线| 日韩三级视频中文字幕| 精品国一区二区三区| 成人国产视频在线观看 | 亚洲成人你懂的| 亚洲影视在线播放| 五月天婷婷综合| 蜜桃视频在线观看一区| 激情欧美一区二区三区在线观看| 捆绑调教美女网站视频一区| 国内精品在线播放| 成人黄色网址在线观看| 日本电影亚洲天堂一区| 欧美日韩卡一卡二| 精品国内二区三区| ...av二区三区久久精品| 亚洲与欧洲av电影| 久久99精品视频| 成人精品视频一区二区三区| 日本精品免费观看高清观看| 91精品国产综合久久久久 | 日本在线不卡视频| 国产精品中文字幕欧美| 色先锋资源久久综合| 51精品秘密在线观看| 久久精品视频免费| 亚洲男人的天堂在线aⅴ视频| 午夜不卡在线视频| 国产不卡免费视频| 欧美性猛交xxxx乱大交退制版 | 青青草原综合久久大伊人精品| 国内精品久久久久影院色 | 欧美变态凌虐bdsm| 亚洲视频一区在线| 美国十次综合导航| 91免费视频网| 亚洲精品在线电影| 亚洲精品成人a在线观看| 麻豆成人91精品二区三区| www.66久久| 日韩视频一区二区在线观看| 中文字幕中文字幕中文字幕亚洲无线| 性做久久久久久免费观看| 粉嫩在线一区二区三区视频| 欧美色视频在线| 国产精品网站导航| 免费观看久久久4p| 一本大道av伊人久久综合| 精品国产伦一区二区三区观看方式| 亚洲欧美一区二区三区国产精品 | 亚洲日穴在线视频| 蜜桃精品在线观看| 在线免费不卡视频| 国产欧美日韩视频在线观看| 视频一区欧美精品| 欧美手机在线视频| 国产精品资源网站| 91精品国产免费| 亚洲色图欧美偷拍| 国产一区二区在线电影| 欧美日韩国产一级片| 中文字幕一区二区三| 极品美女销魂一区二区三区| 欧美视频在线播放| 亚洲精选视频在线| 丁香天五香天堂综合| 欧美xxxxxxxx| 日本不卡一区二区三区| 色老汉一区二区三区| 中文字幕中文字幕一区二区| 国产在线不卡一区| 日韩一区二区三区在线观看 | 国产99久久久国产精品潘金 | 免费观看一级欧美片| 在线观看免费成人| 亚洲欧美激情视频在线观看一区二区三区 | 久久亚洲春色中文字幕久久久| 图片区日韩欧美亚洲| 一本色道久久综合狠狠躁的推荐| 欧美高清一级片在线观看| 国产激情精品久久久第一区二区| 精品理论电影在线观看| 久久爱另类一区二区小说| 91精品国产乱| 蜜臂av日日欢夜夜爽一区| 欧美日本在线看| 天堂va蜜桃一区二区三区漫画版| 欧亚洲嫩模精品一区三区| 亚洲精品国产第一综合99久久 | 国产真实精品久久二三区| 91精品欧美福利在线观看| 日韩在线一区二区三区| 欧美久久久久久蜜桃| 日韩avvvv在线播放| 欧美一区二区视频免费观看| 麻豆精品一区二区三区| 欧美tickle裸体挠脚心vk| 久久爱www久久做| 精品不卡在线视频| 国产盗摄一区二区三区| 中文字幕精品综合| 99视频精品在线| 亚洲一区二区在线免费看| 欧美日韩亚洲高清一区二区| 日韩精品1区2区3区| 日韩精品一区二区三区蜜臀| 国产在线精品一区二区三区不卡| 久久久久高清精品| 91亚洲国产成人精品一区二区三 | 国产一二精品视频| 国产精品久久久久久久浪潮网站| 91麻豆免费观看| 亚洲国产精品一区二区久久恐怖片 | 激情av综合网| 久久精品人人做人人爽97| 成人综合婷婷国产精品久久蜜臀| 亚洲国产高清aⅴ视频| 色天天综合色天天久久| 日韩二区三区四区| 国产亚洲综合色| 色综合天天天天做夜夜夜夜做| 亚洲国产精品人人做人人爽| 精品国产免费久久| 不卡一区二区中文字幕| 亚洲国产精品一区二区久久| 26uuu欧美| 色av成人天堂桃色av| 欧美aaa在线| 国产欧美精品一区aⅴ影院| 欧洲视频一区二区| 九九精品一区二区| 综合激情网...| 91精品欧美综合在线观看最新| 国产精品影视在线观看| 亚洲综合色网站| 久久精品无码一区二区三区| 在线欧美小视频| 国产成人精品综合在线观看 | 肉色丝袜一区二区| 国产欧美精品一区二区三区四区| 欧美午夜精品久久久久久孕妇| 久久99最新地址| 亚洲综合激情另类小说区| 日韩精品一区二区在线观看| 91免费国产视频网站| 激情综合网最新| 一区二区视频在线| 精品99一区二区| 欧美性受xxxx| 成人污视频在线观看| 日韩专区在线视频| 亚洲狼人国产精品| 久久久久久一二三区| 欧美日高清视频| 91麻豆视频网站| 国产精品一区二区免费不卡 | 国产精品国产馆在线真实露脸 | 91精品国产麻豆| 日本高清不卡视频| 国产精品一级黄| 日韩国产欧美三级| 樱花影视一区二区| 国产精品久久久久久亚洲毛片| 精品三级av在线| 欧美日韩国产经典色站一区二区三区 | 亚洲精品视频在线看| 亚洲国产精品精华液2区45| 欧美成人性福生活免费看| 欧美日韩一级黄| 色综合久久66| 色综合天天狠狠| 国产精品美女久久久久久久| 88在线观看91蜜桃国自产| 色诱亚洲精品久久久久久| 成人毛片视频在线观看| 国内精品写真在线观看| 蜜臀久久99精品久久久久宅男 | 亚洲日本电影在线| 久久久99精品免费观看不卡| 日韩欧美亚洲国产另类| 欧美日韩国产高清一区二区 | 精品国产区一区| 91麻豆精品国产91久久久久久| 在线观看视频一区二区| 日本丰满少妇一区二区三区| 91麻豆产精品久久久久久| aaa欧美色吧激情视频| 国产91综合网|