




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学编译原理课内实践说明书学 号: 0121210340527课内实践报告 课程名称 编译原理 题 目FOR循环语句的翻译程序设计(简单优先法、输出三地址码)学 院计算机科学与技术专 业计算机科学与技术班 级1201姓 名李潇颖指导教师林泓2014年12月9日课内实践任务书学生姓名: 李潇颖 专业班级: 计算机1201班 指导教师: 林泓 工作单位:计算机科学与技术学院 题目: FOR循环语句的翻译程序设计(简单优先法、输出三地址码)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务
2、: (包括课内实践工作量及其技术要求,以及说明书撰写等具体要求)(1) 写出符合给定的语法分析方法的文法及属性文法。(2) 完成题目要求的中间代码三地址码的描述。(3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。(4) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。(5) 设计报告格式按附件要求书写。课内实践报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的
3、测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课内实践报告。设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。设计报告书收取时间:设计周的次周星期一上午10点。指导教师签名: 年 月 日系主任(或责任教师)签名: 目录1 系统描述(问题域描述)31.1设计目的31.2设计内容描述32.文法的描述33 语法分析方法描述及语法分析表设计43.1语法分析方法描述43.2 分析法操作步骤43.3优先关系矩阵54 中间
4、代码形式的描述65 编译系统的概要设计(主要函数)66 详细的算法描述(流程图)76.1词法分析过程76.2语法分析过程06.3三地址码的输出07 测试方法和测试结果18.心得体会49.代码(完整)510.本科生课内实践成绩评定表14FOR循环语句的翻译程序设计(简单优先法、输出三地址码)1 系统描述(问题域描述)1.1设计目的 通过学习编译原理的相关内容,设计并编写FOR循环语句的翻译程序,使用简单优先法,按三地址码输出,能够实现词法分析,语法和语义的分析,加深对所学知识的理解,并且能够熟练运用到实际当中。 1.2设计内容描述FOR循环语句的基本格式如下:FOR(表达式1;表达式2;表达式3
5、)赋值语句根据所给题目要求,设计出符合FOR循环语句的文法及属性文法的描述,语法分析方法以及三地址码的输出方式,罗列出词法分析和语法分析的流程,根据语法规则设计输入输出方法,简单优先法中的优先关系表格。设计好并且进行编译,设计若干输入输出用例(包括正确的输入和错误的输入,用来检查程序的完整性)。 2.文法的描述根据For语句的特点,制定的产生式规则及由产生式对应的语义动作如下:H-f(G;A;B)S; GOTOH-f(G;C;D)S; GOTOG-i1=i2 i1.CODE=i2.CODEA-i1=i2.CODE GOTO OVERB-id i.CODE=i.CODE+1C-i1i2 IFi1
6、.CODEia i.CODE=i.CODE-1S-j=M j.CODE=M.CODEM-E M.CODE=E.CODEE-W E.CODE=W.CODEW-W+U W.CODE=W.CODE+U.CODEW-W-U W.CODE=W.CODE-U.CODEW-U W.CODE=U.CODEU-T U.CODE=T.CODET-T*F T.CODE=T.CODE”F.CODET-T/F T.CODE=T.CODE/F.CODET-F T.CODE=F.CODEF-(E) F.CODE=(E.CODE)F-j F.CODE=j.CODE(备注:其中d表示-,a表示+) 3 语法分析方法描述及语法分
7、析表设计3.1语法分析方法描述本次课内实践要求使用简单优先关系方法。简单优先分析法的基本思想史对一个文法按照一定原则求出该文法所有符号即包括终结符和非终结符之间的优先关系确定归约过程中的句柄,它的归约实际上是一种规范归约。一个文法是简单优先文法必须满足以下条件(1) 在文法符号集V中,任意两个符号之间最多只有一种优先关系成立;(2) 在文法中任意两个产生式没有相同的右部。三种优先关系及其判定方法如下所示:(1) X=Y 表示X和Y的优先关系相等,当且仅当G中存在产生式规则AXY;(2) XY表示X的优先性比Y的优先性大,当且仅当G中存在产生式规则 ABD,且BX和DY;(4)对任何X,若文法开
8、始符号SX,则#。3.2 分析法操作步骤由简单优先分析法的基本思想设计的如下算法,首先要构造优先关系矩阵(如3.3所示),并将文法产生式保存,设置符号数组S:(1) 将输入符号串a1a2an # 依次逐个保存符号数组S中,直到遇到数组中第一个符号ai的优先性下一个待输入符号aj为止。(2) 数组当前符号ai为句柄尾,由此向左在数组中找句柄的头符号ak,即找到ak-1ak为止。(3) 由句柄akai在文法的产生式中查找右部为akai的产生式,若找到则用相应左部代替句柄,找不到则为出错,这是可断定输入串不是该文法的句子。(4) 重复(1)(2)(3),直到归约完输入符号串,数组中只剩文法的开始符号
9、为止。 3.3优先关系矩阵HGABSCDMEWUTFf(;)i=-j+-*/#HG=A=B=S=C=D=ME=W=UT=Ff=(=;=i=-j=+=-=*=/=# 空白表示,没有优先级关系4 中间代码形式的描述三地址码是由下面一般形式的语句构成的序列: x:=y op z其中,xyz为名字、常数或变量;op代表运算符。对于本程序的具体三地址码输出,预计显示结果如下:给定输入程序for(i=0;i10;i+)j=b+c;三地址码输出为 i=0 goto i+ if i10 goto else goto j=b+c goto end5 编译系统的概要设计(主要函数) 主要函数及对应实现的功能如下表
10、所示:函数名称实现功能Main()程序入口cifafenxi()进行词法分析bijiao()比较两个符号的优先级别sandizhima()保存产生的三地址码序列readFileByChars()将文本中的数据入读Isguanjianzi()判断是否为关键字Isjiefu()判断是否为界符Isyunsuanfu()判别是否为运算符6 详细的算法描述(流程图)6.1词法分析过程给定输入程序for(i=0;i10;i+)j=b+c;词法分析结果为14关键字为:1;标识符为:2;常数为:3;运算符为:4;界符为:56.2语法分析过程6.3三地址码的输出给定输入程序for(i=0;i10;i+)j=b+
11、c;三地址码输出为 i=0 goto i+ if i10 goto else goto j=b+c goto end7 测试方法和测试结果计算机系统:Windows 7编译调试环境:Eclipse程序语言:JAVA设计测试用例: (1)data.txt中保存如下程序段for(i=0;i0;i-)j=a*(h+c); 输出如下结果8.心得体会 经过这次课内实践,使我更加扎实的掌握了有关编译原理方面的知识,在编写程序的过程中遇到了许多问题,但经过一遍遍的调试终于使得程序可以顺利运行。但是程序中存在着很大的不足:例如在for循环语句的循环体中只能有一个赋值语句。对for()括号中的格式也有着严格的输
12、入要求等等,这些都是以后要改进的地方。过而能改,善莫大焉。在课内过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课内实践终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!回顾这次课内实践,是一个痛并快乐的过程,在构造简单优先
13、文法的矩阵时我尝试了5次构造,花费了许多时间,但是当成功构造出来时那种喜悦也是难以言表的。学习是个不断提升自我的过程。9.代码(完整)package lxy;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.Reader;import java.util.*;public class Bianyiyuanlikeshepublic static String sy=new String100;static int js=0;stati
14、c String m=new String4;public static String sh=new String();public static void main(String args)String s=new String19;s0=f(G;A;B)S;s1=f(G;C;D)S;s2=i=i;s3=ii;s6=ia;s7=j=M;s8=E;s9=W;s10=W+U;s11=W-U;s12=U;s13=T;s14=T*F;s15=T/F;s16=F;s17=(E);s18=j;char ss=new char19;ss0=H;ss1=H;ss2=G;ss3=A;ss4=B;ss5=C;s
15、s6=D;ss7=S;ss8=M;ss9=E;ss10=W;ss11=W;ss12=W;ss13=U;ss14=T;ss15=T;ss16=T;ss17=F;ss18=F;cifafenxi();String pp=new String();pp=;for(int i=0;ish.length();i+)if(!sy.equals(null)pp=pp+syi;String re=pp.split(;|r);m0=re1;char tt=m0.toCharArray();m0=;for(int i=1;im.length;i+)m0=m0+String.valueOf(tti);m1=re2;
16、m2=re3;char ttt=m2.toCharArray();m2=;for(int i=0;im.length-1;i+)m2=m2+String.valueOf(ttti);m3=re4;String n=new String();System.out.println(采用文法:);for(int i=0;i+si);/输出文法System.out.println(语法分析结果);String str=new String();str=sh+#;char r=str.toCharArray();char ru=new charr.length;int l=r.length;for(in
17、t i=0;ir.length;i+)rui=rl-1;l-;char fu=new charru.length ;fu0=#;int coutru=ru.length-1;int coutfu=0;int coutbi=0;char bi=new charru.length;while(fu1!=H)/System.out.println(fucoutfu+ +rucoutru);int b=bijiao(fucoutfu,rucoutru);if (b=-1)System.out.println(wrong);System.out.println(coutfu+wrong+coutru);
18、return ;if(b=0|b=1)if(b=0) coutfu+;/System.out.println(coutfu);fucoutfu=rucoutru;for(int i=0;i=0;i-)System.out.print(rui);System.out.println();System.out.println(rucoutru+ 移入);bicoutbi=0;coutbi+;coutru-;if(b=1)coutfu+;fucoutfu=rucoutru;for(int i=0;i=0;i-)System.out.print(rui);System.out.println();Sy
19、stem.out.println(rucoutru+ 移入);bicoutbi=1;coutbi+;coutru-;if(b=2)int m=0;for (int i=coutbi-1;i=0;i-)if(bii=1)break;else m+;for(int j=0;j=0;j-)System.out.print(ruj);System.out.println();coutbi=coutbi-m;String str2=new String();String str3=new String();for(int i=0;i&fucoutfu!=&fucoutfu!=B&fucoutfu!=C&
20、fucoutfu!=D&fucoutfu!=H&fucoutfu!=G&fucoutfu!=A&fucoutfu!=i&fucoutfu!=S&fucoutfu!=M&fucoutfu!=W&fucoutfu!=U&fucoutfu!=T&fucoutfu!=F&fucoutfu!=&fucoutfu!=+&fucoutfu!=-&fucoutfu!=*&fucoutfu!=/&fucoutfu!=(&fucoutfu!=)&fucoutfu!=E&fucoutfu!=#&fucoutfu!=j&fucoutfu!=#&fucoutfu!=j&fucoutfu!=a&fucoutfu!=d&f
21、ucoutfu!=&fucoutfu!=)str2=i+str2;elsestr2=String.valueOf(fucoutfu)+str2;coutfu-;for(int i=0;i+si+ 规约);n=n+Sandizhima(si);int t=bijiao(fucoutfu-1,fucoutfu);if(t=0)bicoutbi-1=0;else if(t=1)bicoutbi-1=1;else bicoutbi-1=2;if(fu1=H)System.out.println(成功!);System.out.println(生成的三地址为:);String m=n.split(,);
22、for(int k=0;km.length;k+)System.out.println(mk);public static int bijiao(char f,char r)int rr=0,ff=0;char z=H,G,A,B,S,C,D,M,E,W,U,T,F,f,(,;,),i,=,a,j,+,-,*,/,#;int fc=0;int rc=0;for(int i=0;iz.length;i+)if(f!=zi)fc+;if(r!=zi)rc+;if(fc=16)f=i;if(rc=16)r=i;for (int i=0;iz.length;i+)if(r=zi)rr=i;if(f=z
23、i)ff=i;int a=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
24、,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
25、,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1
26、,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,2,2,-1,-1,-1,-1
27、,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,0,1,1,1,1,-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
28、2,2,0,-1,-1,-1,-1,-1,-1,-1,-1,2,2,2,2,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,0,0,0,0,0,-1,-1,-
29、1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,1,1,1,1,-1,1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
30、-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,0,-1,-1,-1,-1,-1,2,2,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,1,-1,1,-1,-1,-1,-
31、1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-
32、1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,;/-1表示没关系,0表示等于,2表示大于,1表示小于return affrr;public static String Sandizhima(String p)char a;int j=0;String s=new String19;s0=f(G;A;B)S;s1=f(G;C;D)S;s2=i=i;s3=ii;s6=ia;s7=j=M;s8=E;s9=W;s10=W+U;s11=W-U;s12=U;s1
33、3=T;s14=T*F;s15=T/F;s16=F;s17=(E);s18=j;for(int i=0;i19;i+)if(p.equals(si)j=i;char ss=new char19;ss0=H;ss1=H;ss2=G;ss3=A;ss4=B;ss5=C;ss6=D;ss7=S;ss8=M;ss9=E;ss10=W;ss11=W;ss12=W;ss13=U;ss14=T;ss15=T;ss16=T;ss17=F;ss18=F;if(j=7)String f=new String();f=, +m3+, goto+, end;return f;if(j=4)String f=new S
34、tring();f=, +m2+, if +m1+ goto else goto;return f;if(j=6)String f=new String();f=, +m2+, if +m1+ goto else goto;return f;if(j=2)String f=new String();f= +m0+, +goto ;return f;return;public static void sansidzhima(String m)char b=m.toCharArray();String a=new Stringb.length;for(int i=0;ia.length;i+)ai
35、=String.valueOf(bi);String f=+,-,*,/,=;int c2=1;int bc=0;int t=0;for(int i=0;ia.length;i+)int cc=0;for(int j=0;j=0;k-)if(ak!=null&cc2)if(cc=0)System.out.print(ak+,);if(cc=1)System.out.print(ak);cc+;ak=null;System.out.print();System.out.println();ai=(+String.valueOf(c2)+);c2+;break;public static int
36、yunsuanfu(char a)boolean b;if(a=i)return 0;char p=+,-,*,/,),(;for(int i=0;ip.length;i+)if(a=pi)return 2;return 0;public static void cifafenxi()System.out.println(关键字为:1; );System.out.println(标识符为:2; );System.out.println(常数为:3; );System.out.println(运算符为:4;);System.out.println(界符为:5);System.out.println(词法分析结果);readFileByChars(c:/data.txt);char x=sh.toCharArray();for(int i=13;ish.length();i+)if(xi=i)xi=j;sh=;for(int i=0;ix.length;i+)sh=sh+xi;public static voi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告活动策划与实施的成功因素试题及答案
- 医学招聘考试试题及答案
- 心理学电大试题及答案
- 如何通过考试提升检验员综合素质试题及答案
- 中考摸底测试题及答案
- 春游助教面试题及答案
- 了解纺织品检验员应具备的专业素养试题及答案
- 油漆工初级试题及答案
- 助理广告师考试品牌个性与用户信任的关系试题及答案
- 广告设计师职场挑战试题及答案
- 西班牙文化概况
- 桩侧摩阻力ppt(图文丰富共28)
- 预拌混凝土出厂合格证2
- 幕墙材料运输方案
- 小学校本课程教材《鼓号队》
- 云南省饮用水生产企业名录534家
- 9E燃机系统培训演3.25
- 苏霍姆林斯基教育思想-PPT课件
- 脊髓损伤康复评定治疗PPT课件
- 啤酒贴标机毕业设计论文
- 无砟轨道底座板首件施工总结(最新)
评论
0/150
提交评论