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

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

ID:35427926

大小:83.42 KB

页数:7页

时间:2019-03-24

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

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

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

2、E+T;T->F

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

4、

5、E⑵.CODE]

6、op}E-〉(E⑴){E.CODE:=E⑴.CODE}E->id{E.CODE:=id}2、利用实验5屮的算符优先分析算法,结

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

8、件中读表达式,在屏幕上输出,检查输出结果。六、测试数据输入数据:编辑一个文本文文件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七、实验报告要求实验报告应包括以下儿个部分:1、构造逆波兰式的语义动作;2、结合算符优先分析构造逆波兰式的算法和过程;3、语法制导翻译的运行方法;4、程序

9、的测试结果和问题;5、实验总结。八、实验内容源代码:#include#include#inc1udcusingnamespacestd;#definemax100charexfmax];intn;charGetBC(FILE*fp){//读取文件的字符直至ch不是空口charch;do{ch=fgetc(fp);}while(ch=1*

10、

11、ch='f

12、

13、ch=='');returnch;voidacquirc(FILE*fp){charstrfmax];charstack[max];charch

14、;intsum,ij,t,top=0;i=0;/*读取一行表达式*/GctBC(fp);if(feof(fp))return;else{fseek(tp,-IL,1);printf(n(%d)n,n);n++;}do{i++;str[i]=GctBC(fp);}while(str[i]!=&&i!=max);sum=i;t=1;i=l;ch=str[i];while(ch!=;){switch(ch){casef:top++;stac町top]=ch;break;casey:while(stack[top]!='(*){ex[t]=stack[top

15、];top-;t++;}top-;break;casecasewhile(top!=0&&stackftop]!='('){ex[t]=stack[top];top-;t++;}top++;stack[top]=ch;break;casecase7f:while(stack[top]=嗦

16、

17、stack[top]=7'){ex[t]=stack[top];top-;t++;top++;stac町top]=ch;break;case°f:break;default:while(ch>=O&&chv=9){cx[t]=ch;t++;/*ex[]中存放逆波兰式*

18、/ch=str[i];i++;中存放小缀表达式*/ex[t]=7;t++;break;}ch=str[i];汁+;/*当中缀表达式扫描完毕,检查(0栈是否为空,若不空则一一退栈*/while(top!=0){ex[t]=stack[top];t++;top-;}cx[t]=V;for0=l;j

19、;ch=ex[t];t++;while(ch!=';){switch(ch){c

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

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

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