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

📄 1231dlg.cpp

📁 逆波兰式
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					c=m.GetAt(i);
					if((c!='+') &&(c!='a') &&(c!='^') &&(c!='#') &&(c!='-') &&(c!='*'))
					{   y=i+1;
                        itoa(y,q,10);
						m_output4+=q;
	                    m_output4+="\r\n";
						Push(OPTR,'R');l="对不起!\r\n不符合文法!";break;
					}
					else if((c=='+')||(c=='a')||(c=='^')||(c=='#')||(c=='-')||(c=='*'))
					{
						GetTop(OPTR,e);
						if((e=='+')||(e=='-')||(e=='*')||(e=='#')||(e=='a')||e=='^')
						{
							switch(Precede(e,c))
							{
							case'<': 
								Push(OPTR,c);
                                y=y+1;
                                itoa(y,q,10);
								m_output4+=q;
								m_output4+="\r\n";
								po=po+m.GetAt(i)+"  "+"移进!\r\n";
		                     	p=p+"< \r\n";
								i++;
								break;
							case'=':
								Push(OPTR,c);
                                y=y+1;
                                itoa(y,q,10);
								m_output4+=q;
								m_output4+="\r\n";
								po=po+m.GetAt(i)+"  "+"移进!\r\n";
		                     	p=p+"= \r\n";
								i++;
								break;
							case'>':
								char t4;
                                y=y+1;
                                itoa(y,q,10);	      
								m_output4+=q;
	                            m_output4+="\r\n";
								Pop(OPTR,t4);
								po=po+m.GetAt(i)+"  "+"归约!\r\n";
		                     	p=p+"> \r\n";
								t4='S';
								Push(OPTR,t4);
								break;
							case'w':
								l="对不起!\r\n不符合文法!";
                                y=y+1;
                                itoa(y,q,10);
								m_output4+=q;
								m_output4+="\r\n";
		                     	p=p+"无优先关系 \r\n";
								mark=1;		                     	
								break;
							}
						}
						else if(e=='S')
						{
							char d;
							Pop(OPTR,d);
							GetTop(OPTR,e);
							if((c=='+')||(c=='-')||(c=='*'))
							{
								if((e=='+')||(e=='-')||(e=='*'))
								{
									Pop(OPTR,d);
									Pop(OPTR,d);
									Push(OPTR,'S');
								}
								else if(e=='#')
								{
									switch(Precede(e,c))
									{
									case'<': 
										Push(OPTR,d);
										Push(OPTR,c); 
										po=po+m.GetAt(i)+"  "+"移进!\r\n";
										p=p+"< \r\n";
										y=y+1;
										itoa(y,q,10);
										m_output4+=q;
										m_output4+="\r\n";
										i++;
										break;
									case'=':
										Push(OPTR,d);
										Push(OPTR,c);
										y=y+1;
										itoa(y,q,10);	       
										m_output4+=q;
										m_output4+="\r\n";
										po=po+m.GetAt(i)+"  "+"移进!\r\n";
										p=p+"= \r\n";
										i++;
										break;
									}
								}
							}
							else if(c=='^')
							{
								Push(OPTR,'S');i++;
							}	
						}
					}			
				}//while
			else {l="对不起!\r\n不符合文法!";break;}
			}
		}
		if(mark==1)
           l="对不起!\r\n不符合文法!";
			else{
		char x;
		Pop(OPTR,x);
		if(x=='S')
		{	y=y+1;
			itoa(y,q,10);
			m_output4+=q;
			m_output4+="\r\n";
			p=p+"> \r\n";
			l="恭喜你!\r\n符合文法!";
			ma1=1;
			po=po+m.GetAt(i)+"  "+"归约!\r\n";
			y=y+1;
			itoa(y,q,10);
			m_output4+=q;
			m_output4+="\r\n";
            p=p+"= \r\n";
			po=po+"#"+"  "+"接受!\r\n";
		}
		}
}
else l="对不起!\r\n不符合文法!";
}

void CMy1231Dlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	po="";
	p="";
	l1="";
    CMy1231Dlg::EvaluateExpression();
	m_output1=l;
	m_output2=po;
	m_output3=p;
	if(ma1!=0)
	{
	four();	
	m_output6=l2;
	m_output5=l1;
	}
	UpdateData(false);
}

void CMy1231Dlg::OnButton3() 
{
	// TODO: Add your control notification handler code here
	m_input1="";
    m_output1="";
	m_output2="";
	m_output3="";
	m_output4="";
	m_output5="";
	UpdateData(false);
}

void CMy1231Dlg::OnButton4() 
{
	// TODO: Add your control notification handler code here
	CMy1231Dlg::OnOK();
}

void CMy1231Dlg::OnButton5() 
{
	// TODO: Add your control notification handler code here
	ShellExecute(NULL,"open","help.doc",NULL,NULL,SW_SHOWNORMAL); //连接外部程序;
}


/////////////////+,-,*,^(平方)优先级
char qian(char a1,char a2)
{
	switch(a1)
	{
	case '+':switch(a2)
			 {
				case '+':return '>';break;
				case '-':return '>';break;
				case '*':return '<';break;
				case '^':return '<';break;
				case '#':return '>';break;
				default: return 'w';break;
			 }break;
	case '-':switch(a2)
			 {
				case '+':return '>';break;
				case '-':return '>';break;
				case '*':return '<';break;
				case '^':return '<';break;
				case '#':return '>';break;
				default: return 'w';break;
			 }break;
	case '*':switch(a2)
			 {
				case '+':return '>';break;
				case '-':return '>';break;
				case '*':return '>';break;
				case '^':return '<';break;
				case '#':return '>';break;
				default: return 'w';break;
			 }break;
	case '^':switch(a2)
			 {
				case '+':return '>';break;
				case '-':return '>';break;
				case '*':return '>';break;
				case '^':return '>';break;
				case '#':return '>';break;
				default: return 'w';break;
			 }break;

	case '#':switch(a2)
			 {
				case 'a':return '<';break;
				case '*':return '<';break;
				case '^':return '<';break;
				case '+':return '<';break;
				case '-':return '<';break;
				case '#':return '=';break;
				default: return 'w';break;	
			 }break;
	default: return 'w';break;
	}
}
//弹栈
void Pop1(CString &s,char &e)
{
	e=s.GetAt(s.GetLength()-1);
	s=s.Left(s.GetLength()-1);
}
void Push1(CString &t,char e)
{
	t=t+e;
}

///////////////四元式部分;
void four()
{
	CString l3;
	CString S1,F1;
	Push1(S1,'#');
	Push1(F1,'#');
	char z,w1;
	int j=2;
	int k=0;
//	char w3;
	z=m.GetAt(0);
	Push1(S1,z);
	z=m.GetAt(1);
	Push1(F1,z);
	while (j<=n-1)
	{
		if(j==n-1&&m.GetAt(j-1)=='a')
		{	char x2;
			Pop1(F1,x2);
			Push1(S1,x2);
			break;
		}
		else if(j==n-1&&m.GetAt(j-1)=='^')
		{	
			for(int j1=F1.GetLength()-1;j1>0;j1--)
			{
			char x2;
			Pop1(F1,x2);
			Push1(S1,x2);
			}
			break;
		}
		else if(j<n-1)
		{
		z=m.GetAt(j);

		if(z=='a')
		{Push1(S1,'a');j++;}

		else if((z=='+')||(z=='-')||(z=='*')||(z=='^'))
		{
		Pop1(F1,w1);
		switch(qian(w1,z))
		{
		case'<':
			Push1(F1,w1);
			Push1(F1,z);
			j++;		
			break;
		case'=':
			j++;		
			break;
		case'>':
			Push1(S1,w1);	
			break;
		case'w':
			l1=l1+"逆波兰式有错误!";
			break;
		}
		}
		}
	}//while
	l2=S1;
int n1;int n4=0;int n3=0;char q1[2];
	int n2=1;
	n1=S1.GetLength();
	while(n2<=n1-1)
	{
		if(S1.GetAt(n2)=='a')
		{
			Push1(l3,'a');
		}
		else if(S1.GetAt(n2)=='^')
		{   char x5;
			Pop1(l3,x5);	
            n3=n3+1;
			itoa(n3,q1,10);
			if(x5!='a')
			{
				l1=l1+'('+S1.GetAt(n2)+','+'T'+x5+','+'T'+x5+','+'T'+q1+")\r\n";
				Push1(l3,q1[0]);
			}
			else if(x5=='a')
			{
				l1=l1+'('+S1.GetAt(n2)+','+x5+','+x5+','+'T'+q1+")\r\n";
				Push1(l3,q1[0]);
			}
		}
		else if(S1.GetAt(n2)=='+'||S1.GetAt(n2)=='-'||S1.GetAt(n2)=='*')
		{   char x5,x6;
			Pop1(l3,x5);
			Pop1(l3,x6);
            n3=n3+1;
			itoa(n3,q1,10);
			if(x5!='a')
			{
				if(x6!='a')
				{
				l1=l1+'('+S1.GetAt(n2)+','+'T'+x5+','+'T'+x6+','+'T'+q1+")\r\n";
				Push1(l3,q1[0]);
				}
				else if(x6=='a')
				{
				l1=l1+'('+S1.GetAt(n2)+','+'T'+x5+','+x6+','+'T'+q1+")\r\n";
				Push1(l3,q1[0]);
				}
			}
			else if(x5=='a')
			{
			if(x6!='a')
			{
				l1=l1+'('+S1.GetAt(n2)+','+'T'+x6+','+x5+','+'T'+q1+")\r\n";
				Push1(l3,q1[0]);
			}
			else if(x6=='a')
			{
				l1=l1+'('+S1.GetAt(n2)+','+x5+','+x6+','+'T'+q1+")\r\n";
				Push1(l3,q1[0]);
			}
			}
		}
		n2++;
	}
}

⌨️ 快捷键说明

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