2022年计算器的设计与实现编译原理实验报告3.docx
精选学习资料 - - - - - - - - - 中北高校软件学院实 验 报 告专业软件工程名师归纳总结 课程名称编译原理第 1 页,共 9 页学号姓名- - - - - - -精选学习资料 - - - - - - - - - 辅导老师张静成果试验日期2022.5.19试验时间14:00 18:001 试验名称 运算器的设计与实现2、试验目的把握自上而下语法分析方法、自下而上语法分析方法3、试验要求1 试验内容 设计及实现运算表达式的运算器;表达式中可包含 +、- 、* 、/ 、(、)等运算符;2 试验要求:对已给的一个二元式形式表达式,置;能够检查有无语法错误; 并指定出错位将表达式的语法树输出(或将语法分析过程输出);4、试验原理 依据自上而下和自下而上的语法分析思想实现语法分析程序;5、试验步骤 1 依据文法构造语法分析表;2 编写总控程序实现语法分析;名师归纳总结 - - - - - - -第 2 页,共 9 页精选学习资料 - - - - - - - - - 6、算法优先分析表及语法分析程序/算法优先分析表名师归纳总结 - - - - - - -第 3 页,共 9 页精选学习资料 - - - - - - - - - /运算器的设计与实现源代码 .cpp #include<stdio.h> #include<stdlib.h> #define MaxSize 99 void translatechar str,char exp struct char dataMaxSize; int top; op; char ch; int i = 0,t = 0; op.top = -1; ch = stri; i+; whilech .= '0' switchch case '': op.top+;op.dataop.top=ch; break; case '': whileop.dataop.top .= '' expt=op.dataop.top; op.top-; t+; op.top-; break; case '+': case '-': whileop.top .= -1&&op.dataop.top .= '' 名师归纳总结 - - - - - - -第 4 页,共 9 页精选学习资料 - - - - - - - - - expt = op.dataop.top; op.top-; t+; op.top+; op.dataop.top = ch; case '*': break; case '/': whileop.dataop.top = '/'|op.dataop.top = '*' expt = op.dataop.top; op.top-; t+; op.top+; op.dataop.top = ch; break; case ' ': default: break; whilech >= '0'&&ch <= '9' expt = ch;t+; ch = stri;i+; i-; expt = ' ' t+; ch = stri; i+; whileop.top .= -1 expt = op.dataop.top; t+; op.top-; 名师归纳总结 expt = '0' 第 5 页,共 9 页- - - - - - -精选学习资料 - - - - - - - - - float cal_valuechar exp struct float dataMaxSize; int top; st; float d; char ch; int t = 0; st.top = -1; ch = expt; t+; whilech .= '0' switchch case '+': st.datast.top-1 = st.datast.top-1+st.datast.top; st.top-; case '-': break; st.datast.top-1 = st.datast.top-1-st.datast.top; st.top-; break; case '*': st.datast.top-1 = st.datast.top-1*st.datast.top; st.top-; break; case '/': ifst.datast.top .= 0 st.datast.top-1=st.datast.top-1/st.datast.top; else printf"n 提示: error" exit1; st.top-; break; default: d=0; whilech >= '0'&&ch <= '9' d = 10*d+ch-'0' 名师归纳总结 - - - - - - -第 6 页,共 9 页精选学习资料 - - - - - - - - - ch = expt; t+; st.top+; st.datast.top = d; ch = expt; t+; return st.datast.top; int main char ch; while1 char strMaxSize,expMaxSize; printf">> 输入一个表达式: n" getsstr; printf">> 原表达式 :%sn",str; translatestr,exp; printf">> 逆波兰式: %sn",exp; printf">> 运算结果 :%gnn",cal_valueexp; printf">> 是否进行下一个运算 Y/N.:" scanf"%c",&ch; ifch='Y' | ch='y' getsstr; else break; /system"pause" 名师归纳总结 return 0; 第 7 页,共 9 页- - - - - - -精选学习资料 - - - - - - - - - 7、测试及结果1、加减法运算2、乘除法运算3、带()运算4、四就运算名师归纳总结 - - - - - - -第 8 页,共 9 页精选学习资料 - - - - - - - - - 5、容错处理8、心得本次课程设计是实现一个简易的运算器,这次课程设计采纳逆波兰式的知 识,这可以很好的表示简洁算术表达式,其优点在于易于运算机处理表达式;本次设计使我进一步端正了我的学习态度,学会了实事求是,对自己要严格要 求;我觉得动手做设计之前,头脑里必需清晰该怎么做,这一点是很重要的;就目前来说,我的动手才能虽然差一点,但我想,通过我的不懈努力,在这方 面,我总会得到提高;在此次的课程设计中我最大的体会就是进一步熟悉到了 理论联系实践的重要性;总而言之,此次课程设计让我学到了好多平常在课堂 上学不到的东西,增加了我的学问运用才能,增强我的实际操作才能;我信任 经过实践后的学习我可以将编译原理这门课程把握的更好;名师归纳总结 - - - - - - -第 9 页,共 9 页