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

📄 词法分析器.cpp

📁 系个简单的词法分析程序源代码
💻 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 + -