求一个C++编写的 词法分析器!!!

2024-10-31 22:59:35
推荐回答(2个)
回答1:

#include
#include
using namespace std;

bool jiancha_int(int i,int j,char s[100])
{
if((j-i)==2)
{
if(s[i]=='i')
{
i++;
if(s[i]=='n')
{
i++;
if(s[i]=='t')
{
cout<<"int是一个关键字"<return true;
}
else return false;
}
else return false;
}
else return false;
}
else return false;
}

bool jiancha_if(int i,int j,char s[100])
{
if((j-i)==1)
{
if(s[i]=='i')
{
i++;
if(s[i]=='f')
{
cout<<"if是一个关键字"<return true;
}
else return false;
}
else return false;
}
else return false;
}

bool jiancha_else(int i,int j,char s[100])
{
if((j-i)==3)
{
if(s[i]=='e')
{
i++;
if(s[i]=='l')
{
i++;
if(s[i]=='s')
{
i++;
if(s[i]=='e')
{
cout<<"else是一个关键字"<return true;
}
else return false;
}
else return false;
}
else return false;
}
else return false;
}
else return false;
}

bool jiancha_void(int i,int j,char s[100])
{
if((j-i)==3)
{
if(s[i]=='v')
{
i++;
if(s[i]=='o')
{
i++;
if(s[i]=='i')
{
i++;
if(s[i]=='d')
{
cout<<"void是一个关键字"<return true;
}
else return false;
}
else return false;
}
else return false;
}
else return false;
}
else return false;
}

bool jiancha_while(int i,int j,char s[100])
{
if((j-i)==4)
{
if(s[i]=='w')
{
i++;
if(s[i]=='h')
{
i++;
if(s[i]=='i')
{
i++;
if(s[i]=='l')
{
i++;
if(s[i]=='e')
{
cout<<"while是一个关键字"<return true;
}
else return false;
}
else return false;
}
else return false;
}
else return false;
}
else return false;
}
else return false;
}

char numb[10]={'0','1','2','3','4','5','6','7','8','9'};
char letter[53]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','_','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char digit[63]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','_','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'};
bool Identifier(int x,int y,char s[100])
{
int i,a=x,b=y,n=0,m=1,c=0,a1=x,b1=y,m1=0,n1=1;;
int p[1024];
for(i=0;i<1024;i++)
p[i]=0;
for(i=0;i<53;i++)
{
if(s[x]==letter[i])
{n=1;}
}
if(n==1)
{}
else
{
int P[1024];
for(i=0;i<1024;i++)
{
P[i]=0;
}
while(x{
for(i=0;i<10;i++)
{
if(s[x]==numb[i])
{
P[m1]=1;
}
}
x++;
m1++;
}

for(i=0;i{
if(P[i]==0)
{n1=0;}
}
if(n1==1)
{
for(i=a;i<=b;i++)
cout<cout<<"是一个常数"<x=a1;y=b1;
return true;
}
else
{
for(i=a;i<=b;i++)
cout<cout<<"是一个非法标识符"<x=a;y=b;
return true;
}
}
x=a1;y=b1;
x++;
while(x{
for(i=0;i<63;i++)
{
if(s[x]==digit[i])
{p[c]=1;}
}
for(i=0;i<=c;i++)
{
if(p[i]==0)
{m=0;}
}
if(m==1)
{}
else
{
for(i=a;i<=b;i++)
cout<cout<<"是一个非法标识符"<x=a;y=b;
return true;
}
x++;
c++;
}
for(i=a;i<=b;i++)
cout<cout<<"是一个标识符"<x=a;y=b;
return true;
}

void main()
{
char sentence[100];
cout<<"请输入测试语句:"<cin.getline(sentence,100,'\n');
string str(sentence);
cout<<"---------------------------------"<int i,j,t=-1;
for(i=0;i{
if(str[i]==' ')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<"------遇到空格"<}
if(str[i]=='\t')
{

for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<"------遇到Tab"<}
if(str[i]=='+')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<"+为运算符"<}
if(str[i]=='-')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<"-为运算符"<}
if(str[i]=='*')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<"*为运算符"<}
if(str[i]=='/')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<"/为运算符"<}
if(str[i]=='=')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<"=为分界符"<}
if(str[i]=='(')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<"(为分界符"<}
if(str[i]==')')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<")为分界符"<}
if(str[i]==';')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<";为分界符"<}
if(str[i]==',')
{
for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
t=i;
cout<<",为分界符"<}
if(str[i]=='#')
{

for(j=t+1;jif(jiancha_int(j,i-1,sentence)||jiancha_if(j,i-1,sentence)||jiancha_else(j,i-1,sentence)||jiancha_void(j,i-1,sentence)||jiancha_while(j,i-1,sentence)||Identifier(j,i-1,sentence))
{break;}
cout<<"------停止"<}
}
cout<<"---------------------------------"<cout<
}
我在C++环境下试过,没错误,你看看能行不.

回答2:

as