《编译原理》实验指导及报告书(新)课件

上传人:jiups****uk12 文档编号:90359046 上传时间:2019-06-11 格式:DOC 页数:23 大小:155KB
返回 下载 相关 举报
《编译原理》实验指导及报告书(新)课件_第1页
第1页 / 共23页
《编译原理》实验指导及报告书(新)课件_第2页
第2页 / 共23页
《编译原理》实验指导及报告书(新)课件_第3页
第3页 / 共23页
《编译原理》实验指导及报告书(新)课件_第4页
第4页 / 共23页
《编译原理》实验指导及报告书(新)课件_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《《编译原理》实验指导及报告书(新)课件》由会员分享,可在线阅读,更多相关《《编译原理》实验指导及报告书(新)课件(23页珍藏版)》请在金锄头文库上搜索。

1、编译原理实验指导及报告书 / 学年 第 学期姓 名:_学 号:_班 级:_指导教师:_计算机科学与工程学院2016编译原理 实验初步一、实验目的1、熟练掌握使用CODEBLOCK进行C程序编程,提高阅读程序与调试程序的能力。2、掌握堆栈与队列的应用。3、掌握C语言中对字符串处理的常见函数与方法。4、熟悉编程规范,养成对重要的程序段进行必要的注释说明。二、实验内容与步骤1、下面的程序是对一个简单的算术表达式进行计算求值,并输出表达式的值与该表达式的后缀形式。该程序在求值与转换后缀形式时使用了2个堆栈和1个队列。请认真阅读程序和调试,并将程序补充完整。#include#include#includ

2、e#define ERROR 0#define OK 1#define STACK_INT_SIZE 10 /*存储空间初始分配量*/#define Queue_Size 20typedef int ElemType; /*定义元素的类型*/typedef struct char QdataQueue_Size; int front,rear;SeqQueue;typedef struct ElemType *base; ElemType *top; int stacksize; /*当前已分配的存储空间*/SqStack;SqStack OPTR, OPND;SeqQueue SeQ;cha

3、r PreTab77=, , , , ,x, ,front=0; Q-rear=0;int EnterQueue(SeqQueue *Q,char c) /*入队*/ if (Q-rear=Queue_Size) printf(n队列满,无法入队!n);return ERROR; Q-QdataQ-rear=c; Q-rear+; return OK;int OutQueue(SeqQueue *Q,char *e) /*出队*/ if(Q-front=Q-rear) printf(n队列空,无法出队!n);return ERROR; *e=Q-QdataQ-front+; return OK

4、;int InitStack(SqStack *S) S-base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType); if(!S-base) return ERROR; S-top=S-base; S-stacksize=STACK_INT_SIZE; return OK;/*InitStack*/int Push(SqStack *S,ElemType e) if (S-top-S-base)STACK_INT_SIZE) return 0; *S-top=e; S-top+; return OK;int Pop(SqStack *S)

5、 int e; if (S-top=S-base ) return 0; S-top-; e=*S-top; return *S-top;/判定c是否运算符,若是运算符则返回该运算符在运算符集中的位置,这样就能扫描优先/关系表,确定相邻运算符之间的优先级int IsOps(char c) int i=0; char *p; p=OpretorS; while( i=7) / 判定是否是运算符,若IsOps的值=7,则c是操作数 digit=c-0; / 将字符转换成相应的数值 Push(&OPND,digit); / 操作数入栈 EnterQueue(&SeQ,c); / 操作数入队 c=*+

6、ScanChar ; else c1=*(OPTR.top-1); switch ( Precede (c1,c) / 调用哪个函数 case : TheOp=Pop (&OPTR ); / 参与计算的运算符出栈 EnterQueue(&SeQ,TheOp); / 参与运算的运算符入队 b=Pop(&OPND); a=Pop(&OPND); Push(&OPND, Operate (a,TheOp,b); break; default: printf(n算术表达式错误!n) ; return ERROR ; printf(n算术表达式:%s -后缀表达式为:,Express); while(S

7、eQ.rear- SeQ.front!=0 ) / 将队列输出即为表达式的后缀形式 OutQueue(&SeQ,&c);printf(%c,c); printf(n其结果为:%d,Pop (& OPND ); / 输出表达式的值 return 0;2、修改上面的程序:要求通过键盘输入表达式,运行程序并纪录运行过程和结果,至少处理3个不同的表达式。第一次运行:第二次运行:第三次运行:三、实验小结与体会四、实验评分和标准1、(程序功能)程序调通并能实现基本的功能50分2、(实验态度)事先准备充分,上机调试认真,程序功能完整 20分3、(实验报告)实验分析和总结报告认真30分五、教师评语补充试验(1)一、试验要求:修改试验初步中的源程序,使其能实现2位以上的整数的四则运算。二、说明与提示1、主要是增加实现拼数的功能。为实现拼数,可应用堆栈NumStack来存储当前的数字,若当前的字符不是数字,则弹出NumStack栈中的所有数字进行拼数。如1、2、3依次入栈,则弹出栈进行拼数:3121011010123。2、参考代码:if (IsOps(c)=7) / 判定是否是运算符,若IsOps的值=7,则c是操作数digit=c-0; / 将字符转换成相应的数值 Push(&NumStack,digit); /数字入栈EnterQueue

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号