- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
语法制导翻译与生成中间代码(附代码)概要
《编译系统设计实践》实验项目三:语法制导翻译与生成中间代码学号:姓名:年级:学院:数计学院专业:计算机本组其它成员:学号姓名学号姓名实验时间:2016-2017学年第一学期任课教师:一、实验目的通过语法制导或翻译模式生成中间代码。二、实验内容在自底向上语法分析基础上设计语义规则(语法制导翻译),将源程序翻译为四元式输出,若有错误将错误信息输出。三、设计思路分析过程主函数,读取文件,存入字符串数组,调用语义分析,判断关键字,调用相应的语义规则(这里只有if和while和赋值语句),赋值语句调用表达式处理,if语句调用条件表达式处理,while也是调用表达式处理,然后是一个递归过程,不断的递归调用,按序输出三地址语句。在本例程序中选用expr及num作为运算数。主要函数string link()//字符串和数字的连接string element() //获取表达式中的元素对象string expression()//处理表达式string expression_1()//处理表达式string biaodashi() //处理表达式,转为三地址输出string biaodashi_1()//递归---处理表达式,转为三地址输出string getOperator()//判断并获取运算符void condition(int L1,int L2) //输出if语句的条件的三地址代码void yuyifenxi_list() //生成并输出条件返回地址void yuyifenxi_list_1() //递归---生成并输出条件返回地址void yuyifenxi(int next,int flag) //判断关键字,调用相应的产生式分析void readfile()//文件读入四、测试报告第一组测试:图1-1输入待翻译代码图1-2中间代码生成第二组测试:图2-1 输入待翻译代码图2-2 中间代码生成3.第三组测试:错误待翻译代码图3-1输入待翻译代码图3-2中间代码生成五、实验总结实验三的重点在于判断关键字,调用相应的产生式分析及处理表达式,转为三地址输出部分,也是很费时间的难点部分,但通过查阅书本及网上资料,还是将其以多个处理函数的递归调用实现了,虽然最后实现结果对错误的分析还不够精确有些差强人意,但毕竟还算有些收获了。另外,通过三次实验下来,对于一个简易编译器的实现已经有了一个整体的构架了,相信在通过自己以后的深入学习,一定能写出属于自己的编译器。六、附录代码#include iostream#include algorithm#includeconio.husing namespace std;int address=100; //每条分析语句的地址int LID=0; //表示过程执行到相应位置的地址符号int tID=0;//用于替换表达式的标识符int ip=0;string shuru[666];//存放从文件读入的字符串int maxsize;//设置存放数组的长度string biaodashi();/*****字符串和数字的连接*****/string link(string a,int b){string t=;do{t+=b%10+0;b/=10;}while(b);reverse(t.begin(),t.end());return a+t;}/*****获取表达式中的元素对象*****/string element(){if(shuru[ip]==expr||shuru[ip]==num){ip++;return shuru[ip-1];}else if(shuru[ip]==(){ip++;string result=biaodashi();if(shuru[ip]==))ip++;else puts(Lack));return result;}else puts(error);return ;} /*****处理表达式*****/string expression_1(string op){if(shuru[ip]==*||shuru[ip]==/){op=shuru[ip];ip++;string arg1=element();string op_1=,result=link(t,tID++);string arg2=expression_1(op_1);if(op_1==)op_1==;if(arg2==) coutaddress++: result = arg1endl;else coutaddress++: res
您可能关注的文档
最近下载
- (高清版)ZT 0142-2010 航空磁测技术规范.pdf VIP
- 高三读后续写题库练习题55篇(含范文解析).pdf VIP
- 临床技术操作规范与诊疗指南骨科学分册.pdf
- 中国漆包线行业市场发展现状及前景趋势与投资分析研究报告.docx
- (周髀算经.doc VIP
- 自然拼读 phonics kids book3双字母组合发音.pdf
- 课题申报参考:大数据赋能下高职学生画像与高质量充分就业实施路径研究.docx VIP
- 2024年职业技能测试题库500道及答案(全国通用).docx
- 医疗器械内勤工作总结.pptx VIP
- 课题申报参考:高质量充分就业背景下坚毅缓解高校毕业生就业焦虑的实验、追踪及干预研究.docx VIP
文档评论(0)