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

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

?? 實驗一詞法分析.cpp

?? 編譯原理詞法分析程序
?? CPP
字號:
#include<conio.h>
#include<iostream>
#include<iomanip>
#include<string.h>
#include<fstream>
#include <stdlib.h> 
using namespace std;
int checkprotect(char t[]);
void checkicon(char t[]);

struct node
{
	char t[10];
};
struct node1
{
	char item[15];
	node1 *next;
};
int hr=0;
int kline=0;
int op=0;
node1 *head=NULL;//保存標識符的指針
static int init=0;
void main()
{
  
char filename[30];
		cout<<"*******************"<<endl;
	cout<<"姓名: 張  帆"<<endl;
	cout<<"班級: 04(3)班"<<endl;
	cout<<"學號: 200433101093"<<endl;
	cout<<"*******************"<<endl;
	cout<<"輸入要編譯的程序名: ";
	char c[20];
	cin>>c;
	fstream file;
	file.open(c,ios::in);
	char newline[80]=" ";
	char word[80]=" ";
	char temp[80]=" ";
	int em;
	node1 *p=NULL;
	node1 *q=NULL;

	int j=0;
	int m=0;
	int n=0;
	int newlength=0;
	int wordlength=0;
	int flag;
	int nextline=0;
	while(1)
	{	
		
		file.getline(newline,80);
		if(strcmp(newline,"")==0)
			break;
	    kline++;//記錄當前的行數
		newlength=strlen(newline);//讀取新的一行的長度

	
		//下面進行單行的分析,以空格為界
		//每次讀入一段字符,進行相應的操作
		for(j=0;j<newlength;j++)
		{
			m=0;//保存每一個單詞都是從t字符數組的第一位開始的

			while(newline[j]==' ')
			{
				j++;
			}
//****************************************************************************************************
//字符常數缺右邊的單引號(字符常數要求左、右邊用單引號界定,不能跨行);
			if(newline[j]==39)
			{
				m=0;
				for(j++;(j<newlength)&&(newline[j]!=39);j++,m++)
						temp[m]=newline[j];
				if(j==newlength)
				{
					
					if(hr==0)
					{
						hr=1;
					   
					}
					cout<<"miss right ' at line "<<kline<<endl;
					flag=strlen(temp);
				    for(em=0;em<flag;em++)
					{
						temp[em]=0;
					}
					flag=strlen(word);
				    for(em=0;em<flag;em++)
					{
						word[em]=0;
					}
				    break;
				}
				else
				{
					p=head;
					for(m=1;p!=NULL;q=p,p=p->next,m++)
					{
						if(strcmp(p->item,temp)==0)
						{   
							if(hr==0){
								cout<<"(38,"<<m<<") ";
							op++;
					        if(op%5==0)
						       cout<<endl;
							break;}
						}
					}
					if(head==NULL)
					{
						head=new node1;
						strcpy(head->item,temp);
						head->next=NULL;
						if(hr==0){
						cout<<"(38,1) ";
						op++;
						if(op%5==0)
							cout<<endl;}
					}
					else
						if(p==NULL&&q!=NULL)
						{
							q->next=new node1;
						    strcpy(q->next->item,temp);
						    q->next->next=NULL;
							if(hr==0){
						    cout<<"(38,"<<m<<") ";
							op++;
					        if(op%5==0)
								cout<<endl;}
						}
					j++;
					flag=strlen(temp);
				    for(em=0;em<flag;em++)
					{
						temp[em]=0;
					}
					flag=strlen(word);
				    for(em=0;em<flag;em++)
					{
						word[em]=0;
					}

				}

			}
//*************************************************************************************************
//注釋部分缺右邊的界符*/(注釋要求左右邊分別用/*和*/界定,不能跨行)。
			if(newline[j]=='/'&&newline[j+1]=='*')
			{
				for(j=j+2;j<newlength-1;j++)
					if(newline[j]=='*'&&newline[j+1]=='/')
					break;
				if(j==newlength-1)
				{
					
					if(hr==0)
					{
						hr=1;
					
					}
					cout<<"miss right '*/' at line "<<kline<<endl;
				    break;
				}
				else
				{ 
					j++;
					continue;
				}

			}


//**************************************************************************************************

//**************************************************************************************************
	        //以空格為界,將讀入的一行字符進行隔離分析
			while(newline[j]!=' '&&newline[j]!=39&&j<newlength)
			{
				word[m]=newline[j];
				m++;
				j++;
			}
			if(newline[j]==39)
				j--;
			wordlength=strlen(word);
			for(m=0;m<wordlength;m++)
			{
			if(!(
				(word[m]>=65&&word[m]<=91)
				||(word[m]>=97&&word[m]<=122)
				||(word[m]>=39&&word[m]<=62)
				||(word[m]==32)
				||(word[m]==93)
				))
			{
				if(hr==0)
				{
					hr=1;
				}
				cout<<"illegal sympol at line"<<kline<<endl;
				wordlength=0;
				break;
			}
			}

			//對讀出來的的單詞進行分析
	
			//讀取要分析的字符串長度
			for(n=0;n<wordlength;n++)
			{
				m=0;
				while(
					(n<wordlength)&&(word[n]!='+')
					&&(word[n]!='-')&&(word[n]!='*')
					&&(word[n]!='/')&&(word[n]!='=')
					&&(word[n]!='<')&&(word[n]!='>')
					&&(word[n]!=':')&&(word[n]!='.')
					&&(word[n]!=';')&&(word[n]!=','))
				{
					 temp[m]=word[n];
					 n++;
					 m++;
				}//當字符不是單界符且字符還沒有讀完時,就將其讀到temp中
				if(m!=0)//m不等于零,表示在temp中有東西
				{//判斷讀到的字符是啥東西
				
					m=checkprotect(temp);
					if(m==36)
					{
						checkicon(temp);
					}

				}
				if(n<=wordlength)
				{
				
					switch(word[n])
					{
					case '+':{if(hr==0){cout<<"(43,-) ";op++;if(op%5==0)cout<<endl;break;}}
					case '-':{if(hr==0){cout<<"(45,-) ";op++;if(op%5==0)cout<<endl;break;}}
					case '*':{if(hr==0){cout<<"(41,-) ";op++;if(op%5==0)cout<<endl;break;}}
					case '=':{if(hr==0){cout<<"(56,-) ";op++;if(op%5==0)cout<<endl;break;}}
					case '<':{
						if(n+1<=wordlength)
							if(word[n+1]=='=')
							{if(hr==0){cout<<"(54,-) ";op++;if(op%5==0)cout<<endl;n++;}}
							else if(word[n+1]=='>')
							{if(hr==0){cout<<"(55,-) ";op++;if(op%5==0)cout<<endl;n++;}}
							else
							{if(hr==0){cout<<"(53,-) ";op++;if(op%5==0)cout<<endl;}}
							break;
							 }
					case '>':{
						if(n+1<=wordlength)
							if(word[n+1]=='=')
							{if(hr==0){cout<<"(58,-) ";op++;if(op%5==0)cout<<endl;n++;}}
							else
							{if(hr==0){cout<<"(57,-) ";op++;if(op%5==0)cout<<endl;}}
							break;
							 }
					case ':':{
						if(n+1<=wordlength)
							if(word[n+1]=='=')
							{if(hr==0){cout<<"(51,-) ";op++;if(op%5==0)cout<<endl;n++;}}
							else
							{if(hr==0){cout<<"(50,-) ";op++;if(op%5==0)cout<<endl;}}
							break;
						
							 }
					case '.':{
						if(n+1<=wordlength)
							if(word[n+1]=='.')
							{if(hr==0){cout<<"(47,-) ";op++;if(op%5==0)cout<<endl;n++;}}
							else
							{if(hr==0){cout<<"(46,-) ";op++;if(op%5==0)cout<<endl;}}
							break;
							 }
					case ';':{if(hr==0){cout<<"(52,-) ";op++;if(op%5==0)cout<<endl;break;}}
					case ',':{if(hr==0){cout<<"(44,-) ";op++;if(op%5==0)cout<<endl;break;}}
					case '/':{if(hr==0){cout<<"(48,-) ";op++;if(op%5==0)cout<<endl;break;}}
		


					}
				}
			

                 flag=strlen(temp);
				for(em=0;em<flag;em++)
				{
				    temp[em]=0;
				}

			}
			flag=strlen(word);
			for(em=0;em<flag;em++)
			{
				word[em]=0;
			}
		
		
		}
		for(em=0;em<strlen(newline);em++)
		{
			newline[em]=' ';
		}
		

	}	
	file.close();
	_getch();
	


}
void checkicon(char ty[])
{
	int length=strlen(ty);
	int number=1;
    node1 *p=NULL;
	node1 *q=NULL;
	int k=1;
	if(length==1)
	{
		if(ty[0]=='('){if(hr==0){cout<<"(39,-) ";op++;if(op%5==0)cout<<endl;return;}}
		if(ty[0]==')'){if(hr==0){cout<<"(40,-) ";op++;if(op%5==0)cout<<endl;return;}}
		if(ty[0]=='['){if(hr==0){cout<<"(59,-) ";op++;if(op%5==0)cout<<endl;return;}}
		if(ty[0]==']'){if(hr==0){cout<<"(60,-) ";op++;if(op%5==0)cout<<endl;return;}}
	    if(ty[0]=='/'){if(hr==0){cout<<"(48,-) ";op++;if(op%5==0)cout<<endl;return;}}
		
	}

	for(int qw=0;qw<length;qw++)
	{
		if(ty[qw]<'0'||ty[qw]>'9')
		{
			number=0;
			break;
		}
	}
    if(number==0)			
	{
		if(ty[0]>='0'&&ty[0]<='9')
		{
			
			if(hr==0)
			{
				hr=1;
				
			}
			cout<<"illegal id at line"<<kline<<endl;
		    return;
		}
		for(qw=0;qw<length;qw++)
		{
			if((ty[qw]=='(')||(ty[qw]==')')||(ty[qw]=='/')||(ty[qw]=='[')
				||(ty[qw]==']')||(ty[qw]==39))
			{
			if(hr==0)
			{
				hr=1;
			
			}
				cout<<"illegal id at line"<<kline<<endl;
				return;
			}
		}
	}
    for(p=head;p!=NULL;q=p,p=p->next,k++)
	{
		if(strcmp(p->item,ty)==0)
		{
			if(number==0)
			{
				if(hr==0){cout<<"(36,"<<k<<") ";op++;if(op%5==0)cout<<endl;}
				
			}
			else
			{
				if(hr==0){cout<<"(37,"<<k<<") ";op++;if(op%5==0)cout<<endl;}
			}
			break;
		}
	}
	if(head==NULL)
	{
		head=new node1;
		strcpy(head->item,ty);
		head->next=NULL;
	    if(number==0)
		{
			if(hr==0){cout<<"(36,"<<k<<") ";op++;if(op%5==0)cout<<endl;}
		}
		else
		{
			if(hr==0){	cout<<"(37,"<<k<<") ";op++;if(op%5==0)cout<<endl;}
		}
	}
	else 
		if(p==NULL&&head!=NULL)
		{
			q->next=new node1;
		    strcpy(q->next->item,ty);
		    q->next->next=NULL;
		    if(number==0)
			{
				if(hr==0){cout<<"(36,"<<k<<") ";op++;if(op%5==0)cout<<endl;}
			}
			else
			{
				if(hr==0){cout<<"(37,"<<k<<") ";op++;if(op%5==0)cout<<endl;}
			}
		}
	
}

int checkprotect(char ty[])
{
	 static node f[36];
     if(init==0)
	 {  
		
	     strcpy(f[1].t,"and");
	     strcpy(f[2].t,"array");
	     strcpy(f[3].t,"begin");
	     strcpy(f[4].t,"bool");
	     strcpy(f[5].t,"call");
	     strcpy(f[6].t,"case");
	     strcpy(f[7].t,"char");
	     strcpy(f[8].t,"constant");
	     strcpy(f[9].t,"dim");
	     strcpy(f[10].t,"do");
	     strcpy(f[11].t,"else");
	     strcpy(f[12].t,"end");
	     strcpy(f[13].t,"false");
	     strcpy(f[14].t,"for");
	     strcpy(f[15].t,"if");
	     strcpy(f[16].t,"input");
	     strcpy(f[17].t,"integer");
	     strcpy(f[18].t,"not");
	     strcpy(f[19].t,"of");
	     strcpy(f[20].t,"or");
	     strcpy(f[21].t,"output");
	     strcpy(f[22].t,"procedure");
	     strcpy(f[23].t,"program");
	     strcpy(f[24].t,"read");
	     strcpy(f[25].t,"real");
	     strcpy(f[26].t,"repeat");
	     strcpy(f[27].t,"set");
	     strcpy(f[28].t,"stop");
	     strcpy(f[29].t,"then");
	     strcpy(f[30].t,"to");
	     strcpy(f[31].t,"true");
	     strcpy(f[32].t,"until");
	     strcpy(f[33].t,"var");
	     strcpy(f[34].t,"while");
		 strcpy(f[35].t,"write");
	     init++;
	 }
	 for(int i=1;i<36;i++)
		 if(strcmp(f[i].t,ty)==0)
		 {
			 if(hr==0){
				 if(i<10)
					 cout<<"("<<i<<" ,-) ";
				 else 
					 cout<<"("<<i<<",-) ";
				 op++;if(op%5==0)cout<<endl;}
			 break;
		 }

	return i;
}	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91捆绑美女网站| 国产精品嫩草久久久久| 中文字幕在线一区免费| 日韩成人午夜精品| 91年精品国产| 国产精品视频你懂的| 日韩 欧美一区二区三区| 99久久99久久免费精品蜜臀| 日韩精品一区二区在线观看| 夜夜亚洲天天久久| 成人午夜视频免费看| 欧美成va人片在线观看| 亚洲mv在线观看| 一本色道久久综合精品竹菊| 国产三级一区二区三区| 麻豆精品久久精品色综合| 欧美色图在线观看| 亚洲人成亚洲人成在线观看图片 | 日韩精品专区在线| 亚洲综合激情小说| 在线观看国产91| 中文字幕一区二区三区在线不卡| 国产美女主播视频一区| 欧美va天堂va视频va在线| 亚洲成人资源在线| 欧美色成人综合| 午夜私人影院久久久久| 欧美日韩黄色影视| 午夜视频在线观看一区二区三区| 欧美在线视频不卡| 亚洲国产精品欧美一二99| 色av一区二区| 亚洲国产wwwccc36天堂| 欧美精品久久99久久在免费线| 一区二区三区.www| 欧美美女网站色| 秋霞电影一区二区| 精品国产免费人成电影在线观看四季 | 欧美一级夜夜爽| 狠狠色综合日日| 国产网站一区二区| 99久久精品国产一区二区三区| 亚洲欧洲精品一区二区三区不卡| 99精品视频一区二区三区| 亚洲欧美一区二区三区国产精品| 色综合中文字幕国产| 亚洲免费资源在线播放| 精品视频一区 二区 三区| 婷婷综合久久一区二区三区| 日韩精品中午字幕| 国产xxx精品视频大全| 亚洲激情自拍偷拍| 91精品国产高清一区二区三区| 卡一卡二国产精品| 国产欧美日韩综合| 色综合天天综合在线视频| 日韩在线一区二区| 久久久久一区二区三区四区| 色综合天天性综合| 日日骚欧美日韩| 久久久蜜桃精品| 欧美影院精品一区| 国产一区二区导航在线播放| 亚洲少妇30p| 日韩三级免费观看| 99久久精品一区二区| 日本在线观看不卡视频| 国产精品乱子久久久久| 欧美一区二区三区视频免费| 成人爽a毛片一区二区免费| 亚洲成va人在线观看| 欧美高清在线精品一区| 正在播放亚洲一区| av资源网一区| 狠狠色综合播放一区二区| 亚洲乱码国产乱码精品精可以看| 欧美电影免费提供在线观看| 99国产精品久久久久久久久久 | 日韩一区二区三| 色婷婷激情一区二区三区| 国精产品一区一区三区mba视频| 亚洲人成伊人成综合网小说| 久久综合狠狠综合久久激情| 欧美系列在线观看| 成人免费高清在线| 精品一区二区在线播放| 亚洲国产另类av| 玉米视频成人免费看| 国产欧美精品在线观看| 欧美xxxxx牲另类人与| 欧美日韩国产片| 91香蕉视频mp4| 成人深夜视频在线观看| 国产麻豆精品theporn| 日韩中文字幕麻豆| 亚洲成人免费av| 一区二区免费在线播放| 亚洲欧美日韩国产综合| 国产精品无人区| 国产片一区二区| 国产亚洲一区二区三区四区| 欧美日韩国产高清一区| 在线亚洲+欧美+日本专区| 91色porny| 91日韩一区二区三区| 99国产精品久| av不卡免费在线观看| 99视频一区二区三区| 大白屁股一区二区视频| 国产成人自拍网| 国产高清久久久久| 豆国产96在线|亚洲| 成人午夜在线视频| 成人深夜福利app| 99国产欧美另类久久久精品| 91亚洲国产成人精品一区二三| 成人中文字幕电影| 91在线porny国产在线看| 99精品国产91久久久久久| 99riav久久精品riav| 91色婷婷久久久久合中文| 色婷婷精品大视频在线蜜桃视频 | 国产传媒欧美日韩成人| 国产91高潮流白浆在线麻豆| 99久久婷婷国产| 欧洲av一区二区嗯嗯嗯啊| 欧美剧情片在线观看| 91精品国产综合久久精品麻豆| 69堂成人精品免费视频| 精品国产三级a在线观看| 国产午夜亚洲精品羞羞网站| 国产精品久久久久久久久晋中| 亚洲三级电影网站| 亚洲一二三四区| 久久精品72免费观看| 成人动漫一区二区在线| 91久久精品国产91性色tv| 91精品婷婷国产综合久久性色 | 老司机午夜精品99久久| 丁香婷婷深情五月亚洲| 欧美在线观看一区二区| 欧美一区在线视频| 国产精品污www在线观看| 尤物视频一区二区| 免费看日韩精品| 99久久免费国产| 91精品国产综合久久久久久漫画| 久久久久久久久伊人| 亚洲一区二区精品久久av| 久久国产三级精品| 色先锋aa成人| 久久精品亚洲国产奇米99| 亚洲乱码国产乱码精品精98午夜 | voyeur盗摄精品| 欧美日韩国产综合久久| 久久久精品蜜桃| 日韩影视精彩在线| 99国产精品久久| 精品第一国产综合精品aⅴ| 亚洲一区二区三区小说| 国产精品1区二区.| 欧美丰满高潮xxxx喷水动漫| 中文字幕人成不卡一区| 久久精品国产一区二区三 | 国产成人自拍网| 欧美丰满美乳xxx高潮www| 国产精品免费免费| 蜜臀av一区二区在线免费观看| 97se狠狠狠综合亚洲狠狠| 精品久久久久久久人人人人传媒 | 日韩毛片在线免费观看| 免费成人你懂的| 欧美视频精品在线| √…a在线天堂一区| 国产又粗又猛又爽又黄91精品| 欧美三级韩国三级日本一级| 中文字幕一区免费在线观看| 激情综合一区二区三区| 欧美高清hd18日本| 亚洲一区二区三区四区的| 成人一区在线观看| 久久久一区二区三区捆绑**| 婷婷开心激情综合| 精品视频一区 二区 三区| 亚洲精品欧美激情| 91小视频在线| 综合久久久久综合| 成人av综合在线| 国产精品久久毛片av大全日韩| 国产精品亚洲人在线观看| 精品免费国产二区三区| 日本欧美一区二区三区| 欧美精品在线观看一区二区| 亚洲国产精品天堂| 欧美日韩免费一区二区三区视频| 亚洲另类在线一区| 91免费国产在线| 亚洲另类一区二区| 欧美网站大全在线观看| 图片区小说区国产精品视频|