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

📄 最新版版.txt

📁 词法分析程序
💻 TXT
字号:
#include<iostream.h>
#include<string.h>
static int M=0;
 char keytxt[27][27]=
{
	"procedure","call","begin","end","var","const",
	"if","then","while","do","for","write","int",
	"program","type","function","array","integer",
	"real","char","boobean","case","of","repeat",
	"until","to","down"
};
 char opatxt[256]=
{
	'+','-','*','/','=','!','<','>'
};
const char opbtxt[256]=
{
	',',';','(',')','{','}','[',']',':','\\'
};
int OP(char a[],int i){
	char op[10]={'+','-','*','/','=','!','<','>'};
    for (int t=0;t<10;t++) 
         if(a[i]==op[t])
             return 1;
     return 0;

} 
int Boundary(char a[],int i){
     
     char arr[10]={',',';','(',')','{','}','[',']',':','\\'};
     for(int t=0;t<10;t++) 
         if(a[i]==arr[t])
             return 2;
     return 0;
}
// void key(char *a[],int i,int low){}
 //void num(char a[],int i,int low){}
 void BIG(char a[],int low,int i){
	 
	if(i==low){
		 if(a[i]>='0'&&a[i]<='9'){ 
			 cout<<M<<""<<"("<<'4'<<','<<a[i]<<")"<<endl;
			 M++;
		 }
		 else{
			 if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'){cout<<M<<""<<'('<<'5'<<','<<a[i]<<')'<<endl;M++;}
			 else{cout<<"error"<<endl;M++;}
		 }
	 }
	else{
//cout<<low<<" "<<i<<endl;
		if(a[low]>='0'&&a[low]<='9'){
			int f=4;
			for(int j=low;j<=i;j++){
				if(a[j]>='0'&&a[j]<='9')f+=0;
				else f+=1;
				//cout<<"ff="<<f<<endl;
			}
			if(f==4){int low1=low; char ss[100];for(int k=0;k<=i-low;k++){ss[k]=a[low1++];}ss[k]=0;cout<<M<<'('<<f<<','<<ss<<')'<<endl;M++;}
			else{ cout<<"(界符/操作符间/整个字符串)含有数字的字符类型不正确"<<endl;}
		}
		else{
			char s[100];
			int low2=low;
			for(int k=0;k<=i;k++){s[k]=a[low2++];}s[k]=0;
			int l=0;
            for(int kk=0;kk<=26;kk++){if(strcmp(s,keytxt[kk])==0)l=1;}
			if(l==0){cout<<M<<'('<<'5'<<','<<s<<')'<<endl;M++;}
			else{cout<<M<<'('<<'3'<<','<<s<<')'<<endl;M++;}

		}
	}
}

void analyst(char a[],int max)
{
	//cout<<"max"<<max<<endl;
	//cout<<"a"<<a<<endl;
	int aa[100];
	int i=0;
	if(a[0]=='#'){cout<<"end"<<endl;return;}
	if(a[max]=='#'){max=max-1;}
	//cout<<"max"<<max<<endl;
    int low=0;
	for(i;i<=max;i++){
	  	aa[i]=OP(a,i);
		//cout<<"aa[]="<<aa[i];
		if(aa[i]==0){aa[i]=Boundary(a,i);}
		
		if(aa[i]!=0||i==max){
			if(i==max){
				if(aa[low]==0&&aa[max]!=0){
					BIG(a,low,i-1);
                       switch(aa[i]){
		                  case 1:cout<<M<<""<<'('<<'1'<<','<<a[i]<<')'<<endl;M++;break;
			              case 2:cout<<M<<""<<'('<<'2'<<','<<a[i]<<')'<<endl;M++;break;
					   }
				}
				else{//cout<<"jjj="<<aa[max];
					if(aa[low]==0&&aa[max]==0)BIG(a,low,i);
					else{
						switch(aa[i]){
		                  case 1:cout<<M<<""<<'('<<'1'<<','<<a[i]<<')'<<endl;M++;break;
			              case 2:cout<<M<<""<<'('<<'2'<<','<<a[i]<<')'<<endl;M++;break;
					   }
					}
				}
			}
			else{
				if(low!=i)BIG(a,low,i-1);
                      switch(aa[i]){
		                  case 1:cout<<M<<""<<'('<<'1'<<','<<a[i]<<')'<<endl;M++;break;
			              case 2:cout<<M<<""<<'('<<'2'<<','<<a[i]<<')'<<endl;M++;break;
					  }
					  low=i+1;
			}
		}
	}
}
void show(int i){
	
	if(i==1||i==4) {
		cout<<"关键字如下:";
		for(int t=0;t<=26;t++){
			cout<<keytxt[t]<<"  ";if(t%10==0)cout<<endl;
		} cout<<endl; 
	}

	if(i==2||i==4)cout<<"运算符如下:"<<opatxt<<endl;
	if(i==3||i==4)cout<<"界符如下:"<<opbtxt<<endl;
	
 
}

void main(void){
	int m;
	int mm=0;
	char M[100][100];
	char y;
	int e;
	cout<<"字符串末尾输入'#'可使程序结束"<<endl;
	cout<<"查看选项:1-关键字  2-运算符   3-界符  4-全选"<<endl;
	cout<<"是否查看(y/n):";
	cin>>y;
	cout<<endl;
	if(y=='y'){
		   cout<<"请输入序号:";
			cin>>e;
			show(e);}
	cout<<"进入测试"<<endl;
	char s[256];
    char temp[256][256];
	int i=0;
	do{
		cin>>s;
		i=strlen(s);
		strcpy(M[mm],s);
		mm++;
	//analyst(s,i-1);	
	}while(s[i-1]!='#');
	for(int j=0;j<mm;j++){
		m=strlen(M[j]);
			analyst(M[j],m-1);	
	}

  }


⌨️ 快捷键说明

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