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

📄 lexicalanalysis.cpp

📁 词法分析 是用来解释汇编语言中词法的分析
💻 CPP
字号:
#include <iostream> 
#include <string> 
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是一个关键字"<<endl; 
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是一个关键字"<<endl; 
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是一个关键字"<<endl; 
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是一个关键字"<<endl; 
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是一个关键字"<<endl; 
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<y+1) 
{ 
for(i=0;i<10;i++) 
{ 
if(s[x]==numb[i]) 
{ 
P[m1]=1; 
} 
} 
x++; 
m1++; 
} 

for(i=0;i<m1;i++) 
{ 
if(P[i]==0) 
{n1=0;} 
} 
if(n1==1) 
{ 
for(i=a;i<=b;i++) 
cout<<s[i]; 
cout<<"是一个常数"<<endl; 
x=a1;y=b1; 
return true; 
} 
else 
{ 
for(i=a;i<=b;i++) 
cout<<s[i]; 
cout<<"是一个非法标识符"<<endl; 
x=a;y=b; 
return true; 
} 
} 
x=a1;y=b1; 
x++; 
while(x<y+1) 
{ 
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<<s[i]; 
cout<<"是一个非法标识符"<<endl; 
x=a;y=b; 
return true; 
} 
x++; 
c++; 
} 
for(i=a;i<=b;i++) 
cout<<s[i]; 
cout<<"是一个标识符"<<endl; 
x=a;y=b; 
return true; 
} 

void main() 
{ 
char sentence[100]; 
cout<<"请输入测试语句:"<<endl; 
cin.getline(sentence,100,'\n'); 
string str(sentence); 
cout<<"---------------------------------"<<endl; 
int i,j,t=-1; 
for(i=0;i<str.length();i++) 
{ 
if(str[i]==' ') 
{ 
for(j=t+1;j<i;j++) 
if(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<<"------遇到空格"<<endl; 
} 
if(str[i]=='\t') 
{ 

for(j=t+1;j<i;j++) 
if(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"<<endl; 
} 
if(str[i]=='+') 
{ 
for(j=t+1;j<i;j++) 
if(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<<"+为运算符"<<endl; 
} 
if(str[i]=='-') 
{ 
for(j=t+1;j<i;j++) 
if(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<<"-为运算符"<<endl; 
} 
if(str[i]=='*') 
{ 
for(j=t+1;j<i;j++) 
if(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<<"*为运算符"<<endl; 
} 
if(str[i]=='/') 
{ 
for(j=t+1;j<i;j++) 
if(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<<"/为运算符"<<endl; 
} 
if(str[i]=='=') 
{ 
for(j=t+1;j<i;j++) 
if(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<<"=为分界符"<<endl; 
} 
if(str[i]=='(') 
{ 
for(j=t+1;j<i;j++) 
if(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<<"(为分界符"<<endl; 
} 
if(str[i]==')') 
{ 
for(j=t+1;j<i;j++) 
if(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<<")为分界符"<<endl; 
} 
if(str[i]==';') 
{ 
for(j=t+1;j<i;j++) 
if(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<<";为分界符"<<endl; 
} 
if(str[i]==',') 
{ 
for(j=t+1;j<i;j++) 
if(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<<",为分界符"<<endl; 
} 
if(str[i]=='#') 
{ 

for(j=t+1;j<i;j++) 
if(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<<"------停止"<<endl; 
} 
} 
cout<<"---------------------------------"<<endl; 
cout<<str<<endl; 

} 

⌨️ 快捷键说明

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