欢迎来到天天文库
浏览记录
ID:57275849
大小:84.00 KB
页数:5页
时间:2020-08-08
《实验3-逆波兰式的产生及计算.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、河南工业大学实验报告课程名称编译原理_实验项目实验三逆波兰式的产生及计算院系____信息科学与工程学院____专业班级__计科F1201班________姓名____张伟龙___________学号_____3_____指导老师阎娟日期2015.5.7批改日期成绩一.实验目的1.深入理解算符优先分析法2.掌握FirstVt和LastVt集合的求法有算符优先关系表的求法3.掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化二.实验内容及要求将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式
2、来表示的算术表达式的值。程序输入/输出示例:输出的格式如下:(1)逆波兰式的生成及计算程序,编制人:姓名,学号,班级(2)输入一以#结束的中缀表达式(包括+—*/()数字#):在此位置输入符号串如(28+68)*2#(3)逆波兰式为:28&68+2*(4)逆波兰式28&68+2*计算结果为192备注:(1)在生成的逆波兰式中如果两个数相连则用&分隔,如28和68,中间用&分隔;(2)在此位置输入符号串为用户自行输入的符号串。注意:1.表达式中允许使用运算符(+-*/)、分割符(括号)、数字,结束符#;2.如果遇到错误的表
3、达式,应输出错误提示信息(该信息越详细越好);3.对学有余力的同学,测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照;三.实验过程#include#include#include#includeusingnamespacestd;/*************************************************题目:将中缀后缀式用来表示的算术表达式转换
4、为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。我们假设输入的中缀表达式都是合法的函数:cal():计算算符优先级compute():计算表达式ace():出栈计算Author:dezhonger************************************************/constdoubleEPS=1e-6;#defineDIVIDEBYZERO"divideByZero"//除零错误#defineGOOD"good"strings,ans,FLAG;stack
5、st;//符号栈stacksd;//数字栈intcal(charc){switch(c){case'+':case'-':return1;case'*':case'/':return2;default:return-;}}doublecompute(charc,doublea,doubleb){switch(c){case'+':returna+b;case'-':returna-b;case'*':returna*b;case'/':{if(fabs(b)6、eturna/b;}default:return-;}}voidact(){ans+=st.top();doublea=sd.top();sd.pop();doubleb=sd.top();sd.pop();//cout<7、<>s){cout<<"中缀表达式为:"<8、])){ans+=s[i];temp=temp*10+s[i++]-'0';}sd.push(temp);i--;}elseif(c=='#');elseif(c=='(')st.push(c);elseif(c==')'){while(st.top()!='('){act();}st.pop();}else{whi
6、eturna/b;}default:return-;}}voidact(){ans+=st.top();doublea=sd.top();sd.pop();doubleb=sd.top();sd.pop();//cout<7、<>s){cout<<"中缀表达式为:"<8、])){ans+=s[i];temp=temp*10+s[i++]-'0';}sd.push(temp);i--;}elseif(c=='#');elseif(c=='(')st.push(c);elseif(c==')'){while(st.top()!='('){act();}st.pop();}else{whi
7、<>s){cout<<"中缀表达式为:"<8、])){ans+=s[i];temp=temp*10+s[i++]-'0';}sd.push(temp);i--;}elseif(c=='#');elseif(c=='(')st.push(c);elseif(c==')'){while(st.top()!='('){act();}st.pop();}else{whi
8、])){ans+=s[i];temp=temp*10+s[i++]-'0';}sd.push(temp);i--;}elseif(c=='#');elseif(c=='(')st.push(c);elseif(c==')'){while(st.top()!='('){act();}st.pop();}else{whi
此文档下载收益归作者所有