📄 最新版版.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 + -