语法制导翻译与生成中间代码(附代码)

语法制导翻译与生成中间代码(附代码)

ID:47536998

大小:122.72 KB

页数:13页

时间:2020-01-14

语法制导翻译与生成中间代码(附代码)_第1页
语法制导翻译与生成中间代码(附代码)_第2页
语法制导翻译与生成中间代码(附代码)_第3页
语法制导翻译与生成中间代码(附代码)_第4页
语法制导翻译与生成中间代码(附代码)_第5页
资源描述:

《语法制导翻译与生成中间代码(附代码)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《编译系统设计实践》实验项目三:语法制导翻译与生成中间代码学号:姓名:年级:学院:数计学院专业:计算机本组其它成员:学号姓名学号姓名实验时间:2016-2017学年第一学期任课教师:一、实验目的通过语法制导或翻译模式生成中间代码。二、实验内容在自底向上语法分析基础上设计语义规则(语法制导翻译),将源程序翻译为四元式输出,若有错误将错误信息输出。三、设计思路1.分析过程主函数,读取文件,存入字符串数组,调用语义分析,判断关键字,调用相应的语义规则(这里只有if和while和赋值语句),赋值语句调用表达式处理,if语句调用条件表达式处理,while也是调用表达

2、式处理,然后是一个递归过程,不断的递归调用,按序输出三地址语句。在本例程序中选用expr及num作为运算数。2.主要函数stringlink()//字符串和数字的连接stringelement()//获取表达式中的元素对象stringexpression()//处理表达式stringexpression_1()//处理表达式stringbiaodashi()//处理表达式,转为三地址输出stringbiaodashi_1()//递归---处理表达式,转为三地址输出stringgetOperator()//判断并获取运算符voidcondition(intL

3、1,intL2)//输出if语句的条件的三地址代码voidyuyifenxi_list()//生成并输出条件返回地址voidyuyifenxi_list_1()//递归---生成并输出条件返回地址voidyuyifenxi(intnext,int&flag)//判断关键字,调用相应的产生式分析voidreadfile()//文件读入四、测试报告1.第一组测试:图1-1输入待翻译代码图1-2中间代码生成2.第二组测试:图2-1输入待翻译代码图2-2中间代码生成3.第三组测试:错误待翻译代码图3-1输入待翻译代码图3-2中间代码生成五、实验总结实验三的重点在于

4、判断关键字,调用相应的产生式分析及处理表达式,转为三地址输出部分,也是很费时间的难点部分,但通过查阅书本及网上资料,还是将其以多个处理函数的递归调用实现了,虽然最后实现结果对错误的分析还不够精确有些差强人意,但毕竟还算有些收获了。另外,通过三次实验下来,对于一个简易编译器的实现已经有了一个整体的构架了,相信在通过自己以后的深入学习,一定能写出属于自己的编译器。六、附录代码#include#include#includeusingnamespacestd;intaddress=100;//每条分析语

5、句的地址intLID=0;//表示过程执行到相应位置的地址符号inttID=0;//用于替换表达式的标识符intip=0;stringshuru[666];//存放从文件读入的字符串intmaxsize;//设置存放数组的长度stringbiaodashi();/*****字符串和数字的连接*****/stringlink(stringa,intb){stringt="";do{t+=b%10+'0';b/=10;}while(b);reverse(t.begin(),t.end());returna+t;}/*****获取表达式中的元素对象*****/s

6、tringelement(){if(shuru[ip]=="expr"

7、

8、shuru[ip]=="num"){ip++;returnshuru[ip-1];}elseif(shuru[ip]=="("){ip++;stringresult=biaodashi();if(shuru[ip]==")")ip++;elseputs("Lack)");returnresult;}elseputs("error");return"";}/*****处理表达式*****/stringexpression_1(string&op){if(shuru[ip]=="*"

9、

10、

11、shuru[ip]=="/"){op=shuru[ip];ip++;stringarg1=element();stringop_1="",result=link("t",tID++);stringarg2=expression_1(op_1);if(op_1=="")op_1="=";if(arg2=="")cout<

12、turnresult;}return"";}/*****处理表达式

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

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

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