编译原理实验报告-逆波兰式的翻译和计算.doc

编译原理实验报告-逆波兰式的翻译和计算.doc

ID:49665892

大小:106.50 KB

页数:7页

时间:2020-03-02

编译原理实验报告-逆波兰式的翻译和计算.doc_第1页
编译原理实验报告-逆波兰式的翻译和计算.doc_第2页
编译原理实验报告-逆波兰式的翻译和计算.doc_第3页
编译原理实验报告-逆波兰式的翻译和计算.doc_第4页
编译原理实验报告-逆波兰式的翻译和计算.doc_第5页
资源描述:

《编译原理实验报告-逆波兰式的翻译和计算.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.实验6逆波兰式的翻译和计算一、实验目的通过实验加深对语法指导翻译原理的理解,掌握算符优先分析的方法,将语法分析所识别的表达式变换成中间代码的翻译方法。 二、实验内容设计一个表示能把普通表达式(中缀式)翻译成后缀式,并计算出结果的程序。三、实验要求1、给出文法如下:G[E]E->T

2、E+T;T->F

3、T*F;F->i(E);对应的转化为逆波兰式的语义动作如下:E->E(1)opE(2){E.CODE:=E(1).CODE

4、

5、E(2).CODE

6、

7、op}E->(E(1)){E.CODE:=E(1).CODE}E->id{E.C

8、ODE:=id}2、利用实验5中的算符优先分析算法,结合上面给出的语义动作实现逆波兰式的构造;3、利用栈,计算生成的逆波兰式,步骤如下:1)中缀表达式,从文本文件读入,每一行存放一个表达式,为了降低难度,表达式采用常数表达式;2)利用结合语法制导翻译的算符优先分析,构造逆波兰式;3)利用栈计算出后缀式的结果,并输出; 四、实验环境PC微机DOS操作系统或Windows操作系统TurboC程序集成环境或VisualC++程序集成环境 五、实验步骤1、了解语法制导翻译的方法,学习后缀式构造的语义动作;2、结合实验5的算符优先程序

9、,设计程序构造后缀式;3、利用栈,编程实现后缀式的计算;4、测试程序运行效果:从文本文件中读表达式,在屏幕上输出,检查输出结果。 六、测试数据输入数据:..编辑一个文本文文件expression.txt,在文件中输入如下内容:1+2;(1+2)*3;(10+20)*30+(50+60*70);正确结果:(1)1+2;输出:1,2,+3(2)(1+2)*3;输出:1,2,+,3,*9(3)(10+20)*30+(50+60*70)输出:10,20,+30,*50,60,70,*,+,+5150七、实验报告要求实验报告应包括以下

10、几个部分:1、构造逆波兰式的语义动作;2、结合算符优先分析构造逆波兰式的算法和过程;3、语法制导翻译的运行方法;4、程序的测试结果和问题;5、实验总结。八、实验内容源代码:#include#include#includeusingnamespacestd;#definemax100charex[max];intn;charGetBC(FILE*fp){//读取文件的字符直至ch不是空白charch;do{ch=fgetc(fp);}while(ch==''

11、

12、ch=='

13、t'

14、

15、ch=='');returnch;}voidacquire(FILE*fp){..charstr[max];charstack[max];charch;intsum,i,j,t,top=0;i=0;/*读取一行表达式*/GetBC(fp);if(feof(fp))return;else{fseek(fp,-1L,1);printf("(%d)",n);n++;}do{i++;str[i]=GetBC(fp);}while(str[i]!=';'&&i!=max);sum=i;t=1;i=1;ch=str[i]

16、;i++;while(ch!=';'){switch(ch){case'(':top++;stack[top]=ch;break;case')':while(stack[top]!='('){ex[t]=stack[top];top--;t++;}top--;break;case'+':case'-':while(top!=0&&stack[top]!='('){ex[t]=stack[top];top--;t++;}top++;..stack[top]=ch;break;case'*':case'/':while(stac

17、k[top]=='*'

18、

19、stack[top]=='/'){ex[t]=stack[top];top--;t++;}top++;stack[top]=ch;break;case'':break;default:while(ch>='0'&&ch<='9'){ex[t]=ch;t++;/*ex[]中存放逆波兰式*/ch=str[i];i++;/*str[]中存放中缀表达式*/}i--;ex[t]=',';t++;break;}ch=str[i];i++;}/*当中缀表达式扫描完毕,检查ω栈是否为空,若不空则一一退栈*/whil

20、e(top!=0){ex[t]=stack[top];t++;top--;}ex[t]=';';for(j=1;j

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

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

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