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

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

?? parse.cpp

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

		/*函數名的結點也用表達式類型結點*/
		TreeNode * child0 = newExpNode(VariK); 
		if(child0!=NULL)
		{
			child0->lineno = line0;
			strcpy(child0->name[0],temp_name);
			(child0->idnum)++;
			t->child[0] = child0;
		}
		t->child[1] = actParamList();
	}
	match(RPAREN);
	return t;
}

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

	switch(token.Lex)
	{
	case RPAREN:        break;
	case ID:
	case INTC:
		t =exp();
		if(t!=NULL)
			t->sibling = actParamMore();
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
	return t;
}

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



/*************************表達式部分********************************/
/****************************************************************************/
/* 函數名 exp																*/
/* 功  能 表達式處理函數													*/
/* 產生式 < 表達式 > ::= < 簡單表達式 > [< 關系運算符 > < 簡單表達式 > ]	*/
/* 說  明 該函數根據產生式調用相應遞歸處理函數,生成表達式類型語法樹節點		*/
/****************************************************************************/
TreeNode * exp(void)

{
  /* 調用簡單表達式處理函數simple_exp(),返回語法樹節點指針給t */
  TreeNode * t = simple_exp();

  /* 當前單詞token為邏輯運算單詞LT或者EQ */
  if ((token.Lex==LT)||(token.Lex==EQ)) 
  {
    /* 創建新的OpK類型語法樹節點,新語法樹節點指針賦給p */
    TreeNode * p = newExpNode(OpK);

	/* 新語法樹節點p創建成功,初始化p第一個子節點成員child[0]
	 * 并將當前單詞token(為EQ或者LT)賦給語法樹節點p的運算符成員attr.op*/
    if (p!=NULL) 
	{
      p->lineno = line0;
	  p->child[0] = t;
      p->attr.ExpAttr.op = token.Lex;

	  /* 將新的表達式類型語法樹節點p作為函數返回值t */
      t = p;
    }

	/* 當前單詞token與指定邏輯運算符單詞(為EQ或者LT)匹配 */
    match(token.Lex);

	/* 語法樹節點t非空,調用簡單表達式處理函數simple_exp()	*
	 * 函數返回語法樹節點指針給t的第二子節點成員child[1]	*/
    if (t!=NULL)
      t->child[1] = simple_exp();
  }
  
  /* 函數返回表達式類型語法樹節點t */
  return t;
}


/************************************************************************/
/* 函數名 simple_exp													*/
/* 功  能 簡單表達式處理函數											*/
/* 產生式 < 簡單表達式 >::=	< 項 > { < 加法運算符 > < 項 > }			*/
/* 說  明 該函數根據產生式調用相應遞歸處理函數,生成表達式類型語法樹節點	*/
/************************************************************************/
TreeNode * simple_exp(void)

{
  /* 調用元處理函數term(),函數返回語法樹節點指針給t */
  TreeNode * t = term();

  /* 當前單詞token為加法運算符單詞PLUS或MINUS */
  while ((token.Lex==PLUS)||(token.Lex==MINUS))

  {
    /* 創建新OpK表達式類型語法樹節點,新語法樹節點指針賦給p */
	TreeNode * p = newExpNode(OpK);

 	/* 語法樹節點p創建成功,初始化p第一子節點成員child[0]	*
	 * 返回語法樹節點指針給p的運算符成員attr.op				*/
    if (p!=NULL) 
	{
      p->lineno = line0;
	  p->child[0] = t;
      p->attr.ExpAttr.op = token.Lex;

	  /* 將函數返回值t賦成語法樹節點p */
      t = p;

	  /* 當前單詞token與指定加法運算單詞(為PLUS或MINUS)匹配 */
      match(token.Lex);

	  /* 調用元處理函數term(),函數返回語法樹節點指針給t的第二子節點成員child[1] */
      t->child[1] = term();
    }
  }
  /* 函數返回表達式類型語法樹節點t */
  return t;
}



/****************************************************************************/
/* 函數名 term																*/
/* 功  能 項處理函數														*/
/* 產生式 < 項 > ::= < 因子 > { < 乘法運算符 > < 因子 > }					*/
/* 說  明 該函數根據產生式調用相應遞歸處理函數,生成表達式類型語法樹節點		*/
/****************************************************************************/
TreeNode * term(void)

{
  /* 調用因子處理函數factor(),函數返回語法樹節點指針給t */
  TreeNode * t = factor();

  /* 當前單詞token為乘法運算符單詞TIMES或OVER */
  while ((token.Lex==TIMES)||(token.Lex==OVER))

  {
    /* 創建新的OpK表達式類型語法樹節點,新節點指針賦給p */
	treeNode * p = newExpNode(OpK);

	/* 新語法樹節點p創建成功,初始化第一個子節點成員child[0]為t	*
	 * 將當前單詞token賦值給語法樹節點p的運算符成員attr.op		*/
    if (p!=NULL) 
	{
      p->lineno= line0;
	  p->child[0] = t;
      p->attr.ExpAttr.op = token.Lex;
      t = p;
	}
	
	/* 當前單詞token與指定乘法運算符單詞(為TIMES或OVER)匹配 */
    match(token.Lex);

	/* 調用因子處理函數factor(),函數返回語法樹節點指針賦給p第二個子節點成員child[1] */
    p->child[1] = factor();
    
  }
  /* 函數返回表達式類型語法樹節點t */
  return t;
}


/****************************************************************************/
/* 函數名 factor															*/
/* 功  能 因子處理函數														*/
/* 產生式 factor ::= ( exp ) | INTC | variable                  			*/
/* 說  明 該函數根據產生式調用相應的遞歸處理函數,生成表達式類型語法樹節點	*/
/****************************************************************************/
TreeNode * factor(void)

{
  /* 函數返回語法樹節點指針t初始為為NULL */
  TreeNode * t = NULL;

  switch (token.Lex) 
  {
    case INTC :									

	  /* 創建新的ConstK表達式類型語法樹節點,賦值給t */
      t = newExpNode(ConstK);

	  /* 新語法樹節點t創建成功,當前單詞token為數字單詞NUM						*
	   * 將當前單詞名tokenString轉換為整數并賦給語法樹節點t的數值成員attr.val	*/
      if ((t!=NULL) && (token.Lex==INTC))
	  {
		  t->lineno = line0;
		  t->attr.ExpAttr.val = atoi(token.Sem);
	  }

	  /* 當前單詞token與數字單詞NUM匹配 */
      match(INTC);
      break;

	/* 當前單詞token為標識符單詞ID */
    case ID :
	  
	  /* 創建新的IdK表達式類型語法樹節點t */	  
	  t = variable();
      break;

	/* 當前單詞token為左括號單詞LPAREN */
    case LPAREN :		

	  /* 當前單詞token與左括號單詞LPAREN匹配 */
      match(LPAREN);					

	  /* 調用表達式處理函數exp(),函數返回語法樹節點指針給t */
      t = exp();

	  /* 當前單詞token與右括號單詞RPAREN匹配 */
      match(RPAREN);					

      break;

	/* 當前單詞token為其它單詞 */
    default:			
      ReadNextToken(&token);
	  syntaxError("unexpected token is here!");
	  break;
    }
  /* 函數返回表達式類型語法樹節點t */
  return t;
}

/********************************************************************/
/* 函數名 variable													*/
/* 功  能 變量處理函數												*/
/* 產生式 variable   ::=   id variMore                   			*/
/* 說  明 該函數根據產生式,	處理變量,生成其語法樹節點              */
/********************************************************************/
TreeNode * variable(void)
{
	TreeNode * t = newExpNode(VariK);

	if ((t!=NULL) && (token.Lex==ID))
	{
		t->lineno = line0;
		strcpy(t->name[0] ,token.Sem);
        (t->idnum)++;
	}
	
	match(ID);
	variMore(t);
	return t;
}


/********************************************************************/
/* 函數名 variMore													*/
/* 功  能 變量處理函數												*/
/* 產生式 variMore   ::=  ε                             			*/
/*                       | [exp]            {[}                     */
/*                       | . fieldvar       {DOT}                   */ 
/* 說  明 該函數根據產生式調用相應的遞歸處理變量中的幾種不同類型	*/
/********************************************************************/		
void variMore(TreeNode * t)
{
	switch(token.Lex)
	{	
	case ASSIGN:
	case TIMES:
	case EQ:
	case LT:
	case PLUS:
	case MINUS:
	case OVER:
	case RPAREN:
	case RMIDPAREN:
	case SEMI:
	case COMMA:
	case THEN:
	case ELSE:
	case FI:
	case DO:
	case ENDWH:
	case END:
		break;
	case LMIDPAREN:
		match(LMIDPAREN);
		
		/*用來以后求出其表達式的值,送入用于數組下標計算*/
		t->child[0] = exp();

		t->attr.ExpAttr.varkind = ArrayMembV;

		/*此表達式為數組成員變量類型*/
		t->child[0]->attr.ExpAttr.varkind = IdV;
		match(RMIDPAREN);
		break;
	case DOT:
		match(DOT);
		/*第一個兒子指向域成員變量結點*/
		t->child[0] = fieldvar();

		t->attr.ExpAttr.varkind = FieldMembV;

		t->child[0]->attr.ExpAttr.varkind = IdV;
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
}


/********************************************************************/
/* 函數名 fieldvar													*/
/* 功  能 變量處理函數												*/
/* 產生式 fieldvar   ::=  id  fieldvarMore                          */ 
/* 說  明 該函數根據產生式,處理域變量,并生成其語法樹節點       	*/
/********************************************************************/
TreeNode * fieldvar(void)
{
	/*注意,可否將此處的IdEK改為一個新的標識,用來記錄記錄類型的域*/
	TreeNode * t = newExpNode(VariK);

	if ((t!=NULL) && (token.Lex==ID))
	  {
		  t->lineno = line0;
		  strcpy(t->name[0] ,token.Sem);
          (t->idnum)++;
	  }	
	match(ID);
	
	fieldvarMore(t);

	return t;
}

/********************************************************************/
/* 函數名 fieldvarMore  											*/
/* 功  能 變量處理函數												*/
/* 產生式 fieldvarMore   ::=  ε                             		*/
/*                           | [exp]            {[}                 */ 
/* 說  明 該函數根據產生式調用相應的遞歸處理域變量為數組類型的情況	*/
/********************************************************************/
void fieldvarMore(TreeNode * t )
{
	switch(token.Lex)
	{
	case ASSIGN:
	case TIMES:
	case EQ:
	case LT:
	case PLUS:
	case MINUS:
	case OVER:
	case RPAREN:
	case SEMI:
	case COMMA:
	case THEN:
	case ELSE:
	case FI:
	case DO:
	case ENDWH:
	case END:
		break;
	case LMIDPAREN:
		match(LMIDPAREN);
		
		/*用來以后求出其表達式的值,送入用于數組下標計算*/
		t->child[0] = exp();
		t->child[0]->attr.ExpAttr.varkind = ArrayMembV;
		match(RMIDPAREN);
		break;
	default:
		ReadNextToken(&token);
		syntaxError("unexpected token is here!");
		break;
	}
}
	

/********************************************************************/
/* 函數名 parse														*/
/* 功  能 語法分析函數												*/
/* 說  明 該函數把詞法分析程序作為子程序調用,采用遞歸下降法			*/
/*		  根據產生式調用遞歸處理函數,函數為源程序創建語法分析樹		*/
/********************************************************************/
TreeNode * parse(void)

{ 
  TreeNode * t=NULL;

  /* 從文件Tokenlist中取得第一個單詞,將詞法信息送給token */
  
  ReadNextToken(&token);

  /* 開始調用基本語法分析處理函數,遞歸下降處理 */
  t = program();
  
  /* 當前單詞token不是ENDFILE,報代碼在文件結束前提前結束錯誤 */
  if (token.Lex!=ENDFILE)
	  syntaxError("Code ends before file\n");
 
  /* 函數返回語法樹根節點t */
  return t;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图制服丝袜| 天天综合网天天综合色| 亚洲一区二区三区四区在线| 免费精品视频在线| 91丨porny丨最新| 精品国产三级电影在线观看| 亚洲色图一区二区三区| 日本不卡123| 欧美综合视频在线观看| 国产欧美va欧美不卡在线 | 色欧美片视频在线观看 | 日韩西西人体444www| 中文字幕亚洲欧美在线不卡| 精品亚洲欧美一区| 欧美精品国产精品| 一区二区三区日韩| 成人丝袜高跟foot| 久久天天做天天爱综合色| 亚洲成人综合网站| 91黄色免费看| 国产精品久久久久久亚洲伦| 国产一区二区在线视频| 欧美第一区第二区| 秋霞影院一区二区| 欧美久久久久久久久| 亚洲国产日韩a在线播放| 成人av在线一区二区| 欧美国产精品一区二区| 国产麻豆精品在线| 久久这里只有精品首页| 老司机精品视频导航| 91精品国产91综合久久蜜臀| 日韩黄色免费网站| 欧美猛男gaygay网站| 亚洲成a人在线观看| 欧美日韩国产综合草草| 亚洲国产美国国产综合一区二区| 在线日韩av片| 尤物av一区二区| 欧洲生活片亚洲生活在线观看| 亚洲乱码国产乱码精品精小说| 972aa.com艺术欧美| 亚洲天天做日日做天天谢日日欢 | 亚洲成人激情av| 欧美色图12p| 图片区小说区区亚洲影院| 欧美日韩国产综合视频在线观看| 亚洲成人综合网站| 在线播放亚洲一区| 精品一区二区三区免费毛片爱| 久久嫩草精品久久久精品一| 国产精品一色哟哟哟| 国产精品卡一卡二| 91福利在线看| 日韩高清不卡一区二区三区| 精品久久国产字幕高潮| 国产激情91久久精品导航| 欧美韩国日本综合| 色综合色综合色综合| 日韩成人午夜精品| 久久久精品国产免费观看同学| 成人黄色综合网站| 午夜精品久久久久久久99水蜜桃| 日韩久久精品一区| 99久久免费视频.com| 亚洲成va人在线观看| 国产三级精品三级在线专区| 色偷偷久久人人79超碰人人澡| 日韩中文字幕区一区有砖一区 | 91亚洲国产成人精品一区二三 | 蜜桃视频在线观看一区| 久久久久久久久久久99999| 99国产精品久| 久久er99精品| 一级日本不卡的影视| 日韩精品一区二区三区在线观看| 懂色一区二区三区免费观看 | 国产精品福利影院| 欧美喷潮久久久xxxxx| 成人性生交大片免费看中文网站| 亚洲国产综合在线| 国产精品私人影院| 欧美一区二区三区免费观看视频| 不卡一区二区在线| 久久97超碰国产精品超碰| 亚洲欧美色图小说| 国产人久久人人人人爽| 欧美精品久久一区二区三区| 成人国产精品免费网站| 精品在线你懂的| 午夜电影网一区| 综合欧美一区二区三区| 久久精品视频一区| 日韩精品一区二区三区视频| 欧美在线色视频| 成人一区二区三区视频| 国产在线视频一区二区三区| 天天影视网天天综合色在线播放| 国产精品久久久久一区| 久久影院午夜论| 欧美大胆人体bbbb| 91精品欧美综合在线观看最新| 91美女在线观看| av电影天堂一区二区在线观看| 国产在线播放一区二区三区| 日精品一区二区三区| 亚洲成人黄色影院| 亚洲国产视频一区二区| 一区二区三区加勒比av| 最新不卡av在线| 中文字幕永久在线不卡| 久久久久久**毛片大全| 久久久久久久一区| 欧美精品一区二区三区很污很色的| 91精品国产品国语在线不卡| 欧美色爱综合网| 欧美精品高清视频| 欧美男人的天堂一二区| 7777精品伊人久久久大香线蕉| 欧美吻胸吃奶大尺度电影| 色天使久久综合网天天| 欧洲在线/亚洲| 欧美日本一区二区| 欧美一区二区三区白人| 日韩无一区二区| 2022国产精品视频| 国产日韩欧美一区二区三区综合| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩欧美在线不卡| 久久精品亚洲乱码伦伦中文| 欧美国产欧美综合| 亚洲免费在线电影| 天堂久久久久va久久久久| 免费在线观看一区| 国产精品自拍在线| 97久久精品人人澡人人爽| 色婷婷av久久久久久久| 欧美男同性恋视频网站| 精品999在线播放| 国产精品免费丝袜| 亚洲第一精品在线| 久久草av在线| 99久久综合国产精品| 91国偷自产一区二区三区成为亚洲经典 | 欧美经典一区二区三区| 亚洲人精品午夜| 视频一区免费在线观看| 韩国女主播一区| 97久久精品人人爽人人爽蜜臀| 欧美三级电影一区| 久久亚洲二区三区| 有码一区二区三区| 精品无人区卡一卡二卡三乱码免费卡 | 九色综合狠狠综合久久| 不卡的电视剧免费网站有什么| 欧美亚洲愉拍一区二区| 日韩欧美一级二级三级 | 精品国产免费一区二区三区四区 | 久久综合精品国产一区二区三区 | 亚洲精品一区在线观看| 中文字幕在线观看不卡| 日韩高清国产一区在线| 成人做爰69片免费看网站| 欧美日韩国产综合一区二区| 国产午夜精品久久久久久免费视| 一区二区三区不卡在线观看 | 亚洲欧美激情在线| 精品一区中文字幕| 91黄色免费网站| 亚洲国产精品av| 日本在线不卡视频一二三区| 99vv1com这只有精品| 精品黑人一区二区三区久久 | 国产精品高潮呻吟| 久久国产生活片100| 欧美亚洲国产一区二区三区va| 久久久久久久久久看片| 日韩不卡手机在线v区| 91免费视频大全| 国产无人区一区二区三区| 日韩av网站在线观看| 91麻豆文化传媒在线观看| 天堂在线亚洲视频| 91毛片在线观看| 中文字幕永久在线不卡| 国产传媒一区在线| 精品少妇一区二区三区在线播放| 亚洲成精国产精品女| 色综合一个色综合亚洲| 久久午夜免费电影| 午夜精品福利一区二区三区蜜桃| 不卡的av中国片| 国产精品伦理在线| 国产高清在线精品| 精品久久久久久久久久久久包黑料| 五月天国产精品| 欧美女孩性生活视频| 视频一区国产视频| 91精品国产综合久久久久久漫画 | 国产日韩欧美亚洲|