下载此文档

cmm试验报告总结.doc


文档分类:行业资料 | 页数:约3页 举报非法文档有奖
1/3
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/3 下载此文档
文档列表 文档介绍
CMM试验报告总结
小组成员:
朱雯 9班 200532580297
负责编译器的部分:
词法,语法分析,中间代码的生成
对这次试验的评价: √非常好, 好, 一般, 差
觉得在这次实验中学到了很多。包括对类和对象概念的清晰,对于编译器整个的流程有了一个比较清晰地了解,对上一个学期学的知识有了更进一步的探索,并学以致用。同时,更深刻体会到一个开发团队的分工合作,团结和沟通的重要性。我们一直在努力做得更好。
在编写设计中遇到的难题:
难题1:
描述:
表的创建和存储
(或数组)时,必须将它的信息存储到一个表里,以便以后对其进行操作。但是,因为如果在if-else语句或while循环中声明一个变量时,出了这个循环,还可以再声明一个同名的变量(或数组)。这样,就会存在可能存储了多个同名的数据或者一个变量名代表了多个变量。
,我们每添加一个标志符(或数组,临时变量),就new一个标识符对象(对象里包含了这个对象的信息,比如name,type,value等)add到arrayList中。这里,就存在一个问题,以后要查找是否有这个标识符时,或者要查找某个标识符在arrayList里的index时,因为表里存储的是这个对象,就不能直接根据标识符的名字来查询
是否解决(√/ ×)

解决方案:
问题1:因为中间代码生成是在(简单的)语义分析分析之后,所以,在分析正确之后,就不会再存在嵌套循环里的重复声明变量,也不可能声明了全局变量后,在if或while中再次声明一个同名变量。只可能在if或while语句完成之后,(在条件不满足时)在另一个if或while的{}中声明
比如:if(2<3){int i;}else{};
While(…){int i=4;}
而在出了if或while语句后,这个变量就不再有用。这样的话,我们在碰到声明语句时,先判断表里有没有存储这个变量,如果没有,就添加,反之则不再重复添加。只要表中存储了这个变量,在以后中间代码被执行时,若可能给它进行第二次赋值,那么,第一个变量肯定以后不会再用到,所以不用担心会混淆后面的代码中的变量。
问题2:我们另创建一个arrayList,来存储变量的name,index与存储变量对象的表一一对应。以标识符为例,假设声明一个int a;(new BStable(“a”,”int”); (“a”);这样在以后查找标识符时,可直接先从BSlist中查找标识符的index,再在BStablelist中查找标识符的其他信息。若要查询表中是否已存储标识符a,也可直接从BSlist中
(“a”)来得到。
难题2:
描述:
表达式的语法分析及其中间代码的生成。
因为表达式涉及的四则运算存在运算符的优先级问题,在语法分析和生成中间代码时,怎么判断表达式是否符合文法。
若语法语义分析正确后,如何输出一个表达式的中间代码。
尤其是生成中间代码时,因为中间代码是以四元式的形式存在的,中间代码在生成的同时,要在变量表里存储变量的信息,为方便以后在编译执行时能够知道去哪里存取和操作变量,四元式中的参数,要以VARG(标识符变量名)

cmm试验报告总结 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息