FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料.pdf

上传人:tbuqq 文档编号:5196939 上传时间:2020-02-19 格式:PDF 页数:23 大小:1.15MB
返回 下载 相关 举报
FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料.pdf_第1页
第1页 / 共23页
FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料.pdf_第2页
第2页 / 共23页
FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料.pdf_第3页
第3页 / 共23页
FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料.pdf_第4页
第4页 / 共23页
FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料.pdf_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料.pdf》由会员分享,可在线阅读,更多相关《FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料.pdf(23页珍藏版)》请在三一文库上搜索。

1、学号:0121210340527 课内实践报告 课程名称编译原理 题目 FOR 循环语句的翻译程序设计(简 单优先法、输出三地址码) 学院计算机科学与技术 专业计算机科学与技术 班级1201 姓名李潇颖 指导教师林泓 2014 年12 月9 日 武汉理工大学编译原理课内实践说明书 1 课内实践任务书 学生姓名:李潇颖专业班级:计算机 1201 班 指导教师:林泓工作单位:计算机科学与技术学院 题目: FOR 循环语句的翻译程序设计(简单优先法、输出三地址码) 初始条件: 理论:学完编译课程,掌握一种计算机高级语言的使用。 实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进 行

2、设计。 要求完成的主要任务 :(包括课内实践工作量及其技术要求,以及说明书撰写等具体 要求) (1) 写出符合给定的语法分析方法的文法及属性文法。 (2) 完成题目要求的中间代码三地址码的描述。 (3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4) 编制好分析程序后, 设计若干用例, 上机测试并通过所设计的分析程序。 (5) 设计报告格式按附件要求书写。课内实践报告书正文的内容应包括: 1 系统描述(问题域描述) ; 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要

3、设计; 6 详细的算法描述(流程图或伪代码) ; 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写) 。 时间安排: 设计安排一周:周1、周 2:完成系统分析及设计。 周 3、周 4:完成程序调试及测试。 周 5:撰写课内实践报告。 设计验收安排:设计周的星期五第1 节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10 点。 指导教师签名:年月日 系主任(或责任教师)签名: 武汉理工大学编译原理课内实践说明书 2 目录 1 系统描述(问题域描述). 3 1.1 设计目的 3 1.2

4、设计内容描述 3 2. 文法的描述 . 3 3 语法分析方法描述及语法分析表设计. 4 3.1 语法分析方法描述 4 3.2 分析法操作步骤 . 4 3.3 优先关系矩阵 5 4 中间代码形式的描述 . 6 5 编译系统的概要设计(主要函数). 6 6 详细的算法描述(流程图). 7 6.1 词法分析过程 7 6.2 语法分析过程 0 6.3 三地址码的输出 0 7 测试方法和测试结果 . 1 8. 心得体会 . 4 9. 代码(完整) . 5 10.本科生课内实践成绩评定表. 14 武汉理工大学编译原理课内实践说明书 3 FOR循环语句的翻译程序设计(简单优先 法、输出三地址码) 1 系统描

5、述( 问题域描述 ) 1.1 设计目的 通过学习编译原理的相关内容, 设计并编写 FOR 循环语句的翻译程序, 使用简单优 先法,按三地址码输出,能够实现词法分析,语法和语义的分析,加深对所学知识的理 解,并且能够熟练运用到实际当中。 1.2 设计内容描述 FOR 循环语句的基本格式如下: FOR (表达式 1;表达式 2;表达式 3)赋值语句 根据所给题目要求, 设计出符合 FOR 循环语句的文法及属性文法的描述,语法分析 方法以及三地址码的输出方式, 罗列出词法分析和语法分析的流程,根据语法规则设计 输入输出方法, 简单优先法中的优先关系表格。设计好并且进行编译, 设计若干输入输 出用例(

6、包括正确的输入和错误的输入,用来检查程序的完整性)。 2. 文法的描述 根据 For 语句的特点,制定的产生式规则及由产生式对应的语义动作如下: H - f ( G ; A ; B ) S ; G O T O H - f ( G ; C ; D ) S ; G O T O G-i 1 =i 2 i 1 .COD E=i 2 .CODE A-i 1=i2.CODE GOTO OVER B-i di. CODE=i. CODE+1 C-i 1i2 IFi 1.CODEi ai. COD E=i. CODE-1 S-j =Mj. COD E=M. CODE M - EM. CODE=E. COD E

7、 E-WE. CO DE=W. CODE 武汉理工大学编译原理课内实践说明书 4 W-W+U W.CODE=W.CODE+U.CODE W-W-U W.CODE=W.CODE-U.CODE W- UW. CODE=U. CODE U-TU. COD E=T. COD E T-T*F T.CODE=T.CODE”F.CODE T-T/F T.CODE=T.CODE/F.CODE T-FT. COD E=F. CODE F-(E) F.CODE=(E.C ODE) F-jF. CODE=j. CODE (备注:其中 d表示- ,a表示+) 3 语法分析方法描述及语法分析表设计 3.1 语法分析方法

8、描述 本次课内实践要求使用简单优先关系方法。 简单优先分析法的基本思想史对一个文法按照一定原则求出该文法所有符号即包 括终结符和非终结符之间的优先关系确定归约过程中的句柄,它的归约实际上是一种规 范归约。一个文法是简单优先文法必须满足以下条件 (1)在文法符号集 V中,任意两个符号之间最多只有一种优先关系成立; (2)在文法中任意两个产生式没有相同的右部。 三种优先关系及其判定方法如下所示: (1)X=Y 表示 X和 Y的优先关系相等, 当且仅当 G中存在产生式规则AXY ; (2)XY表示 X的优先性比 Y的优先性大,当且仅当G中存在产生式规则 ABD ,且 BX和 DY; (4)对任何 X

9、,若文法开始符号SX,则 #。 3.2 分析法操作步骤 由简单优先分析法的基本思想设计的如下算法,首先要构造优先关系矩阵(如3.3 所示) ,并将文法产生式保存,设置符号数组S: (1)将输入符号串 a1a2an# 依次逐个保存符号数组S中,直到遇到数组中第一个 符号 ai的优先性 下一个待输入符号aj为止。 (2)数组当前符号ai为句柄尾,由此向左在数组中找句柄的头符号ak,即找到 ak-1 - - j + - * / # H G = A = B = S = C = D = M E = W = = U T = = F f = ( = = = = i = = = = = = = = - - j

10、 = + = i=0 goto i+ if i else goto j=b+c goto end 5 编译系统的概要设计( 主要函数 ) 主要函数及对应实现的功能如下表所示: 函数名称实现功能 Main() 程序入口 cifafenxi() 进行词法分析 bijiao() 比较两个符号的优先级别 sandizhima() 保存产生的三地址码序列 readFileByChars()将文本中的数据入读 Isguanjianzi() 判断是否为关键字 Isjiefu() 判断是否为界符 Isyunsuanfu() 判别是否为运算符 武汉理工大学编译原理课内实践说明书 7 6 详细的算法描述(流程图)

11、 6.1 词法分析过程 给定输入程序 for(i=0;i 6.2 语法分析过程 6.3 三地址码的输出 给定输入程序 for(i=0;i i=0 goto i+ if i else goto j=b+c goto end 武汉理工大学编译原理课内实践说明书 1 7 测试方法和测试结果 计算机系统: Windows 7 编译调试环境: Eclipse 程序语言: JAVA 设计测试用例: (1)data.txt中保存如下程序段for(i=0;i0;i-)j=a*(h+c); 输出如下结果 武汉理工大学编译原理课内实践说明书 3 武汉理工大学编译原理课内实践说明书 4 8. 心得体会 经过这次课内

12、实践, 使我更加扎实的掌握了有关编译原理方面的知识,在编写程序 的过程中遇到了许多问题, 但经过一遍遍的调试终于使得程序可以顺利运行。但是程序 中存在着很大的不足: 例如在 for 循环语句的循环体中只能有一个赋值语句。对 for() 括号中的格式也有着严格的输入要求等等,这些都是以后要改进的地方。 过而能改,善莫大焉。在课内过程中,我们不断发现错误,不断改正,不断领悟, 不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。 这次课内实践终于顺利完成了,在设计中遇到了很多问题, 最后在老师的指导下, 终于 游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力, 不

13、能遇到问题就想 到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功 的做成想做的事, 才能在今后的道路上劈荆斩棘,而不是知难而退, 那样永远不可能收 获成功,收获喜悦,也永远不可能得到社会及他人对你的认可! 回顾这次课内实践, 是一个痛并快乐的过程, 在构造简单优先文法的矩阵时我尝试 了 5 次构造,花费了许多时间, 但是当成功构造出来时那种喜悦也是难以言表的。学习 是个不断提升自我的过程。 武汉理工大学编译原理课内实践说明书 5 9. 代码(完整) package lxy; import java.io.FileInputStream; import java.io

14、.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.util.*; publicclass Bianyiyuanlikeshe publicstatic String sy = new String100; staticintjs =0; static String m = new String4; publicstatic String sh =new String(); publicstaticvoid main(String args) String s=new String

15、19; 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 char 19; 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 ;s

16、s13=U ; ss14=T;ss15=T; ss16=T;ss17=F; ss18=F; cifafenxi(); String pp=new String(); pp=“ ; for ( int i=0;i“ +si);/ 输出文法 System. out .println ( “ 语法分析结果“ ); String str=new String(); str= sh+“#“ ; char r=str.toCharArray(); char ru=new char r.length; int l=r.length; for ( int i=0;i=0;i-)System.out .prin

17、t(rui); System. out .println(); System. out .println(rucoutru+“ 移入 “ ); bicoutbi=0; coutbi+; coutru-; if (b=1) coutfu+; 武汉理工大学编译原理课内实践说明书 7 fucoutfu=rucoutru; for ( int i=0;i=0;i-)System.out .print(rui); System. out .println(); System. out .println(rucoutru+“ 移入 “ ); bicoutbi=1; coutbi+; coutru-; if

18、 (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 n=n+Sandizhima(si); int t= bijiao(fucoutfu-1,fucoutfu); if (t=0)bicoutbi-1

19、=0; elseif (t=1)bicoutbi-1=1; else bicoutbi-1=2; if (fu1=H )System.out .println(“ 成功! “ ); 武汉理工大学编译原理课内实践说明书 8 System. out .println(“ 生成的三地址为:“ ); String m=n.split(“,“); for ( int k=0;k, a, j, +, -, *, /, #; int fc=0;int rc=0; for ( int i=0;ii“; s6=“ia“;s7=“j=M“; 武汉理工大学编译原理课内实践说明书 10 s8=“E“ ;s9=“W“

20、; s10=“W+U“;s11=“W-U“ ; s12=“U“ ;s13=“T“ ; s14=“T*F“;s15=“T/F“; s16=“F“ ;s17=“(E)“; s18=“j“; for ( int i=0;i “+m3+ “, goto“+“, end“; return f; if (j=4) String f=new String(); f= “, “+m2+ “, if “+m1+ “ goto else goto“; return f; if (j=6) String f=new String(); f= “, “+m2+ “, if “+m1+ “ goto else goto

21、“; return f; if (j=2) String f=new String(); f= “ “+m 0+ “, “+“goto “; return f; return“ ; publicstaticvoid sansidzhima(String m) char b=m.toCharArray(); String a=new Stringb.length; for ( int i=0;i=0;k-) if (ak!=null sh=sh+“f“; sy js =str1;js +; else b4= Ischangshu(str1); if (b4= true sh=sh+“i“; sy

22、 js =str1;js +; else if (!str1.equals(“ ) System.out .println(“ ); sh=sh+“i“; sy js =str1;js +; shuchu (b1,b2,str3); if (c=1)str1=str; else str1=“ ;str3=“ ;c=0;b1=b2=true ; catch (Exception e1) e1.printStackTrace(); finally if (reader != null) try reader.close(); catch (IOException e1) publicstaticb

23、oolean Isjiefu(String a) String jiefu =new String“;“, “,“, “, “, “/“, “(“, “)“, “ “ , “, “, “, “, “#“ ; boolean p= false; for ( int i=0;i“ , “=“ , “=“ , “!=“, “%“ , “+“ , “-“, “=“ , “ boolean p= false; for ( int i=0;i=0;) if (!Character.isDigit(a.charAt(i) if (a.charAt(i)!=.) returnfalse;returntrue

24、; publicstaticvoid shuchu(boolean a, boolean b,String st) if (a= true sh=sh+st;sy js =st;js +; elseif (st.equals(“ “)System.out .print(“ ); else System.out .println(“ ); if (st.equals(“+“ ) sh=sh+“d“ ; elseif (st.equals(“-“) sh =sh +“a“ ; elsesh=sh+st;sy js =st;js +; 武汉理工大学编译原理课内实践说明书 14 10. 本科生课内实践成绩评定表 班级:计算机 1201 班姓名:李潇颖学号: 0121210340527 序号评分项目满分实得分 1 学习态度认真、遵守纪律10 2 设计分析合理性10 3 设计方案正确性、可行性、创造性20 4 设计结果正确性40 5 设计报告的规范性10 6 设计验收10 总得分 / 等级 评语: 注:最终成绩以五级分制记。优(90-100 分) 、良( 80-89 分) 、中( 70-79 分) 、 及格( 60-69 分) 、60 分以下为不及格 指导教师签名:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1