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

📄 sulin.cpp

📁 编译原理词法分析器
💻 CPP
字号:
#include<iostream.h>
int lin,kuohao;
char jiajian;
int biaods(char a,int i);
int xiang(char a);
int yinzi(char a);
void main(){
	char a;
	cout<<"请输入表达式(以‘;’结束):"<<endl;
	while(cin>>a&&a!='#'){
		lin=0;kuohao=0;
		jiajian=' ';
		int shu=0;
		if(a=='-'){cin>>a;shu=biaods(a,-1);}
		else if(a=='+'){cin>>a;shu=biaods(a,1);}
		else {shu=biaods(a,1);}

		if(lin==0){cout<<"值为:"<<shu<<endl;}
		else {
			cout<<"error"<<lin<<endl;
			char *w=new char [200];char q;
			cin.get(w,200,';');                               //读行消去其他错误语言到下一个";"
			cin.get(q);
		}
	}
}
int biaods(char a,int i){
	if(lin==0){
		int x=i*xiang(a);int y=0;
		while(lin==0){                                       //lin==0不出现错误
			if(jiajian==')'){                               // 判断出现“)”错误
				cin>>a;kuohao--;	
				jiajian=a;
				if(kuohao>=0)return x;
				else {lin=4;return -1;}
			}
			else if(jiajian==';'){jiajian=' ';return x;}
			else if(jiajian=='+'){
				jiajian=' ';cin>>a;y=xiang(a);
				cout<<"lit 0 "<<x<<endl;
				cout<<"lit 0 "<<y<<endl;
				cout<<"opr 0 2"<<endl;
				x+=y;y=0;
			}
			else if(jiajian=='-'){
				jiajian=' ';cin>>a;y=xiang(a);
				cout<<"lit 0 "<<x<<endl;
				cout<<"lit 0 "<<y<<endl;
				cout<<"opr 0 3"<<endl;
				x-=y;y=0;
			}
			else {lin=1;return -1;}			
		}
	}	
}
int xiang(char a){
	if(lin==0){
		int x=yinzi(a);int y=0;
		while(lin==0){
			if(jiajian==')'){return x;}
			else if(jiajian==';'){return x;}
			else if(jiajian=='+'){return x;}
			else if(jiajian=='-'){return x;}
			else if(jiajian=='*'){
				jiajian=' ';cin>>a;
				y=yinzi(a);
				cout<<"lit 0 "<<x<<endl;
				cout<<"lit 0 "<<y<<endl;
				cout<<"opr 0 4"<<endl;
				x*=y;y=0;
			}
			else if(jiajian=='/'){
				jiajian=' ';cin>>a;
				y=yinzi(a);
				cout<<"lit 0 "<<x<<endl;
				cout<<"lit 0 "<<y<<endl;
				cout<<"opr 0 5"<<endl;
				x/=y;y=0;
			}
			else {lin=2;return -1;}			
		}		
	}	
}
int yinzi(char a){
	if(lin==0){
		int b=a-48;                                       //字符型转换为整型
		if(b>=0&&b<=9){                                    // 数字则转化为十进制数
			while(lin==0&&cin>>a&&(a>=48&&a<=57)){
				b=b*10+a-48;
			}
			jiajian=a;                    //什么作用?
			return b;			
		}
		else if(a=='('){
			cin>>a;kuohao++;
			if(a=='-'){cin>>a;return biaods(a,-1);}
			else if(a=='+'){cin>>a;return biaods(a,1);}
			else return biaods(a,1);
		}
		else{lin=3;return -1;}             //输入有误  括号中或者为数字,或者为正负号,不可能有别的情况
	}		
}

⌨️ 快捷键说明

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