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

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

?? cfenxi.cpp

?? 本學期編譯課程需要實現L語言
?? CPP
字號:
// CFenXi.cpp: implementation of the CFenXi class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Lojo.h"
#include "CFenXi.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#define WORDLEN 20
#define NUMLEN   8
#endif
CFenXi::CFenXi(){}
CFenXi::~CFenXi(){}
/*================================================================ 
* 函數名:    CiFaFenXi
* 功能描述:   詞法分析 (public)
* 返回值:    void
================================================================*/
void CFenXi::CiFaFenXi(){
	BOOL flag=false;
	char token[20];
	int k,v;	
	init();
	for (int i=0;i<m_n;i++)  //當第2次調用該函數時,就要釋放前1次的資源
		delete m_cifa[i];	
	int n=0;		//用于指示當前的字符
	m_n=0;			//詞法結果的個數	
	while (m_str[n])
	{
		if (flag) //在注釋區內
		{
			while (!((m_str[n]=='*')&&(m_str[n+1]=='/'))) //注釋 "*/"
			{
				if (m_str[n])   n++;
				else        	break;
			}			
			if (m_str[n])
			{
				n++;
				n++;
				flag=false;
			}
		}//注釋區外
		while (1)// 跳過空白符號
		{
			while ((m_str[n]==32) || (m_str[n]==9))    n++;			
			if (!((m_str[n]==13) && (m_str[n+1]==10))) break;			
			n++;
			n++;
		}		
		if (isalpha(m_str[n]))		//字母開頭
		{
			k=0;
			while (1)
			{
				if (k<WORDLEN-1)				//標志符的長度為20
					token[k++]=m_str[n++];
				else 
					n++;				
				if (!isalnum(m_str[n])) //如果不是數字或字母就退出
					break;
			}			
			token[k]=0;
			v=FindInKWTab(token);	//查找關鍵詞表
			if (v)	//如果是關鍵詞
			{
				m_cifa[m_n]=new CIFA;
				m_cifa[m_n]->nValue=0;
				m_cifa[m_n]->nType=v;
				strcpy(m_cifa[m_n]->szText,token);
				m_cifa[m_n]->nAddr=n-k;
				m_n++;
			}
			else   //普通標志符
			{
				m_cifa[m_n]=new CIFA;				
			    /*----------在詞法分析結果中查找-----------*/
				int vv=1;
				for (int i=0;i<m_n;i++)
				{
					if (m_cifa[i]->nType==1)
					{
						vv++;
						if (!::stricmp(m_cifa[i]->szText,token))
							m_cifa[m_n]->nValue= m_cifa[i]->nValue;
					}
				}
				m_cifa[m_n]->nValue=vv;
			    /*---------------------------------------*/

				m_cifa[m_n]->nType=1;
				strcpy(m_cifa[m_n]->szText,token);
				m_cifa[m_n]->nAddr=n-k;
				m_n++;
			}
		}
		else if (isdigit(m_str[n]))	//數字
		{
			k=0;
			BOOL error=false;
			BOOL isreal=false;
			while (1)
			{
				if (k<=NUMLEN) //
					token[k++]=m_str[n++];
				else
				{
					error=true;
					n++;
				}				
				if (!isdigit(m_str[n])){
					if(m_str[n]=='.') isreal=true;//實數
					else break;
				}
			}
			token[k]=0;
			v=::strtol(token,NULL,10);
			if (error)
			{
				m_cifa[m_n]=new CIFA;
				m_cifa[m_n]->nValue=1;
				m_cifa[m_n]->nType=0;
				strcpy(m_cifa[m_n]->szText,token);
				m_cifa[m_n]->nAddr=n-k;
				m_n++;
			}
			else
			{
				m_cifa[m_n]=new CIFA;
				m_cifa[m_n]->nValue=v;
				if(isreal)	m_cifa[m_n]->nType=3; //實數
				else m_cifa[m_n]->nType=2;//整數
				strcpy(m_cifa[m_n]->szText,token);
				m_cifa[m_n]->nAddr=n-k;
				m_n++;
			}
		}
		else
			switch (m_str[n])	//其他符號
			{
			case '+':
			case '-':
			case '*':
			case '~':
			case '&':
			case '|':
			case '=':
			case ';':
			case '.':
			case ',':
			case '(':
			case ')':
			case '[':
			case ']':
				token[0]=m_str[n];
				token[1]=0;
				v=FindInKWTab(token);

				m_cifa[m_n]=new CIFA;
				m_cifa[m_n]->nValue=0;
				m_cifa[m_n]->nType=v;
				strcpy(m_cifa[m_n]->szText,token);
				m_cifa[m_n]->nAddr=n;

				m_n++;
				n++;
				break;

			case '\0':
				break;

			case '/':
				switch (m_str[n+1])
				{
				case '*':
					n++;
					n++;
					flag=true;
					break;
				default:
					token[0]=m_str[n];
					token[1]=0;
					v=FindInKWTab(token);
					m_cifa[m_n]=new CIFA;
					m_cifa[m_n]->nValue=0;
					m_cifa[m_n]->nType=v;
					strcpy(m_cifa[m_n]->szText,token);
					m_cifa[m_n]->nAddr=n;
					m_n++;
					n++;
				}
				break;

				case '<':
					switch (m_str[n+1])
					{
					case '=':
						token[0]=m_str[n];
						token[1]=m_str[n+1];
						token[2]=0;
						v=FindInKWTab(token);
						m_cifa[m_n]=new CIFA;
						m_cifa[m_n]->nValue=0;
						m_cifa[m_n]->nType=v;
						strcpy(m_cifa[m_n]->szText,token);
						m_cifa[m_n]->nAddr=n;
						m_n++;
						n++;
						n++;
						break;
					case '>':
						token[0]=m_str[n];
						token[1]=m_str[n+1];
						token[2]=0;
						v=FindInKWTab(token);
						m_cifa[m_n]=new CIFA;
						m_cifa[m_n]->nValue=0;
						m_cifa[m_n]->nType=v;
						strcpy(m_cifa[m_n]->szText,token);
						m_cifa[m_n]->nAddr=n;
						m_n++;
						n++;
						n++;
						break;

					default:
						token[0]=m_str[n];
						token[1]=0;
						v=FindInKWTab(token);
						m_cifa[m_n]=new CIFA;
						m_cifa[m_n]->nValue=0;
						m_cifa[m_n]->nType=v;
						strcpy(m_cifa[m_n]->szText,token);
						m_cifa[m_n]->nAddr=n;
						m_n++;
						n++;
					}
					break;

					case '>':
						switch (m_str[n+1])
						{
						case '=':
							token[0]=m_str[n];
							token[1]=m_str[n+1];
							token[2]=0;
							v=FindInKWTab(token);
							m_cifa[m_n]=new CIFA;
							m_cifa[m_n]->nValue=0;
							m_cifa[m_n]->nType=v;
							strcpy(m_cifa[m_n]->szText,token);
							m_cifa[m_n]->nAddr=n;
							m_n++;
							n++;
							n++;
							break;

						default:
							token[0]=m_str[n];
							token[1]=0;
							v=FindInKWTab(token);
							m_cifa[m_n]=new CIFA;
							m_cifa[m_n]->nValue=0;
							m_cifa[m_n]->nType=v;
							strcpy(m_cifa[m_n]->szText,token);
							m_cifa[m_n]->nAddr=n;
							m_n++;
							n++;
						}
						break;

						case ':':
							switch (m_str[n+1])
							{
							case '=':
								token[0]=m_str[n];
								token[1]=m_str[n+1];
								token[2]=0;
								v=FindInKWTab(token);
								m_cifa[m_n]=new CIFA;
								m_cifa[m_n]->nValue=0;
								m_cifa[m_n]->nType=v;
								strcpy(m_cifa[m_n]->szText,token);
								m_cifa[m_n]->nAddr=n;
								m_n++;
								n++;
								n++;
								break;

							default:
								token[0]=m_str[n];
								token[1]=0;
								v=FindInKWTab(token);
								m_cifa[m_n]=new CIFA;
								m_cifa[m_n]->nValue=0;
								m_cifa[m_n]->nType=v;
								strcpy(m_cifa[m_n]->szText,token);
								m_cifa[m_n]->nAddr=n;
								m_n++;
								n++;
							}
							break;

							default:
								token[0]=m_str[n];
								token[1]=0;
								m_cifa[m_n]=new CIFA;
								m_cifa[m_n]->nValue=2;
								m_cifa[m_n]->nType=0;
								strcpy(m_cifa[m_n]->szText,token);
								m_cifa[m_n]->nAddr=n;
								m_n++;
								n++;
			} 

		if (m_n==10000-2)	//詞法分析的結果的個數規定為10000
		{
			m_cifa[m_n]=new CIFA;
			m_cifa[m_n]->nValue=99;
			m_cifa[m_n]->nType=0;
			strcpy(m_cifa[m_n]->szText,"");
			m_cifa[m_n]->nAddr=n-1;
			m_n++;
			break;
		}
	} 

	m_cifa[m_n]=new CIFA;
	m_cifa[m_n]->nValue=0;
	m_cifa[m_n]->nType=-1;	//結束符
	strcpy(m_cifa[m_n]->szText,"");
	m_cifa[m_n]->nAddr=0;
	m_n++;

	return;
}



/*================================================================ 
* 函數名:    FindInKWTab(char * a)
* 功能描述:   在關鍵字表中查找  (protected)
* 返回值:    int (如果找到返回在表中的位置,否則返回0)
================================================================*/
int CFenXi::FindInKWTab(char * a)
{
	for (int i=0;i<50;i++)
		if (!::stricmp(m_szKW[i],a))   //找到
			return i;

	return 0; //未找到
}
/*================================================================ 
* 函數名:    init
* 功能描述:   用于初始化關鍵字表和錯誤信息表   (protected)
* 返回值:    void
================================================================*/
void CFenXi::init()
{
	strcpy(m_szKW[0],"");
 	strcpy(m_szKW[1],"");//標識符  
	strcpy(m_szKW[2],"");//整數
	strcpy(m_szKW[3],"");//實數
	strcpy(m_szKW[4],"TRUE"); //布爾值
	strcpy(m_szKW[5],"FALSE");

	strcpy(m_szKW[6],"CONST"); //變量類型
	strcpy(m_szKW[7],"INTEGER"); 
	strcpy(m_szKW[8],"REAL");    
	strcpy(m_szKW[9],"BOOLEAN");
	strcpy(m_szKW[10],"ARRAY");

	strcpy(m_szKW[11],"PROGRAM"); //程序架構
	strcpy(m_szKW[12],"FUNCTION");
	strcpy(m_szKW[13],"RETURN");

	strcpy(m_szKW[14],"BEGIN"); //起始結束
	strcpy(m_szKW[15],"END");

	strcpy(m_szKW[16],"IF");//條件
	strcpy(m_szKW[17],"THEN");
	strcpy(m_szKW[18],"ELSE");

	strcpy(m_szKW[19],"WHILE"); //循環1
	strcpy(m_szKW[20],"DO");
	
	strcpy(m_szKW[21],"FOR");//循環2
	strcpy(m_szKW[22],"TO");

	strcpy(m_szKW[23],"REPEAT");//循環3
	strcpy(m_szKW[24],"UNTIL");

	strcpy(m_szKW[25],"READ"); //讀寫
	strcpy(m_szKW[26],"WRITE");

    strcpy(m_szKW[27],"*");//運算符
	strcpy(m_szKW[28],"/");
	strcpy(m_szKW[29],"+");
	strcpy(m_szKW[30],"-");
	strcpy(m_szKW[31],"<"); 
	strcpy(m_szKW[32],"<=");
	strcpy(m_szKW[33],">");
	strcpy(m_szKW[34],">=");
	strcpy(m_szKW[35],"=");
	strcpy(m_szKW[36],"<>");
	strcpy(m_szKW[37],"~"); 
	strcpy(m_szKW[38],"&");
	strcpy(m_szKW[39],"|");
	strcpy(m_szKW[40],":=");

	strcpy(m_szKW[41],";");//分割符
	strcpy(m_szKW[42],":");
	strcpy(m_szKW[43],".");
	strcpy(m_szKW[44],",");
	strcpy(m_szKW[45],"(");
	strcpy(m_szKW[46],")");
	strcpy(m_szKW[47],"[");
	strcpy(m_szKW[48],"]");
	strcpy(m_szKW[49],"/*");
	strcpy(m_szKW[50],"*/");	
    
	strcpy(m_szTP[0],"未知    ");
	strcpy(m_szTP[1],"標識符 ");
	strcpy(m_szTP[2],"整數    ");
	strcpy(m_szTP[3],"實數    ");
	strcpy(m_szTP[4],"布爾數 ");
	strcpy(m_szTP[5],"關鍵字 ");
	strcpy(m_szTP[6],"運算符 ");
	strcpy(m_szTP[7],"分割符 ");
	
	strcpy(m_szErrMsg[0],"正確!");
	strcpy(m_szErrMsg[1],"數字位數過長!");
	strcpy(m_szErrMsg[2],"非法字符!");
	strcpy(m_szErrMsg[3],"缺少關鍵字“ program ”!");
	strcpy(m_szErrMsg[4],"program 后缺少標識符!");
	strcpy(m_szErrMsg[5],"缺少“ ; ”符號!");
	strcpy(m_szErrMsg[6],"缺少程序結束符“ . ”符號!");
	strcpy(m_szErrMsg[7],"缺少《程序體》,應為 begin,integer,real,function");
	strcpy(m_szErrMsg[8],"缺少保留字“ begin ”!");
	strcpy(m_szErrMsg[9],"缺少《語句》,應為 begin,ID,if,while,call");
	strcpy(m_szErrMsg[10],"缺少保留字“ end ”!");
	strcpy(m_szErrMsg[11],"缺少《聲明》,應為 integer,real,function");
	strcpy(m_szErrMsg[12],"缺少保留字 integer 或 real!");
	strcpy(m_szErrMsg[13],"function 后缺少標識符!");
	strcpy(m_szErrMsg[14],"變量聲明后缺少標識符!");
	strcpy(m_szErrMsg[15],"缺少保留字“ function ”!");
	strcpy(m_szErrMsg[16],"缺少 “ ( ”符號!");
	strcpy(m_szErrMsg[17],"缺少 “ ) ”符號!");
	strcpy(m_szErrMsg[18],"缺少形參標識符 !");
	strcpy(m_szErrMsg[19],"缺少 “ : ”符號!");
	strcpy(m_szErrMsg[20],"缺少標識符!");
	strcpy(m_szErrMsg[21],"缺少賦值符號“ := ”!");
	strcpy(m_szErrMsg[22],"缺少保留字“ if ”!");
	strcpy(m_szErrMsg[23],"缺少保留字“ then ”!");
	strcpy(m_szErrMsg[24],"缺少保留字“ while ”!");
	strcpy(m_szErrMsg[25],"缺少保留字“ do ”!");
	strcpy(m_szErrMsg[26],"缺少保留字“ call ”!");
	strcpy(m_szErrMsg[27],"缺少被調過程名標識符!");
	strcpy(m_szErrMsg[28],"缺少《因子》,應為 (,ID,NUMBER");
	strcpy(m_szErrMsg[29],"缺少《布爾表達式》,應為 ~,(,ID,NUMBER");
	strcpy(m_szErrMsg[30],"缺少《關系》!");
	strcpy(m_szErrMsg[31],"變量名不能和過程名相同!");
	strcpy(m_szErrMsg[32],"標識符重復聲明!");
	strcpy(m_szErrMsg[33],"未聲明標識符!");
	strcpy(m_szErrMsg[34],"不能直接引用過程名!");
	strcpy(m_szErrMsg[35],"不能從real轉換為integer類型!");
	strcpy(m_szErrMsg[36],"不能用常數作實參!");
	strcpy(m_szErrMsg[37],"變參應為變量!");
	strcpy(m_szErrMsg[38],"實參個數不足!");
	strcpy(m_szErrMsg[39],"只有integer和integer才能比較!");
	strcpy(m_szErrMsg[40],"不能這樣調用過程!");
	strcpy(m_szErrMsg[41],"");
	strcpy(m_szErrMsg[42],"");
	strcpy(m_szErrMsg[43],"");
	strcpy(m_szErrMsg[96],"源程序結束符 end. 后還有多余內容!");
	strcpy(m_szErrMsg[97],"語法錯誤太多,終止語法分析!");
	strcpy(m_szErrMsg[98],"源程序不正常結束!");
	strcpy(m_szErrMsg[99],"內存不足!詞法分析終止!");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一三区三区四区免费在线看 | 91精品国产综合久久精品app| 亚洲天堂免费看| 91麻豆国产福利精品| 亚洲日本va在线观看| 色素色在线综合| 亚洲国产视频网站| 欧美一区二区二区| 精品一区二区在线视频| 国产视频一区在线观看| 91影视在线播放| 视频一区二区中文字幕| 亚洲精品在线三区| 成人a级免费电影| 亚洲成人在线网站| 亚洲精品在线电影| 99国产欧美另类久久久精品| 亚洲国产精品麻豆| 欧美成人精精品一区二区频| 国产成人精品一区二区三区四区| 国产精品久久久一本精品| 欧亚洲嫩模精品一区三区| 免费成人在线播放| 亚洲欧美在线视频| 欧美色爱综合网| 国产精品亚洲午夜一区二区三区| 国产精品色噜噜| 欧美卡1卡2卡| 北条麻妃一区二区三区| 婷婷国产在线综合| 国产精品你懂的在线| 欧美色图片你懂的| 从欧美一区二区三区| 亚洲成人av一区二区| 久久婷婷成人综合色| 色婷婷av一区二区三区之一色屋| 精品亚洲porn| 亚洲成人av免费| 亚洲欧洲精品一区二区精品久久久| 欧美午夜片在线看| 成人国产免费视频| 久久精品国产99久久6| 亚洲欧美在线另类| 久久综合久久99| 欧美一区午夜视频在线观看| 91亚洲男人天堂| 国产一区二区三区蝌蚪| 亚洲成人一区在线| 中文字幕一区三区| 久久一留热品黄| 在线电影欧美成精品| 色综合咪咪久久| 国产99久久久国产精品潘金| 美女一区二区视频| 午夜精品久久久| 亚洲自拍与偷拍| 国产精品成人一区二区艾草| 日韩一区二区三区观看| 欧洲精品视频在线观看| av电影天堂一区二区在线| 国产麻豆欧美日韩一区| 日韩精品免费视频人成| 亚洲午夜免费视频| 亚洲另类春色国产| 成人欧美一区二区三区视频网页| 久久久久久久久免费| 精品国产成人在线影院 | 中文字幕一区二区三区在线播放| 精品少妇一区二区三区在线播放| 欧美日韩在线综合| 欧洲一区二区三区在线| 99久久精品久久久久久清纯| 成人精品一区二区三区中文字幕| 国产福利一区二区三区视频| 韩国一区二区三区| 国产真实乱子伦精品视频| 黑人巨大精品欧美一区| 久久精品国产澳门| 国产毛片精品一区| 国产精品乡下勾搭老头1| 国产另类ts人妖一区二区| 国产精品影视网| 国产成人综合自拍| 成人免费视频网站在线观看| av高清久久久| 日本二三区不卡| 欧美三级三级三级| 91精品国产乱码| 欧美v国产在线一区二区三区| 精品欧美一区二区在线观看| 久久先锋影音av鲁色资源网| 久久久久亚洲蜜桃| 亚洲色图都市小说| 亚洲在线观看免费| 美女诱惑一区二区| 国产宾馆实践打屁股91| 色呦呦一区二区三区| 欧美精品在线一区二区三区| 日韩视频一区二区| 国产亚洲欧美一级| 一区二区三区在线不卡| 亚洲成人精品影院| 黄一区二区三区| www.欧美精品一二区| 在线欧美小视频| 日韩欧美色综合网站| 亚洲国产电影在线观看| 亚洲午夜激情网页| 免费观看久久久4p| 成人小视频在线| 欧美日韩国产在线播放网站| 日韩欧美不卡在线观看视频| 中文字幕中文字幕中文字幕亚洲无线| 亚洲精品国久久99热| 免费成人深夜小野草| 不卡一卡二卡三乱码免费网站| 在线观看国产91| 国产午夜精品一区二区| 一区二区三区在线免费| 精品一区二区三区欧美| 91啦中文在线观看| 精品欧美乱码久久久久久| 中文字幕人成不卡一区| 黄色日韩三级电影| 欧美在线影院一区二区| 久久影院午夜论| 亚洲国产aⅴ成人精品无吗| 国产精品18久久久久久久久久久久| 色综合久久久久| 国产日韩精品一区二区浪潮av| 亚洲午夜久久久久| www.亚洲人| 26uuu久久综合| 婷婷国产在线综合| 日本韩国一区二区| 久久久久久久久久久久久久久99| 亚洲一区在线视频| 成人美女在线视频| 精品电影一区二区三区| 亚洲444eee在线观看| 成人av动漫在线| 久久一区二区视频| 精品一区精品二区高清| 7777精品伊人久久久大香线蕉| 国产精品久久影院| 国产精品资源在线| 亚洲精品一区在线观看| 免费一区二区视频| 欧美日韩大陆一区二区| 综合网在线视频| 不卡的av网站| 国产精品久久久久久久久免费丝袜| 蜜桃视频一区二区三区| 欧美乱熟臀69xxxxxx| 亚洲国产成人va在线观看天堂| 日本丶国产丶欧美色综合| 国产精品对白交换视频| 成人永久aaa| 亚洲国产精品精华液2区45| 国产精品亚洲一区二区三区妖精| www成人在线观看| 九一九一国产精品| 日韩一级二级三级| 另类小说图片综合网| 日韩精品一区二区三区在线| 蜜桃视频在线观看一区| 日韩亚洲电影在线| 精品夜夜嗨av一区二区三区| 久久久久久久久久久久久夜| 国产一区二区三区在线观看免费视频 | 亚洲一区国产视频| 欧美日韩一卡二卡三卡 | 精品剧情v国产在线观看在线| 日本亚洲三级在线| 欧美一区二视频| 久久99精品视频| 久久亚洲欧美国产精品乐播| 国产精品资源站在线| 日本一区二区高清| 色综合天天狠狠| 午夜精品在线看| 日韩视频在线你懂得| 久久疯狂做爰流白浆xx| 久久久亚洲综合| 91欧美一区二区| 亚洲国产精品久久久久秋霞影院 | 国产日韩亚洲欧美综合| 成人看片黄a免费看在线| 亚洲视频电影在线| 欧美精品亚洲一区二区在线播放| 人妖欧美一区二区| 久久久久久免费| 91在线观看免费视频| 亚洲一区二区美女| 日韩一区二区三区视频在线| 激情综合色丁香一区二区| 国产精品三级电影| 欧美日韩免费视频| 国产精品一二三四五| 亚洲精品视频自拍|