计算器的设计与实现 编译原理实验报告

时间:2025-02-27

中北大学软件学院

实 验 报 告

专 业 课程名称 学 号 姓 名

辅导教师 张 静 成绩

6、算法优先分析表及语法分析程序 //算法优先分析表

//计算器的设计与实现源代码.cpp#include<stdio.h> #include<stdlib.h> #define MaxSize 99 void translate(char str[],char exp[]) { struct { char data[MaxSize]; int top; }op; char ch; int i = 0,t = 0; op.top = -1; ch = str[i]; i++; while(ch != '\0') { switch(ch) { case '(': op.top++;op.data[op.top]=ch; break; case ')': while(op.data[op.top] != '(') { exp[t]=op.data[op.top]; op.top--; t++; } op.top--; break; case '+': case '-': while(op.top != -1&&op.data[op.top] != '(')

{ exp[t] = op.data[op.top]; op.top--; t++; } op.top++; op.data[op.top] = ch; break; case '*': case '/': while(op.data[op.top] == '/'||op.data[op.top] == '*') { exp[t] = op.data[op.top]; op.top--; t++; } op.top++; op.data[op.top] = ch; break; case ' ': break; default: while(ch >= '0'&&ch <= '9') { exp[t] = ch;t++; ch = str[i];i++; } i--; exp[t] = ' '; t++; } ch = str[i]; i++; } while(op.top != -1) { exp[t] = op.data[op.top]; t++; op.top--; } exp[t] = '\0'; }

float cal_value(char exp[]) { struct { float data[MaxSize]; int top; }st; float d; char ch; int t = 0; st.top = -1; ch = exp[t]; t++; while(ch != '\0') { switch(ch) { case '+': st.data[st.top-1] = st.data[st.top-1]+st.data[st.top]; st.top--; break; case '-': st.data[st.top-1] = st.data[st.top-1]-st.data[st.top]; st.top--; break; case '*': st.data[st.top-1] = st.data[st.top-1]*st.data[st.top]; st.top--; break; case '/': if(st.data[st.top] != 0) st.data[st.top-1]=st.data[st.top-1]/st.data[st.top]; else { printf("\n 提示:error"); exit(1); } st.top--; break; default: d=0; while(ch >= '0'&&ch <= '9') { d = 10*d+ch-'0';

ch = exp[t]; t++; } st.top++; st.data[st.top] = d; } ch = exp[t]; t++; } return st.data[st.top]; }

int main() { char ch; while(1) { char str[MaxSize],exp[MaxSize]; printf(">>输入一个表达式:\n"); gets(str); printf(">>原表达式:%s\n",str); translate(str,exp); printf(">>逆波兰式:%s\n",exp); printf(">>计算结果:%g\n\n",cal_value(exp)); printf(">>是否进行下一个运算(Y/N)?:"); scanf("%c",&ch); if(ch=='Y' || ch=='y') { gets(str); } else { break; } } //syst

em("pause"); return 0; }

7、测试及结果1、加减法运算

2、乘除法运算

3、带‘(’‘)’运算

4、四则运算

5、容错处理

8、心得本次课程设计是实现一个简易的计算器,这次课程设计采用逆波兰式的知 识,这可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。 本次设计使我进一步端正了我的学习态度,学会了实事求是,对自己要严格要 求。我觉得动手做设计之前,头脑里必须清楚该怎么做,这一点是很重要的。 就目前来说,我的动手能力虽然差一点,但我想,通过我的不懈努力,在这方 面,我总会得到提高。在此次的课程设计中我最大的体会就是进一步认识到了 理论联系实践的重要性。总而言之,此次课程设计让我学到了好多平时在课堂 上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。我相信 经过实践后的学习我可以将编译原理这门课程掌握的更好。

…… 此处隐藏:378字,全部文档内容请下载后查看。喜欢就下载吧 ……
计算器的设计与实现 编译原理实验报告.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219