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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? yfenxi.cpp

?? 本學(xué)期編譯課程需要實(shí)現(xiàn)L語(yǔ)言
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
// YFenXi.cpp: implementation of the YFenXi class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Lojo.h"
#include "YFenXi.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
YFenXi::YFenXi(){}
YFenXi::~YFenXi(){}
/*================================================================ 
* 函數(shù)名:    YuFaFenXi
* 功能描述:   語(yǔ)法分析 (public)
* 返回值:    void
================================================================*/
void YFenXi::YuFaFenXi()
{
	if (m_n==0) 
		return;		//未進(jìn)行詞法分析	
	m_nCur=0;		//m_nCur用語(yǔ)指示詞法分析結(jié)果表中單詞的位置
	y_ChengXu();	//從 程序 開(kāi)始 
	return;
}
/*================================================================ 
* 函數(shù)名:    y_ChengXu
* 功能描述:   分析整個(gè)程序 (protected)
* 返回值:    bool
* 示例:
			Program abc;
				這里是程序體	
			.
================================================================*/
bool YFenXi::y_ChengXu()			//程序
{
	switch (m_cifa[m_nCur]->nType)
	{
	case 11:				//從program開(kāi)始
		break;
	default:
		m_nErrNo=3;		//缺少關(guān)鍵字“ program ”!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;			//分析下一個(gè)單詞
	switch (m_cifa[m_nCur]->nType)
	{
	case 1:				//標(biāo)志符
		break;
	default:
		m_nErrNo=4;		//program 后缺少標(biāo)識(shí)符!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	switch (m_cifa[m_nCur]->nType)
	{
	case 41:			//;
		break;
	default:
		m_nErrNo=5;		//缺少“ ; ”符號(hào)!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	if (!y_ChengXuTi())  //分析程序體
		return false;
	switch (m_cifa[m_nCur]->nType)
	{
	case 43:			//. (程序的最后一個(gè)符號(hào))
		break;
	default:
		m_nErrNo=6;		//缺少程序結(jié)束符“ . ”符號(hào)!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	switch (m_cifa[m_nCur]->nType)
	{
	case -1:	//end of cifa
		break;
	default:
		m_nErrNo=96;	//源程序結(jié)束符 end. 后還有多余內(nèi)容!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nErrNo=0;		//語(yǔ)法分析成功
	m_nErrAddr=m_nCur;
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_ChengXuTi
* 功能描述:   分析程序體 (protected)
* 返回值:    bool
* 示例:		  
		  Integer x,y,z;   
		  Real a,b;        //變量聲明
		  const www=10;	
		  function ab(Var m,n:Integer; t:Real);  //過(guò)程聲明
		  Begin
			  t:=n+m;
			  If m>n then n:=m else t:=m;
			  While n<m do
				Begin
				  n:=n+1
				End
		  End;

		  Begin
			這里是語(yǔ)句串
		  End
================================================================*/
bool YFenXi::y_ChengXuTi()
{
	switch (m_cifa[m_nCur]->nType)
	{
	case 12:	//function		
	case 9:		//bool
	case 8:		//real
	case 7:     //integer
	case 6:		//const
	case 10:    //array
		if (!y_ShengMingChuan())   //聲明串(用;隔開(kāi)的多個(gè)變量或過(guò)程聲明)
			return false;
		switch (m_cifa[m_nCur]->nType)
		{
		case 41:	//;
			break;
		default:
			m_nErrNo=5;	//缺少“ ; ”符號(hào)!"
			m_nErrAddr=m_nCur;
			return false;
		}
		m_nCur++;
		break;
	case 14:		//begin
			break;
	default:
		m_nErrNo=7;		//缺少《程序體》,應(yīng)為 begin,integer,real,procedure"
		m_nErrAddr=m_nCur;
		return false;
	}
	switch (m_cifa[m_nCur]->nType)
	{
	case 14:		//begin
		break;
	default:
		m_nErrNo=8;		//缺少保留字“ begin ”!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	if (!y_YuJuChuan())  //語(yǔ)句串
		return false;
	switch (m_cifa[m_nCur]->nType)
	{
	case 15:			//end
		break;
	default:
		m_nErrNo=10;	//缺少保留字“ end ”!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_ShengMingChuan
* 功能描述:   聲明串 用;隔開(kāi)的多個(gè)聲明(protected)
* 返回值:    void
================================================================*/
bool YFenXi::y_ShengMingChuan()
{
	if (!y_ShengMing()) 		
		return false;
	while (m_cifa[m_nCur]->nType==41 && m_cifa[m_nCur+1]->nType!=14)	//是; 不是begin
	{
		m_nCur++;
		if (!y_ShengMing()) //遞歸調(diào)用
			return false;
	}
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_ShengMing
* 功能描述:   聲明 (protected)
* 返回值:    void
================================================================*/
bool YFenXi::y_ShengMing()
{
	switch (m_cifa[m_nCur]->nType)
	{
	case 9:		//bool
	case 8:		//real
	case 7:     //integer
	case 10:	//array
		if (!y_BianLiangShengMing())	//變量聲明
			return false;
		break;
	case 6: //const
		 if(!y_ChangLiangShengMing())
			 return false;
		 break;
	case 12:			//function
		if (!y_HanShuShengMing()) //過(guò)程聲明
			return false;
		break;
	default:
		m_nErrNo=11;		//缺少聲明(integer,real,procedure)
		m_nErrAddr=m_nCur;
		return false;
	}
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_BianliangShengMing
* 功能描述:   變量聲明	(protected)
* 返回值:    void
* 示例:	 Integer x,y,z; array x[10,2], y[5,6];
================================================================*/
bool YFenXi::y_BianLiangShengMing()
{
	if(m_cifa[m_nCur]->nType<7||m_cifa[m_nCur]->nType>10){
		m_nErrNo=12; m_nErrAddr=m_nCur; return false;
	}
	if(m_cifa[m_nCur]->nType==10){//array
		do{
			m_nCur++;			//id
			if(m_cifa[m_nCur]->nType!=1){m_nErrNo=14; m_nErrAddr=m_nCur; return false;}
			m_nCur++; //[
			if(m_cifa[m_nCur]->nType!=47){m_nErrNo=47; m_nErrAddr=m_nCur; return false;}			
			do{//1,2,3
				m_nCur++;
				if(m_cifa[m_nCur]->nType!=2){m_nErrNo=49;m_nErrAddr=m_nCur;return false;}
				m_nCur++;
			}while(m_cifa[m_nCur]->nType==44);//]
			if(m_cifa[m_nCur]->nType!=48){m_nErrNo=48; m_nErrAddr=m_nCur; return false;}
			m_nCur++; //
		}while(m_cifa[m_nCur]->nType==44); //,		
	}else{//integer,boolean,real		 		
		do{
			m_nCur++;			
			if(m_cifa[m_nCur]->nType!=1){m_nErrNo=14; m_nErrAddr=m_nCur; return false;}
			m_nCur++;
		}while(m_cifa[m_nCur]->nType==44); //,
	}
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_ChangliangShengMing
* 功能描述:   變量聲明	(protected)
* 返回值:    void
* 示例:	 const x=10,y=true,z=3.2;
================================================================*/
bool YFenXi::y_ChangLiangShengMing()
{
	if(m_cifa[m_nCur]->nType!=6) { m_nErrNo=50; m_nErrAddr=m_nCur; return false;}
	m_nCur++;
	if(m_cifa[m_nCur]->nType==1){ //id
		m_nCur++;
		if(m_cifa[m_nCur]->nType==35){//=
			m_nCur++;
			if(m_cifa[m_nCur]->nType>=2&&m_cifa[m_nCur]->nType<=5){//值
			}else{	m_nErrNo=43; m_nErrAddr=m_nCur; return false;	}
		}else{	m_nErrNo=42; m_nErrAddr=m_nCur; return false;	}	
	}else{m_nErrNo=41;	m_nErrAddr=m_nCur;	return false;	}
	m_nCur++; 	

	while (m_cifa[m_nCur]->nType==44)  //44 , 分析用逗號(hào)隔開(kāi)的連續(xù)聲明的幾個(gè)變量
	{
		m_nCur++;
		if(m_cifa[m_nCur]->nType==1){ //id
			m_nCur++;
			if(m_cifa[m_nCur]->nType==35){//=
				m_nCur++;
				if(m_cifa[m_nCur]->nType>=2&&m_cifa[m_nCur]->nType<=5){//值
				}else{	m_nErrNo=43; m_nErrAddr=m_nCur; return false;	}
			}else{	m_nErrNo=42; m_nErrAddr=m_nCur; return false;	}	
		}else{m_nErrNo=41;	m_nErrAddr=m_nCur;	return false;	}
		m_nCur++;
	}
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_HanShuShengMing
* 功能描述:   過(guò)程聲明 (protected)
* 返回值:    void
* 示例:
			  function ab(形參);
					這里是程序體
			  RETURN 標(biāo)識(shí)符;
			
================================================================*/
bool YFenXi::y_HanShuShengMing()
{
	switch (m_cifa[m_nCur]->nType)
	{
	case 12:		//function
		break;
	default:
		m_nErrNo=15;		//缺少保留字“ function ”!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	switch (m_cifa[m_nCur]->nType)
	{
	case 1:			//id
		break;
	default:
		m_nErrNo=13;		//function 后缺少標(biāo)識(shí)符!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	if(m_cifa[m_nCur]->nType==45){//(
		m_nCur++;
		if(!y_BianLiangShengMing()) return false;		
		while(m_cifa[m_nCur]->nType==41){
			m_nCur++;
			if(!y_BianLiangShengMing()) return false;
		}		
	}else{return false;}
	if(m_cifa[m_nCur]->nType==46){//)
	}else{return false;}
	m_nCur++;
	if (!y_ChengXuTi())		//程序體 
		return false;
	//m_nCur++;
	if(m_cifa[m_nCur]->nType==13){// return 
		m_nCur++;
		if(m_cifa[m_nCur]->nType==1){// id
			m_nCur++;			
		}else{m_nErrNo=45; m_nErrAddr=m_nCur; return false;}
	}else{m_nErrNo=44; m_nErrAddr=m_nCur; return false;}
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_YuJuChuan
* 功能描述:   語(yǔ)句串,用分號(hào)隔開(kāi)的多個(gè)語(yǔ)句 (protected)
* 返回值:    void
* 示例: 
				  x:=1;y:=2;z:=3;
				  Call ab(x,y,z);
				  z:=4+z+(1+2+6+x)*3*y*5+7;
				  If ~ 3<=x & y<>4 then z:=0;
				  y:=219;  z:=37;  x:=y*z
================================================================*/
bool YFenXi::y_YuJuChuan()
{
	if (!y_YuJu()) 
		return false;

	while (m_cifa[m_nCur]->nType==41)	//;
	{
		m_nCur++;
		if (!y_YuJu()) 
			return false;
	}
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_YuJu
* 功能描述:   語(yǔ)句 (protected)
* 返回值:    void
================================================================*/
bool YFenXi::y_YuJu()
{
	switch (m_cifa[m_nCur]->nType)
	{
	case 14:			//begin 符合語(yǔ)句
		if (!y_FuHeYuJu())
			return false;
		break;
	case 1:			//id 賦值, 函數(shù)語(yǔ)句
		if(m_cifa[m_nCur+1]->nType==45){//(
			if(!y_HanShuYuJu()) return false;
		}else{
			if (!y_FuZhiYuJu()) return false;
		}
		break;
	case 16: //if 
		if (!y_IfYuJu())
			return false;
		break;
	case 19: //while
		if (!y_WhileYuJu()) 
			return false;
		break;
	case 21: //for
		if (!y_ForYuJu()) 
			return false;
		break;
	case 23://repeat
		if (!y_RepeatYuJu()) 
			return false;
		break;
	case 25: //read
		if (!y_ReadYuJu()) 
			return false;
		break;
	case 26: //write
		if (!y_WriteYuJu()) 
			return false;
		break;	
	default:
		m_nErrNo=9;   //缺少《語(yǔ)句》,應(yīng)為 begin,ID,if,while,call
		m_nErrAddr=m_nCur;
		return false;
	}
	return true;
}
/*================================================================ 
* 函數(shù)名:    y_FuHeYuJu
* 功能描述:   復(fù)合語(yǔ)句 (protected)
* 返回值:    void
================================================================*/
bool YFenXi::y_FuHeYuJu() 
{
	switch (m_cifa[m_nCur]->nType)
	{
	case 14:		//begin
		break;
	default:
		m_nErrNo=8;	//缺少保留字“ begin ”!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	if (!y_YuJuChuan()) //遞歸調(diào)用
		return false;
	switch (m_cifa[m_nCur]->nType)
	{
	case 15:		//end
		break;
	default:
		m_nErrNo=10;	//"缺少保留字“ end ”!
		m_nErrAddr=m_nCur;
		return false;
	}
	m_nCur++;
	return true;
}
/*================================================================ 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜不卡av在线| 亚洲免费观看高清完整版在线观看| 亚洲欧美偷拍三级| 久久99精品久久久久久国产越南| 色婷婷精品大在线视频| 久久先锋影音av鲁色资源| 亚洲一二三四在线观看| 国产v日产∨综合v精品视频| 91精品国产综合久久久久久漫画| 亚洲私人黄色宅男| 高清av一区二区| 日韩欧美视频一区| 亚洲成人一区在线| 91免费视频观看| 日本一区二区三区电影| 久久国产精品99久久久久久老狼| 欧美性猛交一区二区三区精品| 国产精品视频免费| 国产一区二区精品久久99| 欧美日韩大陆一区二区| 一区二区三区四区中文字幕| 成人久久18免费网站麻豆| 久久久久成人黄色影片| 欧美视频一区二区在线观看| 中文av字幕一区| 国内成人免费视频| 欧美不卡一区二区三区| 日韩精品一二三区| 欧美理论电影在线| 亚洲国产视频直播| 色悠悠亚洲一区二区| 国产精品色在线| 粉嫩13p一区二区三区| 国产网站一区二区| 国产精品99久久久久久宅男| 精品免费视频.| 久久精品久久精品| 欧美一级二级三级乱码| 日韩精品亚洲一区二区三区免费| 欧美日韩另类一区| 亚洲第一主播视频| 欧美精品 日韩| 手机精品视频在线观看| 宅男噜噜噜66一区二区66| 日韩精品高清不卡| 日韩三级视频在线观看| 麻豆精品一区二区av白丝在线| 精品少妇一区二区| 经典三级一区二区| 久久久99久久精品欧美| 国产成人啪午夜精品网站男同| 国产视频亚洲色图| av一区二区三区四区| 国产精品福利在线播放| 色婷婷av一区二区| 亚洲午夜私人影院| 欧美疯狂做受xxxx富婆| 蜜臀av性久久久久蜜臀aⅴ流畅 | 青青草伊人久久| 欧美va日韩va| 国产精品1区2区| 国产精品久久久久影院色老大 | 久88久久88久久久| 国产欧美一区二区三区在线看蜜臀| 成人午夜av在线| 18成人在线观看| 欧美日韩三级一区二区| 日韩av中文字幕一区二区| 日韩欧美成人一区| 不卡一区在线观看| 亚洲一区二区中文在线| 日韩欧美精品三级| 成人久久视频在线观看| 亚洲福利一区二区| www久久久久| 91小视频免费看| 男女性色大片免费观看一区二区| 久久综合久久99| 色8久久精品久久久久久蜜| 午夜精品久久久久久久久久久 | 欧美性极品少妇| 久久国产精品99精品国产 | 337p日本欧洲亚洲大胆色噜噜| 国产精品自产自拍| 亚洲综合色视频| 欧美成人精品福利| 99久久精品国产导航| 日韩在线一区二区| 国产精品久久久久永久免费观看| 欧美日韩激情一区| 国产一区二区伦理| 亚洲一区成人在线| 国产亚洲一区字幕| 欧美精品自拍偷拍动漫精品| 国产伦精品一区二区三区免费迷| 亚洲欧美色图小说| 日韩三级在线免费观看| 99视频一区二区| 久久se这里有精品| 一区二区三区中文在线观看| 欧美大片在线观看| 色999日韩国产欧美一区二区| 九色|91porny| 亚洲国产日韩a在线播放性色| 久久免费美女视频| 欧美日韩久久一区| 成人av影院在线| 麻豆成人免费电影| 亚洲一区在线看| 国产日韩欧美精品电影三级在线| 精品视频一区三区九区| 粉嫩aⅴ一区二区三区四区| 奇米888四色在线精品| 亚洲欧洲综合另类| 国产日本亚洲高清| 欧美一卡二卡三卡四卡| 色哟哟国产精品免费观看| 国产最新精品免费| 日韩精品一区第一页| 亚洲精品美国一| 久久精品一二三| 欧美成人激情免费网| 欧美日韩激情一区二区三区| 色狠狠色噜噜噜综合网| 成人美女在线观看| 久久国产免费看| 日本一不卡视频| 亚洲一区二区视频| 亚洲另类一区二区| 国产精品福利av| 久久综合狠狠综合久久综合88 | 欧美私模裸体表演在线观看| 成人性生交大片免费看中文 | 久久99国产乱子伦精品免费| 亚洲电影一级黄| 亚洲最大的成人av| 亚洲色图视频网站| 国产精品久久久久久久久久久免费看 | 自拍偷拍欧美激情| 欧美国产一区在线| 国产喷白浆一区二区三区| 精品国产一区二区精华| 91精品国产色综合久久久蜜香臀| 欧美一区二区精品在线| 蜜臀av国产精品久久久久 | 91色九色蝌蚪| www.欧美日韩| 国产传媒欧美日韩成人| 久久国产麻豆精品| 久久国产免费看| 久久国产综合精品| 麻豆国产精品一区二区三区 | 国产精品理论在线观看| 国产欧美日韩综合| 国产色产综合产在线视频| 亚洲精品一区二区三区蜜桃下载| 欧美一区日韩一区| 91精品久久久久久蜜臀| 欧美裸体bbwbbwbbw| 欧美日韩久久不卡| 制服丝袜一区二区三区| 制服.丝袜.亚洲.另类.中文| 欧美一区二区视频在线观看2022| 欧美日韩一级视频| 欧美日韩国产综合久久| 欧美在线free| 欧美亚洲国产一区二区三区| 日本乱码高清不卡字幕| 91麻豆国产在线观看| 色激情天天射综合网| 欧美综合一区二区| 欧美性感一区二区三区| 欧美精品高清视频| 精品美女一区二区三区| 久久久久亚洲蜜桃| 中文av一区二区| 亚洲精品一二三区| 亚洲h动漫在线| 精品一区二区精品| 国产黑丝在线一区二区三区| 成人黄色国产精品网站大全在线免费观看 | 国产亚洲综合在线| 成人免费一区二区三区视频| 亚洲一区二区三区四区在线观看| 午夜久久久久久电影| 九九在线精品视频| 成人av资源下载| 在线观看不卡一区| 91精品国产欧美一区二区18 | 欧美一区二区视频在线观看 | 欧美一区二区网站| 亚洲国产高清不卡| 亚洲一区二区三区四区的| 日本不卡一二三| 国产成人亚洲综合a∨猫咪| 色综合久久久网| 91精品欧美福利在线观看| 久久毛片高清国产| 亚洲欧美成aⅴ人在线观看| 人人超碰91尤物精品国产|