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

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

?? parse.cpp

?? snl編譯器 開發環境visual c
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/* 功  能 函數聲明中參數聲明部分的處理函數	        	        	*/
/* 產生式 < paramDecList > ::=  param  paramMore                    */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * paramDecList(void)
{
	TreeNode * t = param();
	TreeNode * p = paramMore();
	if (p!=NULL)
	{
		t->sibling = p;
	}
	return t;
}

/********************************************************************/
/* 函數名 paramMore		 			    	                        */
/* 功  能 函數聲明中參數聲明部分的處理函數	        	        	*/
/* 產生式 < paramMore > ::=  ε | ; paramDecList                     */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * paramMore(void)
{
	TreeNode * t = NULL;
	switch(token.Lex)
	{
	case RPAREN:   break;
	case SEMI:
		match(SEMI);
		t = paramDecList();
		if (t==NULL)
			syntaxError("a param declaration is request!");
		break;
    default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
	return t;
}

/********************************************************************/
/* 函數名 param		 			    	                            */
/* 功  能 函數聲明中參數聲明部分的處理函數	        	        	*/
/* 產生式 < param > ::=  typeName formList | VAR typeName formList  */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * param(void)
{
	TreeNode * t = newDecNode();
	if (t!=NULL)
	{
		t->lineno = line0;
		switch(token.Lex)
		{
	     case INTEGER:
	     case CHAR:
	     case ARRAY:
	     case RECORD:
	     case ID:
	    	 t->attr.ProcAttr.paramt = valparamType;
			 typeName(t);
	    	 formList(t);
			 break;
		 case VAR:
			 match(VAR);
			 t->attr.ProcAttr.paramt = varparamType;
			 typeName(t);
			 formList(t);
			 break;
         default:
			 ReadNextToken(&token);
			 syntaxError("unexpected token is here!");
		     break;
		}
	}
	return t;
}

/********************************************************************/
/* 函數名 formList		 			    	                        */
/* 功  能 函數聲明中參數聲明部分的處理函數	        	        	*/
/* 產生式 < formList > ::=  id  fidMore                             */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
void formList(TreeNode * t)
{
	if (token.Lex==ID)
	{
		strcpy(t->name[(t->idnum)] ,token.Sem);
		t->idnum = (t->idnum) + 1;
		match(ID);
	}
	fidMore(t);   
}
		

/********************************************************************/
/* 函數名 fidMore		 			    	                        */
/* 功  能 函數聲明中參數聲明部分的處理函數	        	        	*/
/* 產生式 < fidMore > ::=   ε |  , formList                        */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
void fidMore(TreeNode * t)
{
	switch(token.Lex)
	{
	case SEMI:
	case RPAREN:   break;
	case COMMA:
		match(COMMA);
		formList(t);
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
}
			
/********************************************************************/
/* 函數名 procDecPart		 			  	                        */
/* 功  能 函數中的聲明部分的處理函數	             	        	*/
/* 產生式 < procDecPart > ::=  declarePart                          */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * procDecPart(void)
{
     TreeNode * t = declarePart();
	 return t;
}

/********************************************************************/
/* 函數名 procBody		 			  	                            */
/* 功  能 函數體部分的處理函數	                    	        	*/
/* 產生式 < procBody > ::=  programBody                             */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * procBody(void)
{
	TreeNode * t = programBody();
	if (t==NULL)
		syntaxError("a program body is requested!");
	return t;
}

/********************************************************************/
/* 函數名 programBody		 			  	                        */
/* 功  能 程序體部分的處理函數	                    	        	*/
/* 產生式 < programBody > ::=  BEGIN  stmList   END                 */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * programBody(void)
{
	TreeNode * t = newStmlNode();
    match(BEGIN);
	if(t!=NULL)
	{
		t->lineno = 0;
		t->child[0] = stmList();
	}
    match(END);
    return t;
}


/********************************************************************/
/* 函數名 stmList		 			  	                            */
/* 功  能 語句部分的處理函數	                    	        	*/
/* 產生式 < stmList > ::=  stm    stmMore                           */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * stmList(void)
{
	TreeNode * t = stm();
    TreeNode * p = stmMore();
	if(t!=NULL)
		if ( p!= NULL)
			t->sibling = p;
	return t;
}

/********************************************************************/
/* 函數名 stmMore		 			  	                            */
/* 功  能 語句部分的處理函數	                    	        	*/
/* 產生式 < stmMore > ::=   ε |  ; stmList                         */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * stmMore(void)
{
	TreeNode * t = NULL;
	switch(token.Lex)
	{
	case ELSE:
	case FI:
	case END:
	case ENDWH:	break;
	case SEMI:
		match(SEMI);
		t = stmList();
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
	return t;
}

/********************************************************************/
/* 函數名 stm   		 			  	                            */
/* 功  能 語句部分的處理函數	                    	        	*/
/* 產生式 < stm > ::=   conditionalStm   {IF}                       */
/*                    | loopStm          {WHILE}                    */
/*                    | inputStm         {READ}                     */
/*                    | outputStm        {WRITE}                    */
/*                    | returnStm        {RETURN}                   */
/*                    | id  assCall      {id}                       */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * stm(void)
{
	
	TreeNode * t = NULL;
	switch(token.Lex)
	{
	case IF:  
		t = conditionalStm();
		break;
	case WHILE:
		t = loopStm();
		break;
	case READ:
		t = inputStm();
		break;
	case WRITE:
		t = outputStm();
		break;
	case RETURN:
		t = returnStm();
		break;
	case ID:
		temp_name = copyString(token.Sem);
		match(ID);              
        t = assCall();
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
	return t;
}

/********************************************************************/
/* 函數名 assCall		 			  	                            */
/* 功  能 語句部分的處理函數	                    	        	*/
/* 產生式 < assCall > ::=   assignmentRest   {:=,LMIDPAREN,DOT}     */
/*                        | callStmRest      {(}                    */  
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * assCall(void)
{
	TreeNode * t = NULL;
	switch(token.Lex)
	{
	case ASSIGN:
	case LMIDPAREN:
	case DOT:
		t = assignmentRest();
		break;
	case LPAREN:
		t = callStmRest();
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
	return t;
}

/********************************************************************/
/* 函數名 assignmentRest		 			                        */
/* 功  能 賦值語句部分的處理函數	                    	        */
/* 產生式 < assignmentRest > ::=  variMore : = exp                  */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * assignmentRest(void)
{
	TreeNode * t = newStmtNode(AssignK);
	
	/* 賦值語句節點的第一個兒子節點記錄賦值語句的左側變量名,*
	/* 第二個兒子結點記錄賦值語句的右側表達式*/
	if(t!=NULL)
    {
		t->lineno = line0;
		
		/*處理第一個兒子結點,為變量表達式類型節點*/
		TreeNode * child1 = newExpNode(VariK);
		if(child1!=NULL)
		{
			child1->lineno = line0;
			strcpy(child1->name[0],temp_name);
			(child1->idnum)++;
			variMore(child1);
			t->child[0] = child1;
		}
		
		/*賦值號匹配*/
		match(ASSIGN);
	  
		/*處理第二個兒子節點*/
		t->child[1] = exp(); 
				
	}
	return t;
}

/********************************************************************/
/* 函數名 conditionalStm		 			                        */
/* 功  能 條件語句部分的處理函數	                    	        */
/* 產生式 < conditionalStm > ::= IF exp THEN stmList ELSE stmList FI*/ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * conditionalStm(void)
{
	TreeNode * t = newStmtNode(IfK);
	match(IF);
	if(t!=NULL)  
	{
		t->lineno = line0;
		t->child[0] = exp();
	}
	match(THEN);
	if(t!=NULL)  t->child[1] = stmList();
	if(token.Lex==ELSE)
	{
		match(ELSE);
		if(t!=NULL)   
			t->child[2] = stmList();
	}
	match(FI);
	return t;
}


/********************************************************************/
/* 函數名 loopStm          		 			                        */
/* 功  能 循環語句部分的處理函數	                    	        */
/* 產生式 < loopStm > ::=      WHILE exp DO stmList ENDWH           */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * loopStm(void)
{
	TreeNode * t = newStmtNode(WhileK);
	match(WHILE);
	if (t!=NULL)  
	{
		t->lineno = line0;
		t->child[0] = exp();
	    match(DO);
	    t->child[1] = stmList();
	    match(ENDWH);
	}
	return t;
}

/********************************************************************/
/* 函數名 inputStm          		     	                        */
/* 功  能 輸入語句部分的處理函數	                    	        */
/* 產生式 < inputStm > ::=    READ(id)                              */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * inputStm(void)
{
	TreeNode * t = newStmtNode(ReadK);
	match(READ);
	match(LPAREN);
	if((t!=NULL)&&(token.Lex==ID))	
	{
		t->lineno = line0;
		strcpy(t->name[0] ,token.Sem);
        (t->idnum)++;
	}
	match(ID);
	match(RPAREN);
	return t;
}

/********************************************************************/
/* 函數名 outputStm          		     	                        */
/* 功  能 輸出語句部分的處理函數	                    	        */
/* 產生式 < outputStm > ::=   WRITE(exp)                            */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * outputStm(void)
{
	TreeNode * t = newStmtNode(WriteK);
	match(WRITE);
	match(LPAREN);
	if(t!=NULL)  
	{
		t->lineno = line0;
		t->child[0] = exp();
	}
	match(RPAREN);
	return t;
}

/********************************************************************/
/* 函數名 returnStm          		     	                        */
/* 功  能 返回語句部分的處理函數	                    	        */
/* 產生式 < returnStm > ::=   RETURN                                */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * returnStm(void)
{
	TreeNode * t = newStmtNode(ReturnK);
	match(RETURN);
	if(t!=NULL)
		t->lineno = line0;
	return t;
}

/********************************************************************/
/* 函數名 callStmRest          		     	                        */
/* 功  能 函數調用語句部分的處理函數	                  	        */
/* 產生式 < callStmRest > ::=  (actParamList)                       */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * callStmRest(void)
{
	TreeNode * t=newStmtNode(CallK);
	match(LPAREN);
	/*函數調用時,其子節點指向實參*/
	if(t!=NULL)  
	{
		t->lineno = line0;		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女久久久久久久| 欧美日韩成人一区二区| 亚洲国产日韩精品| 国产欧美日韩在线看| 日韩午夜激情av| 国产白丝精品91爽爽久久| 日韩va欧美va亚洲va久久| 亚洲免费观看在线观看| 欧美激情一区二区三区蜜桃视频| 欧美影院午夜播放| 色噜噜久久综合| youjizz国产精品| 国产麻豆视频一区二区| 精品一区二区三区在线播放视频| 亚洲制服丝袜av| 亚洲美女偷拍久久| 欧美第一区第二区| 日韩一级精品视频在线观看| 欧美精品第一页| 欧美乱妇15p| 欧美三级三级三级| 欧美老人xxxx18| 欧美日韩精品免费| 欧美疯狂性受xxxxx喷水图片| 欧美性xxxxx极品少妇| 在线免费不卡电影| 欧美日韩免费不卡视频一区二区三区| 91网站在线观看视频| 日本视频免费一区| 麻豆精品国产91久久久久久| 毛片基地黄久久久久久天堂| 紧缚奴在线一区二区三区| 国产在线视频精品一区| 国产精品2024| 成人av资源在线观看| 91在线视频免费观看| 色婷婷综合久久久| 91麻豆精品国产91久久久资源速度 | 欧美日韩亚洲另类| 欧美日韩国产综合一区二区 | 国产三级一区二区三区| 一区二区中文视频| 亚洲激情男女视频| 免费在线视频一区| 国产成人精品免费在线| 成人黄色在线网站| 欧美日韩国产一区| 久久一二三国产| 亚洲免费观看在线观看| 天堂av在线一区| 国产在线看一区| 色综合久久88色综合天天免费| 欧美日韩免费在线视频| 2023国产精华国产精品| 国产日韩欧美一区二区三区综合| 亚洲欧美在线视频| 久久av资源网| 91黄色激情网站| 精品国产一区二区精华| 亚洲欧洲制服丝袜| 精品影视av免费| 一本一道综合狠狠老| 日韩情涩欧美日韩视频| 一区二区中文字幕在线| 成人福利视频网站| 国产无一区二区| 国产一区二区三区黄视频 | 欧美精品vⅰdeose4hd| 亚洲免费在线电影| 99re热视频精品| 中文字幕永久在线不卡| 国产精品一区二区在线观看不卡 | 亚洲精品视频免费观看| 不卡的av在线| 国产精品短视频| 97久久超碰国产精品| 中文字幕色av一区二区三区| 成人免费视频caoporn| 国产喂奶挤奶一区二区三区| 国内一区二区视频| 久久亚洲综合av| 国产精品69毛片高清亚洲| 久久久久久久久久美女| 国产精品亚洲视频| 国产精品网曝门| 色婷婷一区二区| 亚洲成人动漫av| 欧美电影免费观看完整版| 国产一区二区三区在线观看免费| 久久久久久黄色| 91丨porny丨在线| 午夜在线成人av| 欧美mv日韩mv亚洲| 成人av在线资源网站| 亚洲视频你懂的| 欧美日本在线观看| 久久精品国产一区二区三区免费看| 精品国产一区二区在线观看| 国产不卡在线视频| 亚洲男同1069视频| 日韩欧美国产一区在线观看| 国产剧情在线观看一区二区| 中文字幕一区在线| 制服丝袜日韩国产| 成人看片黄a免费看在线| 亚洲一级不卡视频| 久久婷婷久久一区二区三区| 成人h动漫精品一区二| 天天影视网天天综合色在线播放| 精品国产成人系列| 在线观看网站黄不卡| 黑人巨大精品欧美黑白配亚洲| 欧美国产日韩亚洲一区| 欧美精品第1页| 不卡的av在线播放| 九九视频精品免费| 亚洲免费伊人电影| 2017欧美狠狠色| 欧美日韩高清在线| 成人免费观看视频| 久久国产精品色婷婷| 一二三区精品福利视频| 国产视频一区二区在线观看| 欧美日韩1区2区| 日本道色综合久久| 粉嫩蜜臀av国产精品网站| 免费成人在线视频观看| 一区二区高清视频在线观看| 久久久电影一区二区三区| 欧美一区二区三级| 欧亚洲嫩模精品一区三区| 成人精品视频.| 激情综合亚洲精品| 男男成人高潮片免费网站| 亚洲黄色av一区| 中文字幕一区二区三区在线不卡 | 一本久久精品一区二区| 国产综合久久久久久鬼色 | 国产盗摄女厕一区二区三区| 日韩高清不卡一区二区| 一区二区三区在线免费| 一区在线播放视频| 国产精品国产a级| 国产精品美女一区二区在线观看| 欧美精品一区二区久久久| 日韩欧美精品在线视频| 91精品国产综合久久福利软件| 欧美亚男人的天堂| 欧美视频在线一区二区三区| 91久久精品网| 欧美日韩专区在线| 欧美在线看片a免费观看| 欧美性猛交xxxx乱大交退制版 | 一区二区欧美在线观看| 一区二区三区在线观看欧美| 亚洲六月丁香色婷婷综合久久 | 色偷偷88欧美精品久久久| thepron国产精品| 99久久综合精品| 色偷偷一区二区三区| 欧美综合天天夜夜久久| 欧美高清性hdvideosex| 日韩午夜激情视频| 久久久电影一区二区三区| 国产日产精品1区| 亚洲色图一区二区三区| 亚洲综合精品久久| 日韩精品电影在线| 久久97超碰国产精品超碰| 国产成人高清视频| 99久久精品免费看| 欧美日韩在线免费视频| 欧美一区二区二区| 国产欧美精品区一区二区三区| 中文字幕成人在线观看| 一区二区三区四区乱视频| 亚洲va中文字幕| 国产在线视频不卡二| 97久久精品人人爽人人爽蜜臀| 欧美曰成人黄网| 2019国产精品| 亚洲激情欧美激情| 国内精品国产成人国产三级粉色| 丰满岳乱妇一区二区三区| 欧美日韩一区不卡| 亚洲国产精品v| 亚瑟在线精品视频| 国产美女视频91| 色噜噜狠狠色综合中国| 精品免费日韩av| 亚洲精品成人悠悠色影视| 极品瑜伽女神91| 色94色欧美sute亚洲13| 久久久综合九色合综国产精品| 亚洲欧洲一区二区在线播放| 麻豆精品一区二区av白丝在线| 99精品欧美一区| 久久久欧美精品sm网站| 亚洲午夜久久久久久久久久久| 国产综合色在线视频区|