《编译原理》实验指导及报告书课件.doc

《编译原理》实验指导及报告书课件.doc

ID:57999965

大小:147.50 KB

页数:23页

时间:2020-04-19

《编译原理》实验指导及报告书课件.doc_第1页
《编译原理》实验指导及报告书课件.doc_第2页
《编译原理》实验指导及报告书课件.doc_第3页
《编译原理》实验指导及报告书课件.doc_第4页
《编译原理》实验指导及报告书课件.doc_第5页
资源描述:

《《编译原理》实验指导及报告书课件.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

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

2、换后缀形式时使用了2个堆栈和1个队列。请认真阅读程序和调试,并将程序补充完整。#include#include#include#defineERROR0#defineOK1#defineSTACK_INT_SIZE10/*存储空间初始分配量*/#defineQueue_Size20typedefintElemType;/*定义元素的类型*/typedefstruct{charQdata[Queue_Size];intfront,rear;}SeqQueue;typedefstruct{ElemType*base;Elem

3、Type*top;intstacksize;/*当前已分配的存储空间*/}SqStack;SqStackOPTR,OPND;SeqQueueSeQ;charPreTab[7][7]={{'>','>','<','<','<','>','>'},{'>','>','<','<','<','>','>'},{'>','>','>','>','<','>','>'},{'>','>','>','>','<','>','>'},{'<','<','<','<','<','=','x'},{'>','>','>','>','x','>','>'},{'<','<','<','<','<'

4、,'x','='}};//该矩阵中,X字符表示不存在优先关系,在分析过程查找到这个值,表示表达式有错。第23页共23页char*OpretorS="+-*/()#";//运算符集char*Express="3*(7-2)-6*2";//初始化的表达式//注意本程序只分析1位整数的表达式的运算,所以输入的表达式要注意!!//能力强的同学自己进行扩展:增加词法分析过程进行拼数。intInitStack(SqStack*S);/*构造空栈*/intpush(SqStack*S,ElemType*e);/*入栈*/intPop(SqStack*S);/*出栈*/voidinitQueu

5、e(SeqQueue*Q){/*队列初始化*/Q->front=0;Q->rear=0;}intEnterQueue(SeqQueue*Q,charc){/*入队*/if(Q->rear==Queue_Size){printf("队列满,无法入队!");returnERROR;}Q->Qdata[Q->rear]=c;Q->rear++;returnOK;}intOutQueue(SeqQueue*Q,char*e){/*出队*/if(Q->front==Q->rear){printf("队列空,无法出队!");returnERROR;}*e=Q->Qdata[

6、Q->front++];returnOK;}intInitStack(SqStack*S){S->base=(ElemType*)malloc(STACK_INT_SIZE*sizeof(ElemType));if(!S->base)returnERROR;S->top=S->base;S->stacksize=STACK_INT_SIZE;returnOK;}/*InitStack*/intPush(SqStack*S,ElemTypee){if((S->top-S->base)>STACK_INT_SIZE)return0;*S->top=e;S->top++;return

7、OK;}intPop(SqStack*S){inte;if(S->top==S->base)return0;第23页共23页S->top--;e=*S->top;return*S->top;}//判定c是否运算符,若是运算符则返回该运算符在运算符集中的位置,这样就能扫描优先//关系表,确定相邻运算符之间的优先级intIsOps(charc){inti=0;char*p;p=OpretorS;while(i<7){if(*p++==c)break;i++;}returni;}charPrece

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。