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

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

?? symbtable.cpp

?? 編譯原理學習使用的代碼 內容有從詞法分析到中間代碼生成的代碼 并且含有注釋
?? 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一区二区三区免费野_久草精品视频
性做久久久久久免费观看 | 91精品国产一区二区三区香蕉| 欧美三级电影在线看| 精品国一区二区三区| 亚洲视频电影在线| 精品在线观看视频| 欧美亚洲尤物久久| 日本一区二区电影| 日本va欧美va精品发布| 91色|porny| 久久精品欧美日韩| 奇米色一区二区| 欧美日韩亚洲丝袜制服| 亚洲欧美中日韩| 懂色av一区二区夜夜嗨| 欧美成人一级视频| 亚洲成在人线在线播放| 91在线视频18| 欧美激情在线看| 国产成人在线电影| 日韩免费电影网站| 免费高清在线一区| 91麻豆精品国产无毒不卡在线观看| 亚洲欧洲av在线| av一区二区三区四区| 国产日韩欧美电影| 国产成人精品亚洲777人妖| 日韩一区二区在线观看视频 | 91蝌蚪国产九色| 国产精品午夜电影| 国产高清一区日本| 国产视频一区二区在线观看| 国内成+人亚洲+欧美+综合在线 | 色综合久久九月婷婷色综合| 国产精品天美传媒沈樵| 成人精品高清在线| 国产精品国产成人国产三级| 不卡的av在线| 亚洲日本在线天堂| 在线中文字幕一区| 亚洲一区二区三区自拍| 欧洲av一区二区嗯嗯嗯啊| 亚洲综合网站在线观看| 欧美日韩一卡二卡| 蜜臀精品久久久久久蜜臀| 日韩一级二级三级| 国产一区二区三区在线看麻豆| 久久先锋影音av鲁色资源网| 国产成人av电影在线观看| 国产精品久久久久久久久久免费看 | 日韩情涩欧美日韩视频| 久久国产生活片100| 久久久久久亚洲综合| 国产91精品精华液一区二区三区| 国产精品不卡在线| 欧美日韩精品欧美日韩精品| 日韩和欧美一区二区三区| 精品国产露脸精彩对白| 成人综合在线网站| 亚洲影院久久精品| 精品国产99国产精品| 成人在线视频首页| 亚洲综合精品久久| 精品日韩在线观看| 97精品电影院| 日韩精品福利网| 国产三级精品视频| 欧美日韩视频在线一区二区| 美女尤物国产一区| 亚洲精品美国一| 久久一区二区三区国产精品| 99国产精品视频免费观看| 亚洲第一激情av| 中文天堂在线一区| 欧美日本一区二区| 国产**成人网毛片九色| 亚洲午夜免费视频| 欧美激情自拍偷拍| 日韩欧美国产不卡| 在线观看免费视频综合| 国内外成人在线| 午夜欧美2019年伦理| 国产午夜三级一区二区三| 欧美在线观看一二区| 国产成人啪午夜精品网站男同| 亚洲伊人伊色伊影伊综合网| 久久婷婷久久一区二区三区| 在线观看一区二区视频| 国产精品456露脸| 日本aⅴ精品一区二区三区| 亚洲欧洲日韩在线| 久久女同互慰一区二区三区| 欧美二区乱c少妇| 91成人网在线| 色香蕉久久蜜桃| 高清beeg欧美| 国产一区二区三区综合| 久久精品国产久精国产爱| 亚洲高清在线精品| 亚洲男帅同性gay1069| 亚洲国产精品精华液2区45| 日韩欧美中文字幕公布| 欧美性受xxxx黑人xyx| 色系网站成人免费| av电影在线观看不卡| 国产乱码字幕精品高清av| 秋霞影院一区二区| 日韩精品一二三区| 亚洲 欧美综合在线网络| 亚洲黄一区二区三区| 亚洲欧洲一区二区三区| 国产精品成人免费在线| 中文字幕av不卡| 中文字幕免费不卡| 国产欧美视频一区二区三区| 亚洲精品一线二线三线| 精品国产一区二区精华| 日韩精品一区二区三区中文精品| 日韩一区二区影院| 欧美大度的电影原声| 91精品国产色综合久久不卡蜜臀| 欧美高清hd18日本| 日韩视频123| 久久先锋影音av| 国产欧美1区2区3区| 国产精品美女一区二区在线观看| 国产清纯美女被跳蛋高潮一区二区久久w| 精品国产制服丝袜高跟| 国产日产亚洲精品系列| 中文字幕在线不卡一区 | 日韩中文字幕av电影| 日韩精品亚洲一区| 美国av一区二区| 激情深爱一区二区| 国产精品一线二线三线| 粉嫩一区二区三区在线看| 成人高清视频免费观看| 色综合一区二区三区| 在线观看免费成人| 日韩精品一区在线| 中文字幕的久久| 亚洲欧美一区二区久久 | 国内一区二区在线| 不卡的av在线播放| 欧美日韩一区二区三区高清| 日韩欧美成人午夜| 国产精品久久久久久久久晋中| 夜色激情一区二区| 免费av网站大全久久| 国产丶欧美丶日本不卡视频| 99re热视频这里只精品| 精品视频一区 二区 三区| 精品噜噜噜噜久久久久久久久试看| 久久久亚洲欧洲日产国码αv| 一区免费观看视频| 蓝色福利精品导航| 9色porny自拍视频一区二区| 欧美一区二区三区免费视频| 国产精品高潮呻吟| 日本中文在线一区| 成人精品国产一区二区4080| 欧美狂野另类xxxxoooo| 国产精品三级av在线播放| 亚洲不卡av一区二区三区| 国内久久精品视频| 欧美性色欧美a在线播放| 精品国产不卡一区二区三区| 一区二区三区四区高清精品免费观看| 男女男精品视频| 一本色道久久加勒比精品| 欧美mv日韩mv国产网站app| 一区二区三区免费观看| 国产精品亚洲一区二区三区妖精 | 天堂一区二区在线| 成人白浆超碰人人人人| 欧美zozozo| 日韩国产欧美在线视频| av中文字幕不卡| 日韩一区二区在线免费观看| 亚洲一级二级三级在线免费观看| 精品一区二区在线免费观看| 欧美日韩一二三区| 一区二区在线看| eeuss鲁片一区二区三区在线观看| 日韩美女天天操| 日日欢夜夜爽一区| 欧美影视一区在线| 一卡二卡三卡日韩欧美| av电影天堂一区二区在线观看| 精品国产99国产精品| 青青草一区二区三区| 欧亚一区二区三区| 亚洲自拍偷拍av| 91影院在线免费观看| 日本一区二区三区dvd视频在线| 狂野欧美性猛交blacked| 欧美一区二区三区思思人| 日日骚欧美日韩| 欧美精品在线视频| 五月激情综合网|