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

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

?? parse.cpp

?? snl編譯器 開發環境visual c
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/********************************************************************/
void baseType(TreeNode * t)
{
	switch(token.Lex)
	{
	case INTEGER:  match(INTEGER);
	               t->kind.dec = IntegerK;
				   break;

	case CHAR:     match(CHAR);
		           t->kind.dec = CharK;
				   break;

    default:
	  		  ReadNextToken(&token);
			  syntaxError("unexpected token is here!");
		      break;
	}
}


/********************************************************************/
/* 函數名 structureType		 							            */
/* 功  能 類型聲明部分的處理函數						        	*/
/* 產生式 < structureType > ::=  arrayType | recType                */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
void structureType(TreeNode * t)
{
	switch(token.Lex)
	{
	case ARRAY:    
		arrayType(t);               
		break;
    case RECORD:   
		t->kind.dec = RecordK;
		recType(t);
	    break;
    default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
}


/********************************************************************/
/* 函數名 arrayType		 							                */
/* 功  能 類型聲明部分的處理函數						        	*/
/* 產生式 < arrayType > ::=  ARRAY [low..top] OF baseType           */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
void arrayType(TreeNode * t)
{
     match(ARRAY);
	 match(LMIDPAREN);
     if (token.Lex==INTC)
	 {
		 t->attr.ArrayAttr.low = atoi(token.Sem);
	 }
	 match(INTC);
	 match(UNDERANGE);
	 if (token.Lex==INTC)
	 {
		 t->attr.ArrayAttr.up = atoi(token.Sem);
	 }
	 match(INTC);
	 match(RMIDPAREN);
	 match(OF);
     baseType(t);
     t->attr.ArrayAttr.childtype = t->kind.dec;
	 t->kind.dec = ArrayK;
}


/********************************************************************/
/* 函數名 recType		 							                */
/* 功  能 類型聲明部分的處理函數						        	*/
/* 產生式 < recType > ::=  RECORD fieldDecList END                  */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
void recType(TreeNode * t)
{
	TreeNode * p = NULL;
	match(RECORD);
    p = fieldDecList();
	if(p!=NULL)
		t->child[0] = p;
	else
		syntaxError("a record body is requested!");
    match(END);
}


/********************************************************************/
/* 函數名 fieldDecList		 							            */
/* 功  能 類型聲明部分的處理函數						        	*/
/* 產生式 < fieldDecList > ::=   baseType idList ; fieldDecMore     */
/*                             | arrayType idList; fieldDecMore     */ 
/*說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點   */
/********************************************************************/
TreeNode * fieldDecList(void)
{

	TreeNode * t = newDecNode();
	TreeNode * p = NULL;
	if (t!=NULL)
	{
	    t->lineno = line0;
		switch(token.Lex)
		{
		case INTEGER:
	    case CHAR:
           baseType(t);
	       idList(t);
	       match(SEMI);
	       p = fieldDecMore();
	       break;
	    case ARRAY: 
	       arrayType(t);
	       idList(t);
	       match(SEMI);
	       p = fieldDecMore();
	       break;
        default:
		   ReadNextToken(&token);
		   syntaxError("unexpected token is here!");
		   break;
		}
	    t->sibling = p;
	}
	return t;
}


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


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


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


/**************************變量聲明部分******************************/

/********************************************************************/
/* 函數名 varDec		 						     	            */
/* 功  能 變量聲明部分的處理函數						        	*/
/* 產生式 < varDec > ::=  ε |  varDeclaration                      */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * varDec(void)
{
	TreeNode * t = NULL;
	switch(token.Lex)
	{
	case PROCEDURE:
	case BEGIN:     break;
	case VAR:
		t = varDeclaration();
		break;
	default:
	    ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
	return t;
}


/********************************************************************/
/* 函數名 varDeclaration		 						            */
/* 功  能 變量聲明部分的處理函數						        	*/
/* 產生式 < varDeclaration > ::=  VAR  varDecList                   */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * varDeclaration(void)
{
	match(VAR);
	TreeNode * t = varDecList();
    if(t==NULL)
		syntaxError("a var declaration is expected!");
	return t;
}


/********************************************************************/
/* 函數名 varDecList		 						                */
/* 功  能 變量聲明部分的處理函數						        	*/
/* 產生式 < varDecList > ::=  typeName varIdList; varDecMore        */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * varDecList(void)
{
	TreeNode * t = newDecNode();
	TreeNode * p = NULL;

	if ( t != NULL )
	{
		t->lineno = line0;
		typeName(t);
	    varIdList(t);
	    match(SEMI);
        p = varDecMore();
	    t->sibling = p;
	}
	return t;
}

/********************************************************************/
/* 函數名 varDecMore		 						                */
/* 功  能 變量聲明部分的處理函數						        	*/
/* 產生式 < varDecMore > ::=  ε |  varDecList                      */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
TreeNode * varDecMore(void)
{
	TreeNode * t =NULL;

	switch(token.Lex)
	{
	case PROCEDURE:
	case BEGIN:
		    break;
	case INTEGER:
	case CHAR:
	case ARRAY:
	case RECORD:
	case ID:
		t = varDecList();
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
	return t;
}


/********************************************************************/
/* 函數名 varIdList		 						                    */
/* 功  能 變量聲明部分的處理函數						        	*/
/* 產生式 < varIdList > ::=  id  varIdMore                          */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
void varIdList(TreeNode * t)
{
	if (token.Lex==ID)
	{
        strcpy(t->name[(t->idnum)] ,token.Sem);
        match(ID);
		t->idnum =(t->idnum ) + 1;
	}
	else 
	{
		syntaxError("a varid is expected here!");
		ReadNextToken(&token);
	}
	varIdMore(t);
}

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

/****************************過程聲明部分****************************/

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

/********************************************************************/
/* 函數名 procDeclaration		 						            */
/* 功  能 函數聲明部分的處理函數						        	*/
/* 產生式 < procDeclaration > ::=  PROCEDURE                        */
/*                                 ProcName(paramList);             */
/*                                 procDecPart                      */
/*                                 procBody                         */
/*                                 procDec                          */
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/*        函數的根節點用于記錄該函數的名字;第一個子節點指向參數節  */
/*        點,第二個節點指向函數中的聲明部分節點;第三個節點指向函  */
/*        數體。
/********************************************************************/
TreeNode * procDeclaration(void)
{
	TreeNode * t = newProcNode();
	match(PROCEDURE);
	if (t!=NULL)
	{
		t->lineno = line0;
		if (token.Lex==ID)
		{
			strcpy(t->name[0],token.Sem);
			(t->idnum)++;
			match(ID);
		}
		match(LPAREN);
		paramList(t);
		match(RPAREN);
        match(SEMI);
		t->child[1] = procDecPart();
		t->child[2] = procBody();
		t->sibling = procDec();
	}
	return t;
}


/********************************************************************/
/* 函數名 paramList		 						                    */
/* 功  能 函數聲明中參數聲明部分的處理函數	        	        	*/
/* 產生式 < paramList > ::=  ε |  paramDecList                     */ 
/* 說  明 函數根據文法產生式,調用相應的遞歸處理函數,生成語法樹節點  */
/********************************************************************/
void paramList(TreeNode * t)     
{
	TreeNode * p = NULL;
	
	switch(token.Lex)
	{
	case RPAREN:  break;
	case INTEGER:
	case CHAR:
	case ARRAY:
	case RECORD:
	case ID:
	case VAR:
		p = paramDecList();
		t->child[0] = p;
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
}


/********************************************************************/
/* 函數名 paramDecList		 			    	                    */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品伊人久久久久av影院| 欧美日韩精品一二三区| 26uuu精品一区二区在线观看| 蜜桃精品在线观看| 久久久精品欧美丰满| 懂色av中文字幕一区二区三区| 国产无遮挡一区二区三区毛片日本| 国产精品一色哟哟哟| 国产精品久久久久久久第一福利 | 亚洲一区二区三区中文字幕 | 精品国产乱子伦一区| 韩国欧美一区二区| 国产精品欧美一区二区三区| 97精品国产露脸对白| 午夜精品爽啪视频| 久久综合av免费| 成人高清视频在线| 亚洲va欧美va人人爽| 欧美成人aa大片| 99国产欧美另类久久久精品| 亚洲观看高清完整版在线观看| 日韩视频在线观看一区二区| 精品一区二区三区的国产在线播放 | 国产在线播放一区二区三区| 综合久久久久久久| 中文字幕中文字幕一区| 欧美性猛交xxxx乱大交退制版 | 免费在线观看不卡| 欧美高清在线精品一区| 欧美日韩卡一卡二| 久久精品国产久精国产| 亚洲欧洲综合另类| 欧美xxx久久| 欧美综合亚洲图片综合区| 毛片av一区二区三区| 亚洲日本va午夜在线影院| 欧美成人一区二区三区片免费 | 欧美在线视频你懂得| 极品少妇xxxx偷拍精品少妇| 亚洲自拍另类综合| 国产人成一区二区三区影院| 欧美久久久久免费| 99国产欧美另类久久久精品| 激情亚洲综合在线| 午夜精品视频一区| 亚洲男人的天堂网| 日本一区二区成人在线| 日韩欧美黄色影院| 欧美色视频在线| a级高清视频欧美日韩| 国产在线播放一区| 美女视频黄a大片欧美| 亚洲一区二区在线视频| 国产精品妹子av| 精品剧情v国产在线观看在线| 欧美性xxxxxx少妇| 91美女片黄在线观看| 国产精品系列在线观看| 久久精品国产成人一区二区三区 | 一区二区在线观看视频| 欧美高清在线精品一区| wwwwww.欧美系列| 日韩欧美色综合| 91精品久久久久久蜜臀| 欧美三级资源在线| 欧美手机在线视频| 欧美专区亚洲专区| 色天使色偷偷av一区二区| 大陆成人av片| 粉嫩13p一区二区三区| 国产一区二区三区黄视频| 蜜臀久久久久久久| 日本美女一区二区| 秋霞午夜鲁丝一区二区老狼| 天堂在线亚洲视频| 午夜私人影院久久久久| 午夜精品福利视频网站| 亚洲成人av一区| 天天色综合天天| 天堂一区二区在线| 蜜桃av噜噜一区二区三区小说| 日日夜夜精品视频天天综合网| 视频一区二区三区入口| 日本不卡一二三| 精品一区二区三区视频在线观看| 久久99国产精品尤物| 韩国中文字幕2020精品| 国产福利91精品一区二区三区| 国产精品99久久久久久久女警| 国产传媒欧美日韩成人| 成人丝袜18视频在线观看| av电影天堂一区二区在线| av激情成人网| 欧洲精品中文字幕| 6080国产精品一区二区| 欧美mv和日韩mv的网站| 精品国产一区二区亚洲人成毛片 | 国产二区国产一区在线观看| 国产成人av电影在线观看| 粉嫩aⅴ一区二区三区四区 | 精品美女被调教视频大全网站| 欧美成人性战久久| 国产精品美女www爽爽爽| 亚洲欧美日韩在线| 日本欧美一区二区三区乱码| 国产精品一区二区果冻传媒| 91视频国产观看| 欧美高清视频不卡网| 久久影音资源网| 亚洲欧美另类小说视频| 轻轻草成人在线| 成人激情免费电影网址| 欧美色综合网站| 久久综合久久综合亚洲| 亚洲视频精选在线| 麻豆精品一区二区av白丝在线| 成人网男人的天堂| 欧美精品亚洲二区| 国产精品午夜免费| 午夜精品久久久久久久蜜桃app| 国内外成人在线视频| 91啪九色porn原创视频在线观看| 91精品在线免费| 中文字幕亚洲精品在线观看| 男人的天堂亚洲一区| 99久久久久久99| 精品国产区一区| 亚洲国产综合在线| 懂色av噜噜一区二区三区av| 欧美日韩精品一区二区| 国产精品久久久久aaaa| 蜜臀久久久久久久| 欧美三级在线播放| 国产精品久久久久影视| 蜜臀国产一区二区三区在线播放| 色综合久久综合网97色综合| 久久久无码精品亚洲日韩按摩| 亚洲成人av电影| eeuss鲁片一区二区三区| 久久夜色精品国产噜噜av| 亚洲午夜在线视频| 91在线视频18| 中文字幕精品一区二区精品绿巨人| 日韩国产在线观看一区| 91香蕉视频污| 国产精品进线69影院| 国内精品伊人久久久久av影院| 欧美久久久久久久久久| 一区二区三区中文免费| 成人精品视频一区二区三区尤物| 日韩亚洲欧美中文三级| 首页国产欧美久久| 欧美主播一区二区三区美女| 亚洲色图另类专区| 欧美老年两性高潮| 亚洲午夜免费电影| 色综合久久久网| 亚洲色图色小说| 91在线精品一区二区| 1000部国产精品成人观看| 国产+成+人+亚洲欧洲自线| 精品成人一区二区三区| 久久99精品久久只有精品| 91精品在线一区二区| 日韩黄色在线观看| 欧美一区二区视频观看视频| 日韩国产欧美在线观看| 3d成人h动漫网站入口| 日产国产高清一区二区三区| 宅男噜噜噜66一区二区66| 日韩在线卡一卡二| 911精品国产一区二区在线| 午夜精品一区在线观看| 欧美巨大另类极品videosbest | 波多野结衣视频一区| 国产精品欧美久久久久一区二区 | 中文字幕人成不卡一区| www.亚洲精品| 一区二区三区日韩欧美| 欧美影视一区二区三区| 午夜激情一区二区| 日韩免费视频一区| 国产福利精品导航| 自拍偷拍亚洲综合| 在线视频综合导航| 日本成人在线视频网站| www国产成人免费观看视频 深夜成人网| 国产一区二区看久久| 中文字幕一区av| 欧美网站一区二区| 奇米精品一区二区三区在线观看一| 欧美大黄免费观看| 成人一区在线观看| 亚洲精品免费在线播放| 欧美一级日韩一级| 国产精品18久久久久久久网站| 亚洲欧美日韩国产手机在线| 欧美美女网站色| 国产成人精品免费| 亚洲综合另类小说|