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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? yf.cpp

?? 這是一個用c++語言實現(xiàn)了語法分析的原代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<string>
#include<cmath>
using namespace std;
struct token//token結(jié)構(gòu)體
{
	int code;//存放單詞的id號
	int num;//存放字符或數(shù)字出現(xiàn)的次數(shù)
	token *next;
};
token *token_head,*token_tail;//token隊列
struct number//number結(jié)構(gòu)體
{
	int num;//
	int value;//
	number *next;
};
number *number_head,*number_tail;//number隊列
struct str//string結(jié)構(gòu)體
{
	int num;//
	string  word;//
	str *next;
};
str *string_head,*string_tail;//string隊列
struct bds//表達式結(jié)構(gòu)體
{
	char left;//存放規(guī)則左部
	string right;//存放右部
	int len;//長度
};
bds css[20];//存放文法的20個表達式
struct SLR//action表結(jié)構(gòu)體
{
	char sr;//放符號
	int state;//放狀態(tài)
};
SLR action[46][18];//action表
int go_to[46][11];//go_to表
struct fxz//分析棧結(jié)構(gòu)體,雙鏈
{
	fxz *pre;//前指針
	int num;//狀態(tài)號
	int word;//字符號
	fxz *next;//后指針
};
fxz *stack_head,*stack_tail;//分析棧首尾指針

void scan();//按字符讀取源文件
int judge(char ch);//判斷輸入字符的類型
void out1(char ch);//寫入token.txt
void out2(char ch,string word);//寫入number.txt
void out3(char ch,string word);//寫入string.txt
void input1(token *temp);//插入結(jié)點到隊列token
void input2(number *temp);//插入結(jié)點到隊列number
void input3(str *temp);//插入結(jié)點到隊列string
void output();//輸出三個隊列的內(nèi)容
void outfile();//輸出三個隊列的內(nèi)容到相應(yīng)文件中
void yufa_initialize();//初始化語法分析數(shù)據(jù)結(jié)構(gòu)
int yufa_main(int a);//語法分析主體部分
int ID1(int a);//給輸入字符編號,轉(zhuǎn)化成action表列編號
string ID10(int i);//給輸入字符反編號
int ID2(char ch);//給非終結(jié)狀態(tài)編號,轉(zhuǎn)化成go_to表列編號
int ID20(char ch);//給非終結(jié)狀態(tài)編號
char ID21(int j);//給非終結(jié)狀態(tài)反編號
void add(fxz *temp);//給fxz分析棧鏈表增加一個結(jié)點
void del();//給fxz分析棧鏈表刪除一個結(jié)點

FILE *fp;//文件
int wordcount;//標志符計數(shù)
int numcount;//整型常數(shù)計數(shù)
int err;//標志詞法分析結(jié)果正確或錯誤
int nl;//讀取行數(shù)
void main()
{
	

	token_head=new token;
	token_head->next=NULL;
	token_tail=new token;
	token_tail->next=NULL;
	number_head=new number;
	number_head->next=NULL;
	number_tail=new number;
	number_tail->next=NULL;
	string_head=new str;
	string_head->next=NULL;
	string_tail=new str;
	string_tail->next=NULL;//初始化三個隊列的首尾指針
	wordcount=0;//初始化字符計數(shù)器
	numcount=0;//初始化常數(shù)計數(shù)器
	err=0;//初始化詞法分析錯誤標志
	nl=1;//初始化讀取行數(shù)
	yufa_initialize();//初始化語法分析數(shù)據(jù)結(jié)構(gòu)
	cout<<"此程序所用的文法如下:"<<endl;
	//-------------------------------------------------------------
	
	
	for(int i=0;i<20;i++)//輸出文法
		{
		cout<<css[i].left<< "->"<<css[i].right;
		cout<<endl;
	}
//---------------------------------------------------------------------
	scan();//詞法分析
	
	if(err==0)
	{
		char m;
		cout<<"詞法分析完成,程序無詞法錯誤!"<<endl;
		cout<<"下邊將輸出結(jié)果,如果想要把分析結(jié)果保存到文本文檔中請輸入 y ,否則請輸入其它鍵:";
		cin>>m;
		output();
		if(m=='y')
		{
			cout<<"結(jié)果保存在token.txt、number.txt和sting.txt三個文件中"<<endl;
			outfile();
		}
	}
	
	token *temp;
	temp=new token;
	temp=token_head->next;
	int p,q;
	p=0;
	q=0;
	cout<<endl<<"下面進行語法分析:"<<endl;
	while(temp!=NULL)
	{
		int w;
		w=ID1(temp->code);//
		p=yufa_main(w);
	
		if(p==1) break;
		if(p==0)
			temp=temp->next;
		if(temp==NULL) q=1;
	}//語法分析
	
	if(q==1)
		while(1)
		{
			p=yufa_main(17);
			if(p==3) break;
		}//最后輸入$來完成語法分析
	cout<<endl;
	system("pause");
}
void scan()
{
	char ch;
	string word;//存放字符串
	char document[50];
	int flag=0;
	cout<<"請輸入要編譯的源文件名稱:";
	cin>>document; 
	cout<<endl;
	if((fp=fopen(document,"rt"))==NULL)
	{
		err=1;
		cout<<"無法找到該文件!"<<endl;
		return;
	}
	while(!feof(fp))
	{
		word="";
		ch=fgetc(fp);
		flag=judge(ch);
		if(flag==1)
			out1(ch);
		else if(flag==2)
			out2(ch,word);
		else if(flag==3)
			out3(ch,word);
		else if(flag==4 || flag==5 ||flag==6||flag==7)
			continue;//繼續(xù)向下讀
		else
		{
			cout<<"第"<<nl<<"行  "<<"錯誤:非法字符!  "<<ch<<endl;
			err=1;
		}
	}
	fclose(fp);
}
int judge(char ch)
{
	int flag=0;
	if(ch=='=' || ch=='+' || ch=='*' || ch=='>' || ch==':' || ch==';' || ch=='{' || ch=='}' || ch=='(' || ch==')')
		flag=1;//界符
	else if('0'<=ch && ch<='9')
		flag=2;//數(shù)字
	else if(('a'<=ch && ch<='z') || ('A'<=ch && ch<='Z'))
		flag=3;//字母
	else if(ch==' ')
		flag=4;//空格
	else if(feof(fp))
		flag=5;//結(jié)束
	else if(ch=='\n')
	{
		flag=6;//換行
		nl++;
	}
	else if(ch=='	')
		flag=7;//tab鍵
	else
		flag=0;//非法字符
	return(flag);
}
void out1(char ch)//界符編碼并存入鏈表
{
	int id;
	switch(ch)
	{
	case '=' : id=1;break;
	case '+' : id=2;break;
	case '*' : id=3;break;
	case '>' : id=4;break;
	case ':' : id=5;break;
	case ';' : id=6;break;
	case '{' : id=7;break;
	case '}' : id=8;break;
	case '(' : id=9;break;
	case ')' : id=10;break;
	default : id=0;
	}
	token *temp;
	temp=new token;
	temp->code=id;
	temp->num=-1;
	temp->next=NULL;
	input1(temp);
	return;
}
void out2(char ch,string word)//處理數(shù)字
{
	token *temp;
	temp=new token;//初始化鏈表頭
	temp->code=-1;
	temp->num=-1;
	temp->next=NULL;
	number *temp1;
	temp1=new number;
	temp1->num=-1;
	temp1->value=-1;
	temp1->next=NULL;
	int flag=0;
	word=word+ch;
	ch=fgetc(fp);//再取一個字符
	flag=judge(ch);
	if(flag==1)//如果后面為界符說明前面的數(shù)字串已經(jīng)結(jié)束
	{
		//處理數(shù)字

		numcount++;
		temp->code=26;
		temp->num=numcount;
		input1(temp);
		temp1->num=numcount;
		int i,num_value=0,num_length;//字符串轉(zhuǎn)化為數(shù)字
		char *num_head;
		num_head=&word[0];
		num_length=strlen(num_head);
		for(i=num_length-1;i>=0;i--)
			num_value=num_value+(int(word[i])-48)*pow(10,(num_length-i-1));
		temp1->value=num_value;//把數(shù)字的值賦給結(jié)點
		input2(temp1);//加入到數(shù)字鏈表中
		out1(ch);//處理此界符
	}
	else if(flag==2)//如果后面為數(shù)字
		out2(ch,word);//形成字符串
	else if(flag==3)//如果后面為字母報錯
	{
		err=1;
		cout<<nl<<"行  "<<"錯誤:數(shù)字后面跟字母!"<<endl;
		return;
	}
	else if(flag==4 || flag==5 || flag==6)//如果后面為空格換行或結(jié)束
	{
		numcount++;
		temp->code=26;
		temp->num=numcount;
		input1(temp);
		temp1->num=numcount;
		int i,num_value=0,num_length;//字符串轉(zhuǎn)化為數(shù)字
		char *num_head;
		num_head=&word[0];
		num_length=strlen(num_head);
		for(i=num_length-1;i>=0;i--)
			num_value=num_value+(int(word[i])-48)*pow(10,(num_length-i-1));
		temp1->value=num_value;//把數(shù)字的值賦給結(jié)點
		input2(temp1);//加入到數(shù)字鏈表中
		return;
	}
	else
	{
		err=1;
		cout<<nl<<"行  "<<"錯誤:非法字符!  "<<ch<<endl;
		return;
	}
}
void out3(char ch,string word)//處理字符
{
	token *temp;//初始化
	temp=new token;
	temp->code=-1;
	temp->num=-1;
	temp->next=NULL;
	str *temp1;//字符表
	temp1=new str;
	temp1->num=-1;
	temp1->word="";
	temp1->next=NULL;
	int flag=0;
	word=word+ch;
	ch=fgetc(fp);
	flag=judge(ch);
	if(flag==1 || flag==4 || flag==5 || flag==6)
	{
		if(word=="and" || word=="if" || word=="then" || word=="while" || word=="do" || word=="int")
		{
			if(word=="and")
				temp->code=31;
			else if(word=="if")
				temp->code=32;
			else if(word=="then")
				temp->code=33;
			else if(word=="while")
				temp->code=35;
			else if(word=="do")
				temp->code=36;
			else if(word=="int")
				temp->code=37;//給關(guān)鍵字編碼
			input1(temp);
			if(flag==1)
				out1(ch);
			else if(flag==4 || flag==5 || flag==6)
				return;
		}
		else if(flag==1)
		{
			wordcount++;
			temp->code=25;
			temp->num=wordcount;
			input1(temp);
			temp1->num=wordcount;
			temp1->word=word;
			input3(temp1);
			out1(ch);
		}
		else if(flag==4 || flag==5 || flag==6)
		{
			wordcount++;
			temp->code=25;
			temp->num=wordcount;
			input1(temp);
			temp1->num=wordcount;
			temp1->word=word;
			input3(temp1);
		}
		return;
	}
	else if(flag==2 || flag==3)
		out3(ch,word);//形成字符串
	else
	{
		err=1;
		cout<<nl<<"行  "<<"錯誤:非法字符!  "<<ch<<endl;
		return;
	}
}
void input1(token *temp)
{
	if(token_head->next == NULL)
	{
		token_head->next=temp;
		token_tail->next=temp;
	}
	else
	{
		token_tail->next->next=temp;
		token_tail->next=temp;
	}
}
void input2(number *temp)
{
	if(number_head->next == NULL)
	{
		number_head->next=temp;
		number_tail->next=temp;
	}
	else
	{
		number_tail->next->next=temp;
		number_tail->next=temp;
	}
}
void input3(str *temp)
{
	if(string_head->next == NULL)
	{
		string_head->next=temp;
		string_tail->next=temp;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品少妇一区二区三区| 欧美精品第1页| 欧美亚男人的天堂| 久久综合色之久久综合| 亚洲日本青草视频在线怡红院| 舔着乳尖日韩一区| av一二三不卡影片| 久久丝袜美腿综合| 免费观看成人av| 欧美日韩精品久久久| 亚洲婷婷国产精品电影人久久| 国产资源在线一区| 欧美巨大另类极品videosbest| 中文字幕在线不卡一区二区三区| 另类的小说在线视频另类成人小视频在线 | 91精品国产综合久久久久久| 中文字幕乱码亚洲精品一区| 久久精品国产精品亚洲精品 | 9191精品国产综合久久久久久| 中文字幕佐山爱一区二区免费| 国产精品亚洲午夜一区二区三区| 欧美一区二区三区在线观看视频| 亚洲一二三四区| 日本二三区不卡| 《视频一区视频二区| 国产成人a级片| 久久精品这里都是精品| 韩国欧美国产1区| 666欧美在线视频| 天堂蜜桃91精品| 69精品人人人人| 日本欧美加勒比视频| 91麻豆精品国产91久久久久| 亚洲一区二区在线视频| 色屁屁一区二区| 亚洲综合在线免费观看| 在线观看亚洲a| 亚洲大片一区二区三区| 欧美酷刑日本凌虐凌虐| 日本在线不卡视频| 26uuu久久天堂性欧美| 国产美女视频一区| 国产精品视频九色porn| 91免费在线看| 午夜不卡在线视频| 日韩午夜精品视频| 国产综合久久久久久久久久久久| 久久人人爽人人爽| eeuss国产一区二区三区| 亚洲日本va午夜在线影院| 色婷婷综合中文久久一本| 亚洲精品日日夜夜| 制服丝袜中文字幕亚洲| 美女视频第一区二区三区免费观看网站| 91精品国产麻豆| 国产精品一二三区| 亚洲乱码国产乱码精品精小说 | 国产精品理论片| 91影院在线观看| 婷婷久久综合九色国产成人| 亚洲精品一区二区三区福利| 99视频在线观看一区三区| 亚洲一二三四在线| 久久综合狠狠综合久久综合88| 大白屁股一区二区视频| 亚洲一区二区三区在线| 日韩欧美高清dvd碟片| 成人精品视频网站| 天涯成人国产亚洲精品一区av| 久久久国产精华| 色婷婷综合久久久| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲欧美一区二区三区孕妇| 欧美老肥妇做.爰bbww| 丁香五精品蜜臀久久久久99网站| 一区二区成人在线观看| 国产亚洲欧美一区在线观看| 欧美亚洲综合网| 国产精品自拍三区| 日韩和欧美一区二区三区| 国产精品美女久久久久久 | 视频一区二区欧美| 国产精品情趣视频| 精品三级av在线| 欧美日韩在线电影| 99久久99久久久精品齐齐| 另类中文字幕网| 亚洲成人资源网| 国产精品福利在线播放| 久久欧美中文字幕| 日韩视频123| 精品视频一区三区九区| 99久久婷婷国产| 国产黄色精品网站| 麻豆精品视频在线观看视频| 亚洲狠狠爱一区二区三区| 亚洲国产精品ⅴa在线观看| 精品久久久久久久人人人人传媒 | 国产亚洲一区二区三区四区| 日韩一区二区三区视频在线观看| 欧美午夜精品理论片a级按摩| 成人精品免费看| 国产一区二区按摩在线观看| 日本亚洲视频在线| 亚州成人在线电影| 亚洲国产精品久久不卡毛片| 国产精品久久久久精k8| 国产日韩亚洲欧美综合| 久久久久久久久久久久久夜| 日韩视频永久免费| 91精品国产综合久久精品性色| 色94色欧美sute亚洲13| 91国在线观看| 在线亚洲欧美专区二区| 色视频成人在线观看免| 欧美亚洲精品一区| 欧美片网站yy| 在线综合+亚洲+欧美中文字幕| 欧美一级理论片| 日韩免费电影一区| 久久先锋资源网| 国产欧美精品一区二区三区四区 | 7777精品伊人久久久大香线蕉的 | 丝袜亚洲另类欧美| 日韩成人dvd| 蜜桃av噜噜一区| 国产毛片精品一区| 国产成人精品亚洲777人妖| 丁香婷婷综合五月| www.色综合.com| 欧美中文字幕不卡| 91麻豆精品国产91久久久久| 欧美xxxxx裸体时装秀| 26uuu亚洲| 国产精品不卡一区二区三区| 一区二区三区欧美在线观看| 亚洲午夜国产一区99re久久| 日本视频一区二区| 国产成人午夜精品影院观看视频 | 精品一区二区在线播放| 国产精品一区二区在线观看网站| 国产69精品久久久久毛片| 99久久久国产精品免费蜜臀| 91久久精品日日躁夜夜躁欧美| 555夜色666亚洲国产免| 精品电影一区二区| 综合av第一页| 蜜臀久久99精品久久久久宅男| 国产+成+人+亚洲欧洲自线| 91免费版在线看| 欧美一区二区三区在线视频 | 成+人+亚洲+综合天堂| 欧美影视一区二区三区| 精品国产免费一区二区三区四区 | 亚洲电影在线免费观看| 国产精品18久久久久久久久 | 风间由美性色一区二区三区| 在线观看欧美日本| 久久日韩精品一区二区五区| 一区二区三区四区不卡在线| 韩国女主播一区二区三区| 欧洲一区二区av| 久久精品一区二区三区av| 亚洲一区二区视频在线观看| 国产电影精品久久禁18| 欧美精品一二三区| ...av二区三区久久精品| 全部av―极品视觉盛宴亚洲| 99视频一区二区| 久久久精品国产免大香伊| 亚洲123区在线观看| 99精品国产热久久91蜜凸| 久久综合狠狠综合久久综合88| 天天操天天色综合| 91视频你懂的| 亚洲国产成人午夜在线一区| 久久99这里只有精品| 欧美日韩精品欧美日韩精品一 | 五月综合激情婷婷六月色窝| 成人听书哪个软件好| 精品国产一二三区| 男人操女人的视频在线观看欧美| 欧美视频精品在线| 亚洲欧美日韩在线| 成人h版在线观看| 国产日韩欧美精品在线| 国产精品一区二区三区四区| 欧美一区二区三区系列电影| 午夜成人免费电影| 欧美色精品在线视频| 亚洲一区自拍偷拍| 91年精品国产| 亚洲免费资源在线播放| www.视频一区| 亚洲精品免费在线| 91免费国产在线观看| 1024精品合集| 色国产综合视频| 国产专区欧美精品| 精品捆绑美女sm三区|