




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程名称 编译原理 实验名称 简单计算器程序设计 姓 名 学 号 专业班级 实验日期 成 绩 指导老师 (实验目的实验原理主要仪器设备实验内容与步骤实验数据记录与处理实验结果分析问题建议)1.实验目的(1)加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用;(2)熟悉 microsoft visual c+6.0 的运行环境。(3)通过此次实验熟悉自己的编程能力。2.实验要求所做出的计算器代码不仅能够实验简单的加减乘除运算,而且还必须能够实现对表达式的操作。3.实验环境本次实验在vc6.0环境下编译通过。4.设计思想和原理(1)定义部分:定义常量、变量、数据结构;(2)初始化:设立lr
2、(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(3)控制部分:从键盘输入一个表达式符号串; (4)利用 lr(1)分析算法进行表达式处理:根据 ll(1)分析表对表达式符号串进行堆栈(或 其他)操作,输出分析结果,如果遇到错误则显示错误信息.5.程序源代码#include#include#include#include#includetypedef float datatype;typedef structdatatype *data;int max;int top;stack;void setstack(stack *s,int n)s-data=(datatype*)
3、malloc(n*sizeof(datatype);if(s-data=null)printf(overflow);exit(1);s-max=n;s-top=-1;void freestack(stack *s)free(s-data);int stackempty(stack *s)if(s-top=-1)return(1);return(0);datatype peek(stack *s)if(s-top=s-max-1)printf(stack is empty!n);exit(1);return(s-datas-top);void push(stack *s,datatype ite
4、m)if(s-top=s-max-1)printf(stack is full!n);exit(1);s-top+;s-datas-top=item;datatype pop(stack *s)if(s-top=-1)printf(pop an empty stack!n);exit(1);s-top-;return(s-datas-top+1);typedef structchar op;int inputprecedence;int stackprecedence;datatype1;typedef structdatatype1 *data;int max;int top;stack1;
5、void setstack1(stack1 *s,int n)s-data=(datatype1*)malloc(n*sizeof(datatype1);if(s-data=null)printf(overflow);exit(1);s-max=n;s-top=-1;void freestack1(stack1 *s)free(s-data);int stackempty1(stack1 *s)if(s-top=-1)return(1);return(0);datatype1 peek1(stack1 *s)if(s-top=s-max-1)printf(stack1 is empty!n);
6、exit(1);return(s-datas-top);void push1(stack1 *s,datatype1 item)if(s-top=s-max-1)printf(stack is full!n);exit(1);s-top+;s-datas-top=item;datatype1 pop1(stack1 *s)if(s-top=-1)printf(pop an empty stack!n);exit(1);s-top-;return(s-datas-top+1);datatype1 mathoptr(char ch)datatype1 optr;optr.op=ch;switch(
7、optr.op)case+:case-:optr.inputprecedence=1;optr.stackprecedence=1;break;case*:case/:optr.inputprecedence=2;optr.stackprecedence=2;break;case(:optr.inputprecedence=3;optr.stackprecedence=-1;break;case):optr.inputprecedence=0;optr.stackprecedence=0;break;return(optr);void evaluate(stack *opndstack,dat
8、atype1 optr)datatype opnd1,opnd2;opnd1=pop(opndstack);opnd2=pop(opndstack);switch(optr.op)case+:push(opndstack,opnd2+opnd1);break;case-:push(opndstack,opnd2-opnd1);break;case*:push(opndstack,opnd2*opnd1);break;case/:push(opndstack,opnd2/opnd1);break;int isoptr(char ch)if(ch=+|ch=-|ch=*|ch=/|ch=()ret
9、urn(1);return(0);void infix(char *str)int i,k,n=strlen(str);char ch,numstr10;datatype opnd;datatype1 optr;stack opndstack;stack1 optrstack;setstack(&opndstack,n);setstack1(&optrstack,n);k=0;ch=strk;while(ch!=)if(isdigit(ch)|ch=.)for(i=0;isdigit(ch)|ch=.;i+)numstri=ch;k+;ch=strk;numstri=0;opnd= atof(
10、numstr);push(&opndstack,opnd);elseif(isoptr(ch)optr=mathoptr(ch);while(peek1(&optrstack).stackprecedence=optr.inputprecedence)evaluate(&opndstack,pop1(&optrstack);push1(&optrstack,optr);k+;ch=strk;else if(ch=)optr=mathoptr(ch);while(peek1(&optrstack).stackprecedence=optr.inputprecedence)evaluate(&opndstack,pop1(&optrstack);pop1(&optrstack);k+;ch=strk;while(!stackempty1(&optrstack)evaluate(&opndstack,pop1(&optrstack);opnd=pop(&opndstack);cout你输入表达式的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级健康课件
- 2025年中国滚筒式气体渗碳炉市场调查研究报告
- 2025年中国板环式拉压传感器市场调查研究报告
- 2025年中国拖挂房车市场调查研究报告
- 2025年中国工艺装饰布市场调查研究报告
- 2025年中国发酵用传感器市场调查研究报告
- 商砼站劳务合同协议
- 瑕疵品销售合同协议
- 破碎锤管路采购合同协议
- 祖屋部分出让协议合同
- 分布式光伏高处作业专项施工方案
- 儿科护理质量专项改善课件
- 刮痧类中医医疗技术相关感染预防与控制指南
- 钱大妈计划书
- 医疗器械投标方案(技术标)
- 房地产公司财务部人员配备及职责分工方案
- 课程标准评审表
- 满堂脚手架计算书
- 01K403 风机盘管安装
- 药理学教学课件:抗流感病毒药
- 2023年承德县小升初英语考试题库及答案解析
评论
0/150
提交评论