⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yufa.cpp

📁 此代码的功能是实现语法分析器
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<iostream.h>
scaner();
char prog[80],token[8];
char ch,a='a';
int syn=0,p,m,n,sum;
char *rwtab[6]={"begin","if","then","while","do","end"};
	void main()
		{
		 p=0;
		 cout<<"please input string:\n";


		 do {
			 cin>>ch;
			 prog[p]=ch;
			 p=p+1;
			}while(ch!='#');

		 p=0;
		 do
		 { 
			ch = prog[p++];
			scaner();
		   switch(syn)
		   {  
		   	case 11 :  cout<<"("<<syn<<","<<sum<<")"<<endl; break;
			  case -1 :  cout<<"error";break; 
			  default :  cout<<"("<<syn<<","<<token<<")"; break;
		   }
		 }while(syn!=0);
		}
		//词法扫描程序:
scaner()
	{ 
		
		   for(n=0;n<8;n++) token[n]=NULL;
		   //一个字符;
		   while(ch==' ')  ch = prog[p++]; 
		  
	 if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
		   {
			   
			   m=0;
			   while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
			   {	   
					token[m]=ch;
					m++;
					ch=prog[p++];
			   }
			   token[m]='\0';
			   			   
			   p--;
			   syn = 10;
			   for(n=0;n<6;n++)
	
		   {
				   if(strcmp(token,rwtab[n])==0)
				   {
					   syn=n+1;
				   }
			   }
		  }
	 else  if(ch>='0'&&ch<='9')
	 { 
		 while(ch>='0'&&ch<='9')			
		 {
			 sum=sum*10+ch-'0';
			 ch = prog[p++];     //读下一个字符;
		 }
		p--;   //回退一个字符;
		syn=11;
	} 
	else
	{   
		switch(ch)
		   {
			case '<': m=0;token[m++]=ch;
					ch = prog[p++];
					if(ch=='>')
					{ syn=21;
					  token[m++]=ch;
					}
					else if(ch=='=')
					{ syn=22;
					  token[m++]=ch;
					}
					  else
					  { syn=20;  
					     p--; 
					  }
					break;
			case '>':  m=0;token[m++]=ch;
					  ch = prog[p++];
					 if(ch=='=')
					 {  syn=24; 
					   token[m++]=ch;
					 }
					 else
					 {  syn = 23; 
						p--;   
					 }
					 break;
			case ':': m=0;token[m++]=ch;
					  ch = prog[p++];
					  
					 if(ch=='=')
					 { syn = 18;
					    token[m] = ch;
					 }
					 else
					 {   syn = 17;
					    p--;
					 }
					 break;
			 case '+': syn=13;token[0]=ch;break;
			 case '-': syn=14;token[0]=ch;break;
			 case '*': syn=15;token[0]=ch;break;
			 case '/': syn=16;token[0]=ch;break;
			 case ';': syn=17;token[0]=ch;break;
             case '=': syn=25;token[0]=ch;break;
			 case ')': syn=27;token[0]=ch;break;
			 case '(': syn=28;token[0]=ch;break;
			 case '#': syn=0; token[0]=ch;break;
			 default : syn = -1 ;break;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -