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

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

?? analyze.cpp

?? 編譯原理學習使用的代碼 內容有從詞法分析到中間代碼生成的代碼 并且含有注釋
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*         不是該記錄類型中的域成員。                       */
/************************************************************/
TypeIR * recordVar(TreeNode * t)
{
	int present = FALSE;
	int result = TRUE;
	SymbTable * entry = NULL;

	TypeIR * Eptr0 = NULL;
	TypeIR * Eptr1 = NULL;
	TypeIR * Eptr = NULL;
	fieldchain * currentP = NULL;
	
	
	/*在符號表中查找此標識符*/
	present = FindEntry(t->name[0],&entry);				
	t->table[0] = entry;	
	/*找到*/
	if(present!=FALSE)
	{
		/*Var0不是變量*/
		if (FindAttr(entry).kind!=varKind)
		{
			ErrorPrompt(t->lineno,t->name[0],"is not variable error!\n");				
			Eptr = NULL;
		}
		else/*Var0不是記錄類型變量*/
			if(FindAttr(entry).idtype->kind!=recordTy)
			{
				ErrorPrompt(t->lineno,t->name[0],"is not record variable error !\n");
				Eptr = NULL;
			}
			else/*檢查id是否是合法域名*/
			{
				Eptr0 = entry->attrIR.idtype;
				currentP = Eptr0->More.body;
				while((currentP!=NULL)&&(result!=FALSE))
				{
					result = strcmp(t->child[0]->name[0],currentP->id);
					/*如果相等*/
					if(result==FALSE)
						Eptr = currentP->UnitType;
					else
						currentP = currentP->Next;
				}	 
				if(currentP==NULL)
					if(result!=FALSE)
					{
						ErrorPrompt(t->child[0]->lineno,t->child[0]->name[0],
						"is not field type!\n");
						Eptr = NULL;
					}
				else/*如果id是數組變量*/
				if(t->child[0]->child[0]!=NULL)
					Eptr = arrayVar(t->child[0]);
			}
	}
	else/*標識符無聲明*/
	    ErrorPrompt(t->lineno,t->name[0],"is not declarations!\n");
	return Eptr;
}


/************************************************************/
/* 函數名  assignstatement                                  */
/* 功  能  該函數處理賦值語句分析                           */
/* 說  明  賦值語句的語義分析的重點是檢查賦值號兩端分量的類 */
/*         型相容性。    	                                */
/************************************************************/
void assignstatement(TreeNode * t)
{
	SymbTable * entry = NULL;
	
	int present = FALSE;
	TypeIR * ptr = NULL;
	TypeIR * Eptr = NULL;
	
	TreeNode * child1 = NULL;
	TreeNode * child2 = NULL;

	child1 = t->child[0];
	child2 = t->child[1];

	if(child1->child[0]==NULL)
	{	
		/*在符號表中查找此標識符*/
		present = FindEntry(child1->name[0],&entry);
		
		if(present!=FALSE)
		{   /*id不是變量*/
			if (FindAttr(entry).kind!=varKind)
			{
				ErrorPrompt(child1->lineno,child1->name[0],"is not variable error!\n");				
				Eptr = NULL;
			}
			else
			{
				Eptr = entry->attrIR.idtype;
				child1->table[0] = entry;
			}
		} 
		else /*標識符無聲明*/
			ErrorPrompt(child1->lineno,child1->name[0],"is not declarations!\n");
	}
	else/*Var0[E]的情形*/
	{	if(child1->attr.ExpAttr.varkind==ArrayMembV)
			Eptr = arrayVar(child1);	
		else /*Var0.id的情形*/
			if(child1->attr.ExpAttr.varkind==FieldMembV)
				Eptr = recordVar(child1);
	}
	if(Eptr != NULL)
	{	
		if((t->nodekind==StmtK)&&(t->kind.stmt==AssignK))
		{
			/*檢查是不是賦值號兩側 類型等價*/
			ptr = Expr(child2,NULL);
			if (!Compat(ptr,Eptr)) 
				ErrorPrompt(t->lineno,"","ass_expression error!\n");
		}
		/*賦值語句中不能出現函數調用*/
	}
}

/************************************************************/
/* 函數名  callstatement                                    */
/* 功  能  該函數處理函數調用語句分析                       */
/* 說  明  函數調用語句的語義分析首先檢查符號表求出其屬性中 */
/*         的Param部分(形參符號表項地址表),并用它檢查形參*/
/*         和實參之間的對應關系是否正確。                   */
/************************************************************/
void callstatement(TreeNode * t)
{
	AccessKind  Ekind;
	int present = FALSE;
	SymbTable * entry=NULL;
	TreeNode * p = NULL;

	/*用id檢查整個符號表*/
	present = FindEntry(t->child[0]->name[0],&entry);		
    t->child[0]->table[0] = entry;

	/*未查到表示函數無聲明*/
	if (present==FALSE)                     
	{
		ErrorPrompt(t->lineno,t->child[0]->name[0],"function is not declarationed!\n");  
	}
    else 
		/*id不是函數名*/
		if (FindAttr(entry).kind!=procKind)     
			ErrorPrompt(t->lineno,t->name[0],"is not function name!\n");
		else/*形實參匹配*/
		{
			p = t->child[1];
			/*paramP指向形參符號表的表頭*/
			ParamTable * paramP = FindAttr(entry).More.ProcAttr.param;	
			while((p!=NULL)&&(paramP!=NULL))
			{
				SymbTable  * paraEntry = paramP->entry;
				TypeIR  * Etp = Expr(p,&Ekind);/*實參*/
				/*參數類別不匹配*/
				if ((FindAttr(paraEntry).More.VarAttr.access==indir)&&(Ekind==dir))
					ErrorPrompt(p->lineno,"","param kind is not match!\n");  
				else 
					/*參數類型不匹配*/
					if((FindAttr(paraEntry).idtype)!=Etp)
						ErrorPrompt(p->lineno,"","param type is not match!\n");
				p = p->sibling;
				paramP = paramP->next;
			}
			/*參數個數不匹配*/
			if ((p!=NULL)||(paramP!=NULL))
				ErrorPrompt(t->child[1]->lineno,"","param num is not match!\n"); 
	}
}	


/************************************************************/
/* 函數名  ifstatement                                      */
/* 功  能  該函數處理條件語句分析                           */
/* 說  明  分析語法樹的三個兒子節點                         */
/************************************************************/
void ifstatment(TreeNode * t )
{
	AccessKind * Ekind = NULL;
	TypeIR *  Etp = Expr(t->child[0],Ekind);
	if(Etp!=NULL)
		/*處理條件表達式*/
		if  (Etp->kind!= boolTy)
			ErrorPrompt(t->lineno,"","condition expressrion error!\n");  /*邏輯表達式錯誤*/
		else
		{
			TreeNode * p = t->child[1];
			/*處理then語句序列部分*/
			while ( p!=NULL)
			{
				statement(p);
				p=p->sibling;
			}
			t = t->child[2];		/*必有三兒子*/
			/*處理else語句不分*/
			while ( t!=NULL)
			{
				statement(t);	
				t=t->sibling;
			}
		}
}


/************************************************************/
/* 函數名  whilestatement                                   */
/* 功  能  該函數處理循環語句分析                           */
/* 說  明  分析語法樹的兩個兒子節點                         */
/************************************************************/
void whilestatement(TreeNode * t)
{
	TypeIR *  Etp = Expr(t->child[0],NULL);
	if  (Etp!=NULL)
		/*處理條件表達式部分*/
		if  (Etp->kind!= boolTy)
			ErrorPrompt(t->lineno,"","condition expression error!\n");  /*邏輯表達式錯誤*/
		else
		{
			t = t->child[1];
			/*處理循環部分*/
			while ( t!=NULL)
			{
				statement(t);
				t=t->sibling;
			}
		}
}


/************************************************************/
/* 函數名  readstatement                                    */
/* 功  能  該函數處理輸入語句分析                           */
/* 說  明  分析語法樹節點,檢查變量有無聲明和是否為變量錯誤 */
/************************************************************/
void readstatement (TreeNode * t)
{
	SymbTable * entry=NULL;
	int present = FALSE;

	/*用id檢查整個符號表*/
	present = FindEntry(t->name[0],&entry);		
	t->table[0] = entry;

	/*未查到表示變量無聲明*/
	if (present==FALSE) 
		ErrorPrompt(t->lineno,t->name[0], " is not declarationed!\n");		
	else
		/*不是變量標識符錯誤*/
		if(entry->attrIR.kind!=varKind)
			ErrorPrompt(t->lineno,t->name[0],"is not var name!\n ");
}

/************************************************************/
/* 函數名  writestatement                                   */
/* 功  能  該函數處理輸出語句分析                           */
/* 說  明  分析輸出語句中的表達式是否合法                   */
/************************************************************/
void writestatement(TreeNode * t )
{
	TypeIR * Etp = Expr (t->child[0],NULL);	
	if(Etp!=NULL)
		/*如果表達式類型為bool類型,報錯*/
		if (Etp->kind==boolTy)
			ErrorPrompt(t->lineno,"","exprssion type error!");
}


/************************************************************/
/* 函數名  returnstatement                                  */
/* 功  能  該函數處理函數返回語句分析                       */
/* 說  明  分析函數返回語句是否在主程序中出現               */
/************************************************************/
void returnstatement(TreeNode * t )
{
	if(Level==0)
		/*如果返回語句出現在主程序中,報錯*/
		ErrorPrompt(t->lineno,"","return statement error!");
}

/************************************************************/
/* 函數名  analyze                                          */
/* 功  能  該函數處理總的語義分析                           */
/* 說  明  對語法樹進行分析                                 */
/************************************************************/
void analyze(TreeNode * t)
{
	SymbTable * entry=  NULL;
	TreeNode * p = NULL;
	TreeNode * pp = t;

	/*創建符號表*/
	CreatTable();
	
	/*調用類型內部表示初始化函數*/
	initialize();

	/*語法樹的聲明節點*/
	p=t->child[1];
    while (p!=NULL) 
    {
	   switch ( p->nodekind ) 
	   { case  TypeK:     TypeDecPart(p->child[0]);  break ;
		 case  VarK :     VarDecPart(p->child[0]);   break ;
         case  ProcDecK:  procDecPart(p);        break ;
		 default:
			ErrorPrompt(p->lineno,"","no this node kind in syntax tree!");
			break;
       }
       p = p->sibling ;/*循環處理*/
	}
	
	/*程序體*/
	t = t->child[2];
	if(t->nodekind==StmLK)
		Body(t);
	
	/*撤銷符號表*/
	if (Level!=-1)
	     DestroyTable();
	
	/*輸出語義錯誤*/
	if(Error==TRUE)
		fprintf(listing,"\nanalyze error:\n");
	/*如果無錯誤,則輸出提示信息*/
	else
		fprintf(listing,"\n........ no error!\n");	
}


		

	
		
	
	


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产aⅴ精品一区二区三区色成熟| 91精品国产一区二区三区香蕉| 欧美激情中文字幕| 日本亚洲视频在线| 精品国产污网站| 免费成人小视频| 久久久777精品电影网影网 | 免费观看日韩电影| 日韩三级视频中文字幕| 国产乱码精品一区二区三区忘忧草| 久久久久久99久久久精品网站| 韩国理伦片一区二区三区在线播放| 日韩美女一区二区三区| 日韩电影免费在线看| 久久亚洲一区二区三区四区| 久99久精品视频免费观看| 国产亚洲欧美一区在线观看| 粉嫩久久99精品久久久久久夜| 国产精品免费视频观看| 欧美浪妇xxxx高跟鞋交| 国产一区二区三区| 亚洲午夜一区二区| 久久精品视频一区二区| 91视频国产观看| 偷拍亚洲欧洲综合| 国产精品久久久久毛片软件| 欧美性大战xxxxx久久久| 国产一区二区女| 亚洲成人在线网站| 久久久久久久一区| 5566中文字幕一区二区电影| jlzzjlzz欧美大全| 国产suv精品一区二区6| 老司机精品视频导航| 亚洲最新在线观看| 国产精品久久久久久久第一福利| 日韩一区和二区| 在线看国产一区二区| 99精品国产99久久久久久白柏| 国产综合一区二区| 亚洲风情在线资源站| 一区二区三区成人| 日韩一区日韩二区| 中文字幕一区二区日韩精品绯色| 久久久久国产一区二区三区四区| 日韩午夜精品视频| 日韩欧美视频在线| 91精品国产黑色紧身裤美女| 国产不卡在线视频| 日本成人中文字幕在线视频 | av毛片久久久久**hd| 午夜婷婷国产麻豆精品| 一区二区三区毛片| 国产精品不卡在线| 精品久久一区二区| eeuss鲁片一区二区三区在线看| 蜜臀久久99精品久久久久久9| 久88久久88久久久| 一本一道波多野结衣一区二区| 成人精品国产福利| 久久se精品一区二区| 日韩理论片网站| 久久久久久久久久看片| 精品国产乱码久久久久久牛牛 | 午夜精品久久久久影视| 精品女同一区二区| 成人免费在线观看入口| av一区二区久久| 亚洲视频在线一区观看| www.亚洲免费av| 亚洲黄色在线视频| 一本久道久久综合中文字幕| 亚洲男人天堂av网| 91老司机福利 在线| 亚洲美腿欧美偷拍| 欧美福利一区二区| 秋霞成人午夜伦在线观看| 在线成人免费观看| 久久精品999| 中文字幕一区二区在线观看 | 欧美老肥妇做.爰bbww视频| 日本系列欧美系列| 国产视频在线观看一区二区三区| 毛片基地黄久久久久久天堂| 久久九九影视网| 欧美日韩视频在线第一区 | 国产乱国产乱300精品| 亚洲日本免费电影| 91精品国产色综合久久| 成人av在线播放网站| 亚洲第四色夜色| 亚洲国产精品二十页| 欧美三级电影在线看| 国产伦理精品不卡| 亚洲成人中文在线| 国产精品全国免费观看高清| 欧美日韩在线亚洲一区蜜芽| 国产精品白丝av| 日本aⅴ免费视频一区二区三区 | 制服丝袜一区二区三区| 国产精品一二三| 青青草国产精品97视觉盛宴| 最新日韩在线视频| 国产视频一区在线观看| 欧美一区国产二区| 一本到不卡免费一区二区| 九一久久久久久| 日本午夜精品视频在线观看| 亚洲人xxxx| ●精品国产综合乱码久久久久 | 琪琪一区二区三区| 一区二区成人在线| 国产精品人人做人人爽人人添| 欧美视频中文字幕| 91久久人澡人人添人人爽欧美| 国产一区91精品张津瑜| 另类综合日韩欧美亚洲| 午夜成人免费视频| 亚洲国产视频a| 视频一区二区欧美| 日本视频中文字幕一区二区三区 | 亚洲人成精品久久久久| 中文字幕视频一区二区三区久| 国产欧美一区二区在线观看| 久久综合色一综合色88| 久久午夜羞羞影院免费观看| 欧美mv和日韩mv的网站| 久久久www免费人成精品| 国产欧美日韩视频在线观看| 成人欧美一区二区三区黑人麻豆| 精品国产乱码久久久久久老虎| 精品国精品国产| 久久女同精品一区二区| 国产精品午夜免费| 婷婷成人综合网| 久色婷婷小香蕉久久| 成人精品视频.| 欧美中文字幕一区| 欧美一区二区三区男人的天堂| 日韩欧美亚洲一区二区| 国产精品你懂的在线| 亚洲福利视频一区| 国产a区久久久| 欧美日韩情趣电影| 中文字幕亚洲一区二区va在线| 午夜精品久久久久久不卡8050| 极品少妇xxxx偷拍精品少妇| 成人精品视频.| 久久久久久久久蜜桃| 亚洲小说春色综合另类电影| 狠狠色狠狠色综合系列| 欧美日韩激情在线| 亚洲欧美日韩国产成人精品影院| 久久se精品一区精品二区| 欧美日韩中文字幕一区二区| 国产欧美一区二区精品仙草咪| 亚洲午夜久久久久久久久电影院| 国产精品一区二区三区网站| 欧美日韩在线播放一区| 亚洲美女少妇撒尿| caoporn国产精品| 久久久久国产精品麻豆ai换脸| 日日摸夜夜添夜夜添亚洲女人| 欧美在线播放高清精品| 精品一区二区在线播放| 91精品国产乱| 免费成人你懂的| 欧美一区二区网站| 日日噜噜夜夜狠狠视频欧美人 | 欧美一区二区精品在线| 亚洲国产一区二区视频| 欧美性淫爽ww久久久久无| 亚洲人成亚洲人成在线观看图片| 91网站在线播放| 中文字幕日韩一区二区| 欧美在线视频全部完| 五月天视频一区| 欧美一区二区三区爱爱| 国产美女视频一区| 亚洲欧洲日韩综合一区二区| 91国产免费观看| 天天色 色综合| 久久亚洲捆绑美女| 91色综合久久久久婷婷| 亚洲午夜在线视频| 欧美成人精精品一区二区频| 国产一区二区伦理片| 中文字幕 久热精品 视频在线 | 亚洲女子a中天字幕| 精品1区2区3区| 国产69精品久久久久777| 专区另类欧美日韩| 91麻豆精品国产91久久久久久久久 | 精品一二线国产| 亚洲欧美激情在线| 制服丝袜激情欧洲亚洲| 成人污污视频在线观看| 亚洲国产成人porn| 国产精品一区2区| 亚洲精品日韩一|