版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译系统设计实践实验项目三:语法制导翻译与生成中间代码学号:年级:学院:.数计学院专业:计算机本组其它成员:学号学号实验时间: 2016 2017 学年第一学期任课教师:、实验目的通过语法制导或翻译模式生成中间代码。二、实验容在自底向上语法分析基础上设计语义规则(语法制导翻译),将源程序翻译 为四元式输出,若有错误将错误信息输出。三、设计思路1. 分析过程主函数,读取文件,存入字符串数组,调用语义分析,判断关键字,调用 相应的语义规则(这里只有 if 和 while 和赋值语句),赋值语句调用表达式处 理,if语句调用条件表达式处理,while也是调用表达式处理,然后是一个递归 过程,不断的递
2、归调用,按序输出三地址语句。在本例程序中选用 expr 及 num 作为运算数。2. 主要函数string link()string element() string expression()/字符串和数字的连接 /获取表达式中的元素对象 /处理表达式string expression_1()/处理表达式stri ng biaodashi()stri ng biaodashi_1()stri ng getOperator()void condition(int L1,int L2)void yuyife nxi_l ist()void yuyife nxi_l ist_1()void yuyi
3、fen xi (int n ext,i nt &flag)void readfile()处理表达式,转为三地址输出递归-处理表达式,转为三地址输出/判断并获取运算符输出if语句的条件的三地址代码/生成并输出条件返回地址/递归-生成并输出条件返回地址判断关键字,调用相应的产生式分析/文件读入四、测试报告1. 第一组测试:input -记事本文件團 漏皐里 唁式辿 萱看竺 a(H)if ( expr > num ) expr 二 expr + eipr else expr - exr * expr + expr ;图1-1输入待翻译代码312340 t T T T Xb 7 CO t
4、 t t X1 9 t X23 I- 1JI0 1234 5 6 :789 o1 O.uuofloo2uooll£if *rlE汽有关学乞'躺译t诣宜分忻.see-1 U32t n 110 tt 00 s I0L2L3o1-t-k39 t七p-rn<?PF:s pxi t.pri af t.er 0. 8122 seconds with retixmI请按任凄縫维绩+ .-图1-2中间代码生成2. 第二组测试:_ I input *记事本文件彌搭式回宣看也誓助(tD expr 二 expr + expr ;expr - expr * expr + expr图2-1输入待
5、翻译代码7 = = = : = - - 语102 o1L3 o11-4 o ulxAboDOo-«9o分析如下: tO - expr tl = expr = tlt3 = tO + expr = t315 - expr 14 - Expzr16 - espr t7 = t6 18 = t4 + expr = t8t2+ t517Process exited after 0. 6506 seconds with return value 0 请按任意键继续 图2-2中间代码生成3. 第三组测试:错误待翻译代码input -记事本文禅迥 扁辑迫 梧式Q 查看也 帮取凹ejtpr = ex
6、pr + | ,expr = erpr 木 expr + expr ;图3-1输入待翻译代码T E:有关学习偶葷這义分祈ce语义分析如下:100: 10 - expr error101:tl=102:t2二tl103:t3=tO +12104: expi - t2105:t5=expr106:t4=expr* t5107:t6-expr108:t7=t612:13=t4 +17110: expr = t8Process exited After 0. 7359 seconds with return value 0書柠忏肓澤纺汇一一 一图3-2中间代码生成五、实验总结实验三的重点在于判断关键字
7、,调用相应的产生式分析及处理表达式,转为 三地址输出部分,也是很费时间的难点部分,但通过查阅书本及网上资料,还是 将其以多个处理函数的递归调用实现了,虽然最后实现结果对错误的分析还不够 精确有些差强人意,但毕竟还算有些收获了。另外,通过三次实验下来,对于一 个简易编译器的实现已经有了一个整体的构架了, 相信在通过自己以后的深入学 习,一定能写出属于自己的编译器。六、附录代码#in elude <iostream>#i nclude <algorithm>#in clude<c oni o.h> using n amespace std;int LID=0;/
8、表示过程执行到相应位置的地址符int tID=0;/用于替换表达式的标识符int ip=0;string shuru666;/存放从文件读入的字符串int maxsize;/设置存放数组的长度string biaodashi();/* 字符串和数字的连接 */ string link(string a,int b)string t=""dot+=b%10+'0'b/=10;while(b);reverse(t.begin(),t.end();return a+t;/* 获取表达式中的元素对象 */ string element()if(shuruip=&qu
9、ot;expr"|shuruip="num")ip+;return shuruip-1;else if(shuruip="(")ip+;string result=biaodashi();if(shuruip=")")ip+;else puts("Lack)");return result;else puts("error");return ""/*处理表达式 */string expression_1(string &op)if(shuruip="
10、;*"|shuruip="/")op=shuruip;ip+;string arg1=element();string op_1="",result=link("t",tID+);string arg2=expression_1(op_1);if(op_1="")op_1="="if(arg2="") cout<<address+<<":"<<" "<<result<<
11、;" = "<<arg1<<endl;else cout<<address+<<":"<<" "<<result<<" = "<<arg1<<" "<<arg2<<endl;return result;return """<<op_1<<"/*处理表达式 */string expression()str
12、ing op="",result=link("t",tID+);string arg1=element();string arg2=expression_1(op);if(op="")op="="cout<<address+<<":"<<" "<<result<<" = "<<arg1<<endl;elsecout<<address+<<"
13、:"<<" "<<result<<" = "<<arg1<<" "<<op<<" "<<arg2<<endl;return result;/* 递归 -处理表达式,转为三地址输出 */string biaodashi_1(string &op)string result=""if(shuruip="+"|shuruip="-")op
14、=shuruip;ip+;string arg1=expression();string op_1=""string arg2=biaodashi_1(op_1);result=link("t",tID+);op_1="="if(arg2="")cout<<address+<<":"<<" "<<result<<" = "<<arg1<<endl;else"<
15、;<op_1<<"cout<<address+<<":"<<" "<<result<<" = "<<arg1<<" "<<arg2<<endl;return result;/* 处理表达式,转为三地址输出 */string biaodashi()string arg1="",op=""if(shuruip="+"|shur
16、uip="-")arg1=shuruip;ip+;arg1+=expression();string arg2=biaodashi_1(op);string result=link("t",tID+);op="="if(arg2="")cout<<address+<<":"<<" "<<result<<" = "<<arg1<<endl;elsecout<<ad
17、dress+<<":"<<" "<<result<<" = "<<arg1<<" "<<op<<" "<<arg2<<endl;return result;/* 判断并获取运算符 */string getOperator()if(shuruip="="|shuruip="<>"|shuruip="<"
18、|shuruip=">"| shuruip="<="|shuruip=">=")ip+;elseputs("error");return ""/* 输出 if 语句的条件的三地址代码 */void condition(int L1,int L2)/L1,L2 分别为 if 条件为 true 和 false 时候的跳转地址string result=link("t",tID+);string arg1=biaodashi();/获得表达式的运算符的左边容str
19、ing op=getOperator();/获得表达式的运算符string arg2=biaodashi();/获得表达式的运算符的右边容if(arg2="")cout<<" "<<result<<" = "<<arg1<<endl;elsecout<<address+<<":"<<" "<<result<<" = "<<arg1<<
20、" "<<op<<" "<<arg2<<endl;cout<<address+<<":"<<" if true "<<result<<" goto "<<"L"<<L1<<endl;cout<<address+<<":"<<" if false "<&l
21、t;result<<" goto "<<"L"<<L2<<endl;/* 判断关键字,调用相应的产生式分析void yuyifenxi(int next,int &flag)if(shuruip="expr")ip+;if(shuruip="=")/赋值语句 转化为四元式ip+;string arg1=biaodashi();string arg2=""if(arg2 = "") cout<<address+
22、<<":"<<" expr = "<<arg1<<endl;else puts("error");/if 的语义子程序else if(shuruip="if")ip+;int L1=LID+;int L2=LID+;condition(L1,L2);elseputs("Lack(");return;if(shuruip=")") ip+;else puts("Lack)");return;printf("L%d:n",L1);yuyifenxi(next,flag);ip+;if(shuruip="else")printf("L%d:n",L2);ip+;yuyifenxi(next,flag);ip+;int L2=LID+; if(shuruip="(")ip+;printf("L%d:n",L1);condition(L2,next);elseputs("Lack(");return;if(shuruip=")") ip+;else puts
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CAQI 456-2025智能制造 工业数据 智能化应用导则
- T/CATCM 005-2024中药追溯体系实施规范
- DB32/T 4712-2024建设用地土壤污染风险筛选值
- T/CI 1273-2025大跨度综合体装配式建筑安装工程集成施工技术要求
- T/HAEPCI 53-2023有色金属冶炼地块重金属污染土壤分级治理技术规范
- T/CMAM Z36-2024藏医病名注释(第一批)
- 内蒙古自治区乌兰察布市集宁区集宁亿利东方学校三校2025-2026学年八年级上学期10月月考生物试卷(含解析)
- 2026年秋季学期小学四年级信息科技教学计划(清华版·新疆)
- 2026-2027学年湖南省长沙卓华高级中学高二(上)开学物理试卷(含答案)
- 2026年法学专业基础考点巩固习题
- 2026年高职编辑出版学(版权贸易)试题及答案
- 2026年六安霍邱县沣源水务有限责任公司公开招聘工作人员10名考试备考试题及答案详解
- 2《中国人首次进入自己的空间站》课件
- 高职单招考试数学总复习
- 节假日值班值守工作制度
- 财产损失评估报告范本
- 避雷器安装技术规范及方案说明
- ApIQ1培训课件教学课件
- 雅礼中学内控制度
- 反歧视知识培训课件
- 人类的飞天梦课件
评论
0/150
提交评论