📄 词法分析器.cpp
字号:
#include "stack.h"
#include<string.h>
const int maxsize=500;//输入程序的总容量
const int retainsize=30;//最大单词的长度
void main(){
stack sretain,snum,sidentier,sresult;
char input[maxsize],word[retainsize];
int num=0,flag,quanlity;
cout<<"请输入基本字的个数!"<<endl;
cin>>quanlity;
for(int j=0;j<quanlity;j++){
cout<<"第"<<j+1<<"个基本字: ";
cin>>word;
if(sretain.compare(word,strlen(word))==-1)
sretain.pushretain(word,strlen(word));
}
cout<<"请输入程序段,以'!'结束!"<<endl;
cin.unsetf(ios::skipws);
cin>>input[num];
while(input[num]!='!'&&num<maxsize){
num++;
cin>>input[num];
}
for(int i=0;i<num;){
flag=0;
if(input[i]=='+'||input[i]=='='||input[i]==','||input[i]=='('||input[i]==')'){
word[flag]=input[i];
flag++;
int temp=sretain.compare(word,flag);
if(temp==-1)
temp=sretain.pushretain(word,flag);
sresult.push(word,flag,temp,-1);
i++;
}
else
if(input[i]>='0'&&input[i]<='9'){
word[flag]=input[i];
flag++;
i++;
while(input[i]>='0'&&input[i]<='9'){
word[flag]=input[i];
flag++;
i++;
}
int temp=snum.compare(word,flag);
if(temp==-1)
temp=snum.pushnum(word,flag);
sresult.push(word,flag,7,temp);
}
else
if(input[i]>='A'&&input[i]<='Z'||input[i]>='a'&&input[i]<='z'){
word[flag]=input[i];
flag++;
i++;
while(input[i]>='A'&&input[i]<='Z'||input[i]>='a'&&input[i]<='z'||input[i]>='0'&&input[i]<='9'){
word[flag]=input[i];
flag++;
i++;
}
int temp=sretain.compare(word,flag);
if(temp!=-1)
sresult.push(word,flag,temp,-1);
else{
temp=sidentier.compare(word,flag);
if(temp==-1)
temp=sidentier.pushvar(word,flag,0);
sresult.push(word,flag,6,temp);
}
}
else
if(input[i]=='*'){
word[flag]=input[i];
flag++;
i++;
if(input[i]=='*'){
word[flag]=input[i];
flag++;
i++;
}
int temp=sretain.compare(word,flag);
if(temp==-1)
temp=sretain.pushretain(word,flag);
sresult.push(word,flag,temp,-1);
}
else
if(input[i]=='#'||input[i]=='@'){//定义非法字符
word[flag]=input[i];
flag++;
i++;
sresult.pushvar(word,flag,1);
}
else
i++;
}
cout<<"下面是你输入的基本字:"<<endl;
sretain.show(0);
cout<<endl;
cout<<"下面是标志符:"<<endl;
sidentier.show(0);
cout<<endl;
cout<<"下面是常数:"<<endl;
snum.show(0);
cout<<endl;
cout<<"下面是你输入对应的结果:"<<endl;
for(i=0;i<num;i++)
cout<<input[i];
cout<<endl;
sresult.show(1);
cout<<endl;
cin>>i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -