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

📄 translation.cpp

📁 赋值语言翻译(C++)源代码+详细的课程设计报告 定义赋值语句;分析出翻译中要解决的问题;明确翻译错误的表达以及处理
💻 CPP
字号:
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#define MAX 20
char temp[5]={'1','2','3','4','5'}; //用来作为四元式的临时变量
void move(char b,char *c,int x) //从x处向前移动,并插入b;
{ int s;
  c[x-2]=b;
  for(s=x+1;s<strlen(c);s++,x++)
   c[x-1]=c[s];
}
void change(char a[20],char ch[])
{ 
   int top=-1;//栈指针,初始值为-1
   int i=0,n;
   int j=0;
   char sta[20];//符号栈
     while(ch[i]!='#')
	 {
		 if(isalnum(ch[i]))//范围在A–Z, a–z, or 0–9
		 {
			 while(isalnum(ch[i]))
			 {a[j]=ch[i];
              j++;
              i++;
			 }//while
             //a[j]=',';
             //j++;
		 } //if
       else//如果是符号,+,-,*,/,(,),(:=)以=表示
	   {
         switch(ch[i])
		 { case '=':
		   case '+':
           case '-': if(sta[top]=='='||top==-1||sta[top]=='(')
					 { top++; 
                       sta[top]=ch[i++];
                     }//if
                     else 
					 {a[j]=sta[top];
                      j++;
                      top--; 
					 }//else
                     break;
          case '*':
          case '/':if(sta[top]=='*'||sta[top]=='/')
				   {a[j]=sta[top];//出栈
                    j++;
                    top--;
				   }//if
                   else
				   {
                   	top++;
                    sta[top]=ch[i];//入栈
                    i++;
				   }//else
                   break ;
       case '(': top++; 
                 sta[top]=ch[i];
                 i++;break;
       case ')': if(sta[top]=='(')
				 { top--;
                     i++;
				 }//if
           else 
		   {a[j]=sta[top];
           top--;
           j++;
		   }//else
           break;
     default: cout<<" 你输入的有错误!"<<endl;
          ch[i]='#';
          j=0;
           break;
		 }//switch
	   }//else
	 }//while

   while(top!=-1)//把sta中剩余的符号赋到a中
   {
	   a[j]=sta[top];j++;
        top--;
   }//while
   a[j]='#';
  cout<<"四元式为: "<<endl;
   n=0;
   j=0;
  while(a[n]!='#')
  {  
	  if(!isalnum(a[n]))
	  {  if(a[n]=='=')
	      cout<<setiosflags(ios::left)<<'('<<a[n]<<','<<a[n-1]<<','
		  <<'-'<<','<<a[n-2]<<')'<<endl;
	  else  {cout<<setiosflags(ios::left)<<'('<<a[n]<<','<<a[n-2]<<','
		  <<a[n-1]<<','<<temp[j]<<')'<<endl;
	    move(temp[j],a,n);
		j++;
		n=-1;}
	  }//if
     n++;
  }//while
 }//change

void main()
{
static int i=0;
static int j=0;
char ch[MAX],s[MAX];
cout<<"请输入中缀表达式(以#作为结束符): ";
cin>>ch;
change(s,ch);
}

⌨️ 快捷键说明

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