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

📄 zhongjiandaimashengcheng.cpp

📁 本程序用C语言编写
💻 CPP
字号:
#include<stdlib.h>
#include<fstream>
#include<iostream>
using namespace std;

#define MAX 100
int m=0,n=0,sum=0;
char JG='A';
char str[MAX];//用于存输入表达式
int  token=0;//左括号的标志

/*扫描一遍从文件中读入表达式*/
void scan(FILE *fin)
{   

	    char ch='a';
		while(ch!=EOF)
		{
			ch=getc(fin);


			while(ch==' '||ch=='\n'||ch=='\t') ch=getc(fin);//消除空格和换行符
			
			str[m++]=ch;
			
			if(ch=='=') {
				if (token<1) token=1;
				sum++;}

			else if(ch=='+'||ch=='-') {
				if (token<2) token=2;
				sum++;}

			     else if(ch=='*'||ch=='/') {
					 if (token<1) token=3;
					 sum++;}

				 else if(ch=='(') {
					 n=m-1;
					 if (token<4)  token=4;}	  
		}
}	

/*对表达是进行处理并输出部分四元式*/
void chuli()
{

	for(int i=0;i<=m-1;i++)//处理乘除运算
	{
	   if(str[i]=='*'||str[i]=='/') 
	   {
		   cout<<"("<<str[i]<<"  "<<str[i-1]<<"  "<<str[i+1]<<"  "<<JG<<")"<<endl;
	       str[i-1]=str[i]=str[i+1]=JG;
	       sum--;
	       JG=(char)(int)JG++;
	   }
	
	}

	for(int j=0;j<=m-1;j++)//处理加减运算
	{
	   if(str[j]=='+'||str[j]=='-') 
	   {
		   cout<<"("<<str[j]<<"  "<<str[j-1]<<"  "<<str[j+1]<<"  "<<JG<<")"<<endl;
	       str[j-1]=str[j]=str[j+1]=JG;
	       sum--;
	       JG=(char)(int)JG++;}
	
	} 
	
	for(int k=0;k<=m-1;k++)//处理赋值运算
	{
	   if(str[k]=='=') 
	   {
		   cout<<"("<<str[k]<<"  "<<str[k+1]<<"  "<<"  "<<" "<<str[k-1]<<")"<<endl;
	       sum--;
	       JG=(char)(int)JG++;}
	
	}

}

/*生成四元式并输出*/	
void siyuanshi()
{
	
	int i=0;
	if(token==4) 
	{
	cout<<"("<<str[n+2]<<"  "<<str[n+1]<<"  "<<str[n+3]<<"  "<<JG<<")"<<endl;
	str[n]=str[n+1]=str[n+2]=str[n+3]=str[n+4]=JG;
	sum--;
	JG=(char)(int)JG++;
	}
    chuli();
}

/***************主函数*******************/
void main(){
	char in[MAX]; //用于接收输入输出文件名
    FILE *fin; //用于指向输入输出文件的指针
    cout<<"请输入源程序文件名(例如ceshi.txt):";
    cin>>in;
	cout<<endl;
    if ((fin=fopen(in,"r"))==NULL) //判断输入文件名是否正确
    {
      cout<<endl<<"打开词法分析输入文件出错!"<<endl;
    }
    
	

	 scan(fin);//
	 
	 /*******输出从文件读入的表达式*********/
	 cout<<"从文件读入的表达式如下:"<<endl;
	 for(int i=0;i<=m-1;i++) {cout<<str[i];}
	cout<<endl<<endl;

	cout<<"四元式如下:"<<endl;
    /********调用生成四元式的函数********/
	siyuanshi();


     /*********判断是否成功**********/
	if(sum==0) cout<<"成功!"<<endl;
	else cout<<"有错误!"<<endl;
    //关闭文件
	fclose(fin);
}

⌨️ 快捷键说明

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