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

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

?? main.cpp

?? 語法分析器,很好的,同學寫的,認為不錯 .
?? CPP
字號:
//04級計算機(2)班 作者:承霖  完成時間:2006年4月26日 

#include <iostream.h>
#include "Stack.cpp"
#include "string.h"
#include <conio.h>

struct TABLE
{
	char NonTerminal;
	char Terminal;
	char *Producer;
//	string Producer;
}table[]={{'E','i',"TM"},{'E','(',"TM"},
		{'M','+',"+TM"},{'M',')',"ε"},{'M','#',"ε"},
		{'T','i',"FN"},{'T','(',"FN"},
		{'N','+',"ε"},{'N','*',"*FN"},{'N',')',"ε"},{'N','#',"ε"},
		{'F','i',"i"},{'F','(',"(E)"}}; //預測分析表數組
//實現函數列表
char VNonterminal[] = {'E','T','M','N','F'};//非終結符數組
char VTerminal[] = {'i','+','*','(',')'};   //終結符數組
char VTerminal1[] = {'i','+','*','(',')','#'}; //用于輸出預測表
void GramScanner(Stack<char> &stack);  //語法分析實現函數
bool IsTerminal(char c);               //判斷是否為終結符
void OutputError();                    //出錯處理
void ReversePush(char nonterminal,char termianl,Stack<char> &stack); //反序壓棧實現函數
bool IsInPredictTable(char nonterminal,char terminal);               //判斷是否在預測表中
int FindIndex(char nonterminal,char terminal);                       //查找對應項在預測表中的位置
void PrintResult(Stack<char>& stack,char* c,int index,char nonterminal);//打印輸出結果
bool IsNonterminal(char c);                                           //判斷是否為非終結符
void PrintPredictTable();                                              //打印預測表
//主函數
int main()
{
	Stack<char> stack;
	cout << "*************************所用的文法如下*********************************\n\n";
	cout<<"E->TM   S->+TM|ε  T->FN  P->*FN|ε  F->(E)|i  \n\n";
	cout << "*************************預測分析表如下*********************************\n\n";
	PrintPredictTable();
	GramScanner(stack);
	return 0;
}
//函數的實現區
void GramScanner(Stack<char> &stack)
{
	stack.Push('#');
	stack.Push('E');
	cout << "******************************輸入句型**********************************\n\n";
	cout << "Input the sentence:";
	
	char ch;
	char popchar;
	bool flag = true;
	int i = 0;	
	char sentence[20];
	while((ch = cin.get()) != '\n')
		sentence[i++] = ch;
	sentence[i] = '\0';
	cout << endl;
	cout << "分析已經完成,請按任意鍵查看結果" << endl;
	getch();
	char *p = sentence;
	ch = *p;
	cout << "\n**************************分析過程如下**********************************\n\n\n";
	cout << "步驟" << "\t\t" << "符號棧" << "\t\t" << "輸入串" << "\t\t" << "所用產生式" << endl;
	while(flag == true)
	{
		PrintResult(stack,p,FindIndex(popchar,ch),popchar);
		popchar = stack.Pop();
		
		if(IsTerminal(popchar))
		{
			if(popchar == ch)
			{
			//	ch = cin.get();
				*(p++) = ' ';
				ch = *p;
			}
			else
			{
				OutputError();
			}
		}
		else if(popchar == '#')
		{
			if(popchar == ch)
				flag = false;
			else 
			{
				OutputError();
			}
		}
		else if(IsInPredictTable(popchar,ch))
		{
			ReversePush(popchar,ch,stack);
			
		}
		else 
		 {
			 OutputError();
			 break;
		 }
	}
	cout << endl;
	cout << "******************************輸出完成**********************************"<<endl;
}
bool IsTerminal(char c)
{
	int n = sizeof(VTerminal)/sizeof(char);
	int i = 0;
	for(i = 0;i <= n;i++)
	{
		if(c == VTerminal[i])
			break;
	}
	if(i <= n)
		return true;
	else return false;
}
void OutputError()
{
	cout << "there is an error here!" << endl;
}

bool IsInPredictTable(char nonterminal,char terminal)
{
	if(FindIndex(nonterminal,terminal) != -1)
		return true;
	else return false;
}
void ReversePush(char nonterminal,char terminal,Stack<char> &stack)
{
	int i = FindIndex(nonterminal,terminal);
	if(strcmp(table[i].Producer,"ε") != 0) 
	{
		int len = strlen(table[i].Producer);
		char *temp;
		temp = new char[len + 1];
		strcpy(temp,table[i].Producer);
		for(int j = len-1;j >= 0;j--)
			stack.Push(temp[j]);
	}
}
int FindIndex(char nonterminal,char terminal)
{
	int i = 0;
	int n = sizeof(table)/sizeof(TABLE);
	for(;i <= n;i++)
	{
		if(nonterminal == table[i].NonTerminal && terminal == table[i].Terminal)
			break;
	}
	if(i <= n)
		return i;
	else return -1;
}
void PrintResult(Stack<char>& stack,char* c,int index,char nonterminal)
{
	static int i = 0;

	cout << i++ << "\t\t";
	stack.PrintElem();
	cout << "\t\t";
	cout << c;
	cout << "\t\t";
	if(index != -1 && IsNonterminal(nonterminal))
		cout << nonterminal << "->" << table[index].Producer;
	cout << endl;
}
bool IsNonterminal(char c)
{
	int n = sizeof(VNonterminal)/sizeof(char);
	int i = 0;
	for(i = 0;i <= n;i++)
	{
		if(c == VNonterminal[i])
			break;
	}
	if(i <= n)
		return true;
	else return false;
}
void PrintPredictTable()
{
	int n = sizeof(VTerminal1)/sizeof(char);
//	cout << n;
	cout << "\t";
	for(int i = 0;i < n;i++)
	{
		cout << VTerminal1[i];
		cout << "\t";
	}
	cout << endl;
	int m = sizeof(VNonterminal)/sizeof(char);
	for(i = 0;i < m;i++)
	{
		cout << VNonterminal[i];
		for(int j = 0;j < n;j++)
		{
			int index;
			cout << "\t";
			if(IsInPredictTable(VNonterminal[i],VTerminal1[j]))
			{
				index = FindIndex(VNonterminal[i],VTerminal1[j]);
				cout << VNonterminal[i] << "->" << table[index].Producer;
			}
		}
		cout << "\n\n";
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91综合一区在线观看| 久久一区二区三区四区| 337p日本欧洲亚洲大胆色噜噜| 中文字幕一区二区三区精华液 | 成人网页在线观看| 日韩精品一区二区三区老鸭窝| 天天亚洲美女在线视频| 欧美午夜一区二区三区免费大片| 国产精品美日韩| 七七婷婷婷婷精品国产| 欧美日韩欧美一区二区| 一区二区在线观看av| 国产成人亚洲综合色影视| 精品国产乱码久久久久久影片| 日本aⅴ免费视频一区二区三区| 欧美性猛交xxxxxx富婆| 亚洲国产三级在线| 欧美日韩国产首页| 天天色图综合网| 91麻豆精品国产91| 久久99热狠狠色一区二区| 欧美伊人精品成人久久综合97| 欧美久久高跟鞋激| 日韩国产一区二| 欧美二区三区91| 另类欧美日韩国产在线| 欧美日韩二区三区| 欧美精品一区二区三区四区 | 亚洲天堂成人在线观看| 色婷婷久久久综合中文字幕| 伊人一区二区三区| 555www色欧美视频| 久久成人久久爱| 久久久国产精品午夜一区ai换脸| 高清不卡一二三区| 一区二区三区在线高清| 色先锋资源久久综合| 一区二区三区成人| 欧美一区二区三区免费大片| 激情成人午夜视频| 亚洲色图欧美偷拍| 欧美日免费三级在线| 蜜桃一区二区三区在线| 久久精品视频在线看| 99久久综合狠狠综合久久| 亚洲高清免费视频| 国产日韩欧美在线一区| 国产91精品一区二区麻豆亚洲| 一区二区三区久久| 久久久精品蜜桃| 91亚洲永久精品| 免费成人在线网站| 亚洲色图丝袜美腿| 日韩精品一区二区三区视频播放| 成人精品一区二区三区四区 | 亚洲成人中文在线| 欧美精品乱人伦久久久久久| caoporn国产精品| 国产永久精品大片wwwapp| 亚洲福利视频一区二区| 国产精品短视频| 国产女主播一区| 久久久国产午夜精品| 337p日本欧洲亚洲大胆精品 | 精品国产青草久久久久福利| 欧美三级在线看| 色哟哟一区二区三区| 97精品久久久午夜一区二区三区 | 在线观看一区二区视频| 成人av网站在线观看| 青青草原综合久久大伊人精品优势| 一区二区在线免费| 亚洲乱码中文字幕| 亚洲免费在线观看| 成人欧美一区二区三区| 欧美国产综合色视频| 国产欧美日韩一区二区三区在线观看| 欧美tk丨vk视频| 欧美变态tickle挠乳网站| 日韩一区二区三区免费看| 欧美一区二区观看视频| 91精品国产91久久久久久一区二区| 欧美精品国产精品| 欧美三级电影在线观看| 欧美一区二区三区男人的天堂| 337p亚洲精品色噜噜狠狠| 欧美肥妇毛茸茸| 欧美一区二区三区人| 欧美白人最猛性xxxxx69交| 精品精品欲导航| 337p日本欧洲亚洲大胆色噜噜| 国产色综合久久| 国产色一区二区| 亚洲男女毛片无遮挡| 亚洲综合在线免费观看| 日精品一区二区三区| 日韩精品福利网| 裸体歌舞表演一区二区| 精品久久一区二区| 国产亚洲成av人在线观看导航 | 91麻豆精品91久久久久久清纯| 日韩一区二区三区高清免费看看| 欧美精品一区二区三区久久久| 99国产精品国产精品毛片| 91小视频免费观看| 欧美日韩国产一级片| www国产精品av| 亚洲欧洲日韩在线| 日韩在线a电影| 国产成人综合视频| 欧美性猛交xxxxxxxx| 精品少妇一区二区三区免费观看 | 亚洲一级不卡视频| 蜜臀av亚洲一区中文字幕| 国产精品996| 欧美午夜精品理论片a级按摩| 欧美一区二区三区四区高清 | 亚洲人成精品久久久久久| 视频一区二区三区在线| 国产尤物一区二区| 欧美亚洲高清一区| 成人理论电影网| 日韩一卡二卡三卡| 最新国产の精品合集bt伙计| 日韩精品一区第一页| 成人午夜精品在线| 欧美日韩和欧美的一区二区| 久久精品免费在线观看| 天天综合网天天综合色| 成人中文字幕在线| 91精品国产综合久久久久久| 中文字幕一区二区三区四区不卡 | 久久99精品久久久久久久久久久久| 国产精品69毛片高清亚洲| 色哦色哦哦色天天综合| 久久这里只有精品6| 亚洲影院免费观看| 成人免费观看视频| 欧美一区二区精品在线| 亚洲另类在线制服丝袜| 粉嫩在线一区二区三区视频| 91精品国产一区二区人妖| 亚洲美女免费视频| 国产麻豆视频一区二区| 555夜色666亚洲国产免| 夜夜揉揉日日人人青青一国产精品| 亚洲欧美在线aaa| 国产成人在线影院| 日韩欧美电影在线| 亚洲成人午夜电影| 91理论电影在线观看| 国产欧美日韩精品一区| 久久不见久久见免费视频7| 欧美日韩亚洲高清一区二区| 日韩伦理电影网| 岛国av在线一区| 中国色在线观看另类| 精品一区精品二区高清| 日韩一区二区高清| 亚洲在线视频免费观看| caoporm超碰国产精品| 国产亲近乱来精品视频| 国产一区不卡视频| ww亚洲ww在线观看国产| 国产精品女主播在线观看| 国产高清精品网站| 久久人人97超碰com| 国内精品久久久久影院一蜜桃| 精品国产免费一区二区三区香蕉 | 国产一区视频网站| 日韩三级高清在线| 免费成人av在线播放| 欧美一区二区三区日韩视频| 久久国产精品99久久久久久老狼| 91精品婷婷国产综合久久性色 | 国产精品亚洲综合一区在线观看| 欧美变态口味重另类| 精品亚洲国内自在自线福利| 久久先锋影音av鲁色资源网| 国产精品每日更新在线播放网址| 国产精品一区二区在线播放| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品一区三区| 国产精品女主播av| 在线精品视频一区二区三四| 日本欧美在线观看| 日韩你懂的电影在线观看| 狠狠色丁香九九婷婷综合五月| 国产三级欧美三级| 91亚洲永久精品| 午夜精品久久久久久久99水蜜桃| 制服丝袜亚洲网站| 国产一区二区影院| 国产精品乱人伦| 97精品国产露脸对白| 亚洲成人黄色影院| 久久久亚洲精品石原莉奈| 97国产精品videossex| 欧美精品粉嫩高潮一区二区| 九色porny丨国产精品|