版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工作流程与效率优化制度
- 幼儿园学校管理制度
- 探究实验-鼠妇
- 人教部编版四年级语文上册《语文园地七》精美课件
- 【寒假阅读提升】四年级下册语文试题-非连续性文本阅读(四)-人教部编版(含答案解析)
- 东北育才中学2023-2024学年高三第十次考试数学试题
- 算法设计与分析 课件 9.3-概率算法 - 拉斯维加斯算法
- 2024年广西客运从业资格证app软件
- 2024年滨州客运从业资格证模拟考试练习题
- 2024年广元驾驶员货运从业资格证考试题
- 江苏省历届中学生与社会作文大赛决赛试题及获奖范文(完整版)资料
- 六年级数学上册教案-分数乘法整理与练习 苏教版
- 《民航服务礼仪》项目五 地面服务礼仪
- 营业执照借用免责协议
- 小学道德与法治人教三年级上册第三单元安全护我成长-《遭遇陌生人》教案
- 三年级上册数学教案-数学好玩-2 搭配中的学问(12)-北师大版
- 2022年湖北省武汉市江岸区育才第二小学六上期中数学试卷
- PSA提氢装置操作规程
- 颅脑损伤的急救课件
- 融媒体中心节目信息三审三校制度
- (精华)国家开放大学电大专科《网络系统管理与维护》形考任务3答案
评论
0/150
提交评论