(完整word版)计算器的设计与实现-编译原理实验报告(word文档良心出品).doc
上传人:戊午****jj 上传时间:2024-09-10 格式:DOC 页数:9 大小:141KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

(完整word版)计算器的设计与实现-编译原理实验报告(word文档良心出品).doc

(完整word版)计算器的设计与实现-编译原理实验报告(word文档良心出品).doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

中北大学软件学院实验报告专业软件工程课程名称编译原理学号姓名辅导教师张静成绩实验日期2015.5.19实验时间14:00~18:001实验名称计算器的设计与实现2、实验目的掌握自上而下语法分析方法、自下而上语法分析方法3、实验要求(1)实验内容设计及实现计算表达式的计算器。表达式中可包含+、-、*、/、(、)等运算符。(2)实验要求:对已给的一个二元式形式表达式,能够检查有无语法错误。并指定出错位置。将表达式的语法树输出(或将语法分析过程输出)。4、实验原理根据自上而下和自下而上的语法分析思想实现语法分析程序。5、实验步骤(1)根据文法构造语法分析表。(2)编写总控程序实现语法分析。算法优先分析表及语法分析程序//算法优先分析表//计算器的设计与实现源代码.cpp#include<stdio.h>#include<stdlib.h>#defineMaxSize99voidtranslate(charstr[],charexp[]){struct{chardata[MaxSize];inttop;}op;charch;inti=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';}floatcal_value(charexp[]){struct{floatdata[MaxSize];inttop;}st;floatd;charch;intt=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++;}returnst.data[st.top];}intmain(){charch;while(1){charstr[MaxSize],exp[MaxSize];printf(">>输入一个表达式:\n");gets(str);printf(">