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

📄 digui.cpp

📁 基于递归文法的编译课设实现,生成四元式,以及判断是否为该文法
💻 CPP
字号:
//文法:S->I.I,I->0I|1I|2I|3I|4I|5I|6I|7I|8I|9I|0|1|2|3|4|5|6|6|7|8|9
//转化为LL(1)文法:S->I.I,I->0B|1B|2B|3B|4B|5B|6B|6B|7B|8B|9B,B->I|ε

#include <math.h>
#include <iostream.h>
#include <string.h>
char prog[80];
char sym;
int f,d,i=0,b=0;
int flag=1,flag_dot=0;
void B();
int sum1=0,sum2=0;
char str1[80],str2[80],str3[80];
void scaner(){
	cout<<"请输入符号串:"<<endl;
	cin.getline(prog,80);
}
void I(){
	if(sym>='0'&&sym<='9')
	{   if(flag_dot==0)
	       sum1=sum1+sym-'0';
	    else 
			sum2=sum2+sym-'0';
		sym=prog[i++];
	
	B();}
}

void B(){
	if(sym>='0'&&sym<='9')
	{if(flag_dot==0)sum1*=10;
	else sum2*=10;
		I();
	}
	else if(sym!='$'&&sym!='.')
	{cout<<"error!"<<endl; 
	 b=1;
	}
}
void S(){
	I();
	if(sym=='.'){
		sym=prog[i++];
		flag_dot=1;
	}
	else
	{cout<<"error!";
	 b=1;
	 }
	I();
}

void digui(){
	while(i<80){
		sym=prog[i++];
		S();
		if(sym=='$'&&b==0){
			cout<<"success!"<<endl;
			flag=0;
		break;}
		else 
		{cout<<"fail!";
		break;}
	}
}
void dot(){
	int j;
	for(j=0;j<80;j++)
	{
		if(prog[j]=='.')
			f=j;
		if(prog[j]=='$')
		{	d=j;
		break;}
	}
}


void change(){
    int k,t,l,n,a;
	double m;
	t=sum1;
	for(k=0;k<=79;k++){
		if(t!=0){
			if(t%2==0){
				str1[k]='0';}
			if(t%2==1){
				str1[k]='1';}
		}
		t=(int)t/2;
		if(t==0){n=k;
		break;}
	}
	for(a=n;a>=0;a--){
		str3[n-a]=str1[a];
	}
	str3[n+1]='\0';

    m=sum2*pow(10,f-d+1);
	for(l=0;l<10&&m;l++){
		m*=2;
		if(m>=1){
			str2[l]='1';
			m=m-1;
			continue;
		}
		if(m<1){
			str2[l]='0';
			
		}
	}
	str2[l]='\0';
}
void main(){
	scaner();
	digui();
	if(flag==0){
		dot();
		change();
	}
	cout<<str3<<"."<<str2<<endl;
}






⌨️ 快捷键说明

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