表达式求值优先级判断

在这里插入图片描述
这里的形参a =GetTop(OPTR) 从存字符的栈里获取, b=ch ch是从字符缓存区里读的字符
例如输入2+3*2# (当ch读到非数字时才会进入Precede函数,这一点不在细说,不懂的话请仔细阅读,课本上的)``表达式求值优先级判断_第1张图片
优先级条件一:
同级运算符,左边的优先运算

	if((a=='+'||a=='-')&&(b=='+'||b=='-'))
	return '>';
`	if((a=='*'||a=='/')&&(b=='*'||b=='/'))
	return '>';``
	
	**优先级条件二**
	乘除先算,加减后算
		if((a=='*'||a=='/')&&(b=='+'||b=='-'))	
	return '>';
	if((a=='+'||a=='-')&&(b=='*'||b=='/'))
	return '<';	
	**优先条件三**
	  括号处理
	  1.扫到字符'('  就进栈  即  b='('if(b=='(')//ch扫描到(  就进栈   (返回'<'号时就将a进栈)
	return '<';
	  2.栈头a='('    扫描b=')'if(a=='('&&b==')')//栈头  (  与  ch扫描到的)   则相等  则去除 ( 
	return '=';
	
	3.栈头 a='('  b=任何运算符  就进栈
	if(a=='('&&b=='+') //括号的判断 
	return '<';
	if(a=='('&&b=='-') 
	return '<';	
	if(a=='('&&b=='*') 
	return '<';
	if(a=='('&&b=='/') 
	return '<';
	栈头a=任何运算符  b=')'  就返回'>'  
	if(a=='+'&&b==')')
return '>';
if(a=='-'&&b==')')
return '>';
if(a=='*'&&b==')')
return '>';
if(a=='/'&&b==')')
return '>';//------------ 
**优先级条件四**
字符#优先级最小  
	if(a=='#'&&b=='+') //------------ 
	return '<';
	if(a=='#'&&b=='-')
	return '<';
	if(a=='#'&&b=='*')
	return '<';
	if(a=='#'&&b=='/')
	return '<';	
	if(a=='+'&&b=='#')
	return '>';
	if(a=='-'&&b=='#')
	return '>';	
	if(a=='/'&&b=='#')
	return '>';	
	if(a=='*'&&b=='#')//------#的判断 
	return '>';		
**代码总览**
char Precede (char a,char b){//优先级判断     !!!!!!!!!!! 

	if((a=='+'||a=='-')&&(b=='+'||b=='-'))
	return '>';
	if((a=='+'||a=='-')&&(b=='*'||b=='/'))
	return '<';
	if((a=='*'||a=='/')&&(b=='+'||b=='-'))	
	return '>';
	if((a=='*'||a=='/')&&(b=='*'||b=='/'))
	return '>';
	if(a=='('&&b==')')//栈头  (  与  ch扫描到的)   则相等  则去除 ( 
	return '=';
	if(a=='#'&&b=='+') //------------ 
	return '<';
	if(a=='#'&&b=='-')
	return '<';
	if(a=='#'&&b=='*')
	return '<';
	if(a=='#'&&b=='/')
	return '<';	
	if(a=='+'&&b=='#')
	return '>';
	if(a=='-'&&b=='#')
	return '>';	
	if(a=='/'&&b=='#')
	return '>';	
	if(a=='*'&&b=='#')//------#的判断 
	return '>';		
	if(b=='(')//ch扫描到(  就进栈 
	return '<';
	if(a=='('&&b=='+') //括号的判断 
	return '<';
	if(a=='('&&b=='-') 
	return '<';	
		if(a=='('&&b=='*') 
	return '<';
			if(a=='('&&b=='/') 
	return '<';
if(a=='+'&&b==')')
return '>';
if(a=='-'&&b==')')
return '>';
if(a=='*'&&b==')')
return '>';
if(a=='/'&&b==')')
return '>';//------------ 
}

你可能感兴趣的:(c++,栈,c++,数据结构)