第三章 表达式求值 .ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 表达式求值 

限于二元运算符的表达式定义: 表达式 ::= (操作数) + (运算符) + (操作数) 操作数 ::= 简单变量 | 表达式 简单变量 :: = 标识符 | 无符号整数; 表达式的三种标识方法:;例:exp = a * b + ( c - d/e ) * f;后缀表达式;例如: Exp = a ? b + (c ? d / e) ? f;结论;下面给出两种求表达式值的方法;如何从后缀式求值;算法描述;如何从原表达式求得后缀式;从原表达式求得后缀式的规律;void transform(char suffix[ ], char exp[ ] ) { InitStack(S); Push(S, ?#?); p = exp; ch = *p; while (!StackEmpty(S)) { if (!IN(ch, OP)) Pass( Suffix, ch); else { } if ( ch!= ?#? ) { p++; ch = *p; } else { Pop(S, ch); Pass(Suffix, ch); } } // while } // CrtExptree;switch (ch) { case ?(? : Push(S, ch); break; case ?)? : Pop(S, c); while (c!= ?(? ) { Pass( Suffix, c); Pop(S, c) } break; defult : while(Gettop(S, c)precede(c)precede(ch)) { Pass( Suffix, c); Pop(S, c); } if ( ch!= ?#? ) Push( S, ch); break; } // switch;直接从原表达式求值; 若是“(”,进运算符栈;若是“)”,当运算符栈顶是“(”,则弹出栈顶元素,继续扫描下一符号。否则当前读入符号暂不处理,从操作数栈弹出两个操作数,从运算符栈弹出一个运算符,生成运算指令,结果送入操作数栈,继续处理当前读入符号。;OperandType EvaluateExpression() { InitStack(OPTR); Push(OPTR,#); InitStack(OPND); c=getchar(); While(c!=‘#’||GetTop(OPTR)!=‘#’) { if(!In(c,OP)) {Push(OPND,c);c=getchar();} else{…} }//while c=Gettop(OPND); DestroyStack(OPTR); DestroyStack(OPND); return c; };if(Precede(GetTop(OPTR)) Precede(c) || c == ‘(’) {Push(OPTR,c); c=getchar();} else if ((Precede(GetTop(OPTR)) == Precede(c)) {x=Pop(OPTR); c=getchar(); } else if ((Precede(GetTop(OPTR)) Precede(c)) {theta = Pop(OPTR); b= Pop(OPND); a = Pop(OPND); Push(OPND,Operate(a,theta,b)); } ;例:3*(7-2);练习:;例2、指出下列程序段的功能是什么? (1) void demo1(seqstack *s){ int i;arr[64];n=0; while (!stackempty(s)) arr[n++]=pop(s); for(i=0;in;i++) push(s,arr[i]); } ;(2) void demo2(seqstack *s,int m){ seqstack t; int i; initstack(t); while(! Stackempty(s)) if(i=pop(s)!=m) push(t,i

文档评论(0)

a888118a + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档