浅谈PHP(毕业论文)_第1页
浅谈PHP(毕业论文)_第2页
浅谈PHP(毕业论文)_第3页
浅谈PHP(毕业论文)_第4页
浅谈PHP(毕业论文)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要众所周知,现代信息技术是现代教育技术的基础和核心,培养和创新型的人才必须依靠现代教育技术。从这一层意义上讲,我们说掌握一定的计算机应用技能已经成为国家未来的合格建设者的必备素质,所以现在在大学中对非计算机系的学生开设了计算机文化基础课,并且通过这门课的学习使同学们能顺利的通过计算机等级考试。由于学习这门课的人很多,平时查看成绩就非常的麻烦。本系统就是为了方便老师和同学查看平时成绩而编写的,它具有快速、准确、方便的特点。本系统是学校WEB站点的一个子系统,具有很好的外部接口,能够很好的配合站点的其它子系统服务于学校的成绩管理。关键字: LAMP 查询 平时成绩AbstractIt is we

2、ll known that the modern information technology is foundation and the core of the modern educational technique, trained and the innovation talented person must depend on the modern educational technique.Says from this significance,it is extremely important to grasps the certain computer skill.so eac

3、h school has all opened the compute culture basic class.with the help of the study the computer cultue basic class,all students can through computer rank test smoothly.Because there is so many students study this class,the result of usually search are very trouble.This system is compiles for teacher

4、 and the schoolmate,with the help of this system,searche the result of text is very easy.The characteristic of this system is fast accurate and convenient.This system is a school WEB stand sub- system, has the very good exterior connection, coordinate stand other subsystems serve the school result m

5、anagement.Key words:LAMP Query Usual result目 录 摘要1一 引言4二 需求分析9三 总体设计11四 详细设计15五 测试报告23结束语24参考资料25第一章 引言(期刊网)伴随着网络的出现,网页逐渐融入人们的生活。快速及时的新闻浏览,五彩缤纷的网上信息,使网络与人们的生活息息相关,于是世界上又出现了第三媒体Internet。它打破了地域限制,真正使信息得以共享,改变了人们的工作和生活方式。制作网页是企业和个人的宣传自己的重要手段,同时也是学习者获取学习信息的重要手段。尤其是在教育领域,在素质教育与终身教育成为必然的今天,人们对信息的需求有了更新,更高

6、的要求,而网页由于本身所具有的信息量大,传递快速,没有时空限制等特点恰好满足这种要求。所以网页也逐渐成为一种新兴的教育资源。也正是由于网络实现网站的数据信息能够进行实时交互,保证网站数据的实时性。随着Internet的进一步发展,静态Web站点的开发与维护变得越来越困难,一方面信息的不断增加和变化,使站点维护人员不得不经常修改他们的网页,特别是基于数据库驱动的Web站点更是如此,随着Internet上信息量的增多和交互性的加强使HTML显得越来越难以胜任。另一方面静态网页由于不能与浏览者进行有效交互,使人们感到越来越乏味,而不愿意再一次地进入同一站点。所以开发动态网页或动态内容成了越来越多的站

7、点所追求目标。所谓动态内容是由每一个用户按照自己的需求发出请求而特殊制作的Web网页。网络发展前景无限,及早与网络结合,与信息时代同步,与高科技汇合,定会给社会各行各业的发展注入新鲜的活力。站在网络时代的前夜,我们清晰地听到了网络时代的宣言:谁掌握了网络,谁就掌握了未来。1.1 PHP简介:PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP。PHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点()自由下载。PHP遵守GNU公

8、共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到。安装过程很简单。 1.2 PHP的先进之处(发期刊网)应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到PHP4之前)。但是PHP的邮件列表很是有用而且除非你正在运行像Yahoo!或者A这样的极受欢迎的站点,你不

9、会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点:学习过程PHP的学习过程非常简单。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。PHP的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。你只需要30分钟就可以将PHP的核心语言特点全部掌握,你可能已经非常了

10、解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。数据库连接PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。可扩展性就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP

11、程序员来说并不困难。面向对象编程PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。可伸缩性传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。更多特点PHP的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP连接包括Oracle,

12、MS-Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能!1.3 MySQL数据库简介MySQL数据库可以称得上是目前运行速度最快的SQL语言数据库。除了具有许多其它数据库所不具备的功能和选择之外,MySQL数据库是一种完全免费的产品,用户可以直接从网上下载数据库,用于个人或商业用途,而不必支付任何费用.体来说,MySQL数据库具有以下主要特点: 1. 同时访问数据库的用户数量不受

13、限制; 2. 可以保存超过50,000,000条记录; 3. 是目前市场上现有产品中运行速度最快的数据库系统; 4. 用户权限设置简单、有效。 如今,包括Siemens和Silicon Graphics这样的国际知名公司也开始把MySQL作为其数据库管理系统,这就更加证明了MySQL数据库的优越性能和广阔的市场发展前景。1.4PHP连接MySQL数据库 $dbh = mysql_connect( ,您的用户名,您的密码); (如果用域名无法联结,可以用LOCALHOST) mysql_select_db(数据库名); $query = insert into requests(date, re

14、quest, email, priority,status) values (NOW(),$description, $email, $priority, NEW); $res = mysql_query($query, $dbh); $query = select max(id) from requests; $res = mysql_query($query, $dbh); $err = mysql_error(); if($err) echo $row = mysql_fetch_row($res); echo 未来您使用的号码为: .$row0; ?1.4 Apache简介(论文发表)

15、Apache是根据NCSA的服务器发展而来的,NCSA是最早出现的Web服务器程序之一,由伊利诺斯大学Urbana-Champaign分校的美国国家超级计算应用中心开发。在发展初期,Apache主要是一个基于UNIX系统的服务器,它的宗旨就是建成一个基于UNIX系统的、功能更强、效率更高并且速度更快的WWW服务器,这就决定了它是从其他的服务器演变而来的,并且添加了大量补丁来增强它在某一方面的性能,所以它就被命名为“APAtCHy Server(一个补丁组成的服务器)”。1.5 Linux简介简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列C

16、PU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。第二章 需求分析需求分析大致可分为三步来完成,即需求信息的收集、分析整理和评审通过。需求信息的收集公共课平时成绩查询系统要涉及到平时成绩的信息、老师和学生的基本信息和租借过程中的具体操作。平时成绩的基本信息:平时成绩的组成(考勤成绩和网上作业成绩)、详细信息(出勤次数、缺勤次数、网上作业提交情况、作业成绩情况)老师和学生的基本信息:教师编号、所教专业、年级、学号、专业等。基本操作信息:查询 (省级期刊)分析整理调查的目的 首先,要了解平时成绩查询

17、工作的工作流程。其次,要确定设计的目标,大致管理流程和任务范围划分。因此,平时成绩查询系统主要是通过对现在实际教学中成绩查询工作的调查、研究,并且通过和老师同学的交流来完善的。调查的内容了解公共课平时成绩查询系统的作用、现状、存在的问题,及是否适应计算机管理。调查方式通过对老师和同学的访问、交谈可获得成绩查询的需求,以及成绩查询的管理目标。并且,还可通过具体的查询工作对查询有一个更深的了解。评审通过任务概述目标将老师和同学共同操作的成绩查询工作转为老师和同学跟计算机系统共同完成操作,提高成绩查询效率,节省查询时间,降低人的工作强度。数据描述数据库描述数据库作为公共课平时成绩查询系统的基础之一,

18、主要是完成对平时成绩数据的存储,并且通过计算机来快速的查询成绩,辅助教师和学生快速准确的完成成绩的查询工作。数据采集基础数据从网站的另外两个系统(考勤系统和网上作业系统)取得。功能需求公共课平时成绩查询系统主要实现对公共课平时成绩的查询功能,教师能察看所教专业的全体学生的成绩,一般学生能查看自己的平时成绩。并通过扩展功能是教师和同学都可以查看平时成绩的详细情况。例如考勤的详细情况和网上作业的详细情况。运行要求正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数据完好无损,对数据的精确度、时间特性、适应性等都有一定要求,要求系统运行时能够保证正确性、可靠性、高效性、完整性、易使用性、

19、可维护性、可测试性、复用性、安全保密性、可移植性、互联性。第三章 总体设计在确定了软件需求和进行可行性研究之后,就进入了开发阶段。系统的主要功能与性能指标有了明确的标准,下面详细介绍总体设计的内容。31系统组成(国家级期刊)本系统的主要功能是实现查询功能,所以主要模块就一个,查询模块。下面是系统的模块图:教师查询:表3.1教师查询模块表学生查询:表3.1学生查询模块表查询模块的主要功能:实现教师和学生对公共课平时成绩的查询,并且实现查看平时成绩的详细情况。例如考勤情况、网上作业情况。3.2系统数据库的设计系统数据库名称:成绩管理数据库此系统所需要的数据库表有2个,所有表的结构列举如下:表 1

20、学生考勤信息表字段名中文含意类型num学号Char(10)name姓名Varchar(20)pro专业代码Varchar(20)Pre_times出勤次数Varchar(2)Absent_times缺勤次数Varchar(2)scores分数Int主键学号表2 教师发布作业成绩表字段名中文含意类型chengjiID成绩编号Char(20)teachID教师姓名Varchar(20)xuehao学号Char(10)proID专业代码Varchar(20)filetitle作业标题Varchar(100)fenshu网上作业分数Int(2) useID用户编号Char(10)主键成绩编号表3 提交

21、作业表字段名称中文含意数据类型xinxiID作业编号Smllint(5)xuehao学号Char(10)name姓名Varchar(20)nianji年级Varchar(20)proID专业代码Varchar(20)tijiaodate提交作业时间datezuoyeAddr作业地址Varchar(30)piyue批阅Varchar(100)filetitle作业标题Varchar(100)主键作业编号表4 上传作业表字段名中文含意数据类型UseID用户编号Char(10)Filetitle作业标题Varchar(100)Filetyle作业类型varchar(10)Fabuduixiang发布

22、对象varchar(20)fabudate发布日期datejiezhiDate作业截止日期datefaburen发布人Char(10)beizhu备注vatchar(100)主键作业标题以上各表之间的关系如下:图3.1表间关系第四章 详细设计本系统的主要功能是实现公共课平时成绩的查询功能,它又分为教师对所教专业全体学生的查询和每个学生对自己个人平时成绩的查询。查询的结果除了要求能看到平时成绩总的分数外,还要求可以查看每个学生平时成绩的详细情况。因为每个人的平时成绩是由考勤成绩和网上作业成绩组成的,所以在详细情况中需要考勤情况和网上作业情况。41教师查询(出版社征稿)图4.1教师查询流程图本系统

23、是计算机希网站中的一个子系统,所以它是和别的系统有联系的。比如用户登陆系统。当教师登陆后,点击成绩查询就会进入教师查询界面,如下:图4.2 教师查询界面每个教师所教的所有专业会在下拉列表中出现,教师在下拉列表中选择想要查询的专业后,再点击查询按钮后就可以查看出全体学生的平时成绩。请选择专业: 请选择专业: 计算机系 数学系 电子系 (国家级期刊发期刊网) 在form中输入action=”teacher_chaxun_answer.php”实现查询按钮的功能。teacher_chaxun_answer.php是全体学生平时成绩页面的名称。这样在下拉列表中选择所要查询的专业后,然后点击查询按钮后就

24、能进人全体学生平时成绩的界面。下面介绍全体学生的平时成绩界面: 图4.3 平时成绩界面在全体学生平时成绩界面调用调用SQL语句从数据库中取出要显示的数据放入数据集,然后绑定数据集,这时我们就可以从数据集中取出我们想要的自断了。有时我们并不会将所有的数据都记录在同一个数据表中,而会依每种数据内容的特性,将它分别记录在不同的数据表中。但是有时我们在分析某些数据时,却必须同时使用到这两个不同的数据表来处理,有什么办法可以将它们结合在一起呢?在SQL语法中若是要结合一个以上的数据表,必须在这些数据表中拥有一个相同的字段,即可以使用这个字段的纪录将不同的数据表关联起来,语法如下:SELECT,.FROM

25、INNER JOINON=进入这个页面要显示学生的学号、姓名、专业、网上作业分数、考勤分数和总分。这些字段从两张表中取得,一个是考勤信息表,另一个是教师发布作业表。这两个表都有学号这个字段,所以通过学号字段将两个表连接起来,连接情况如下:图4.4表连接所使用的MySQL语句如下:SELECT teacher_fbchengji.suozaiXi, teacher_fbchengji.xuehao, teacher_fbchengji.fenshu, , statistic.scores FROM teacher_fbchengji, statistic WHERE teacher_fbchen

26、gji.suozaiXi = %s AND teacher_fbchengji.xuehao = statistic.num ORDER BY teacher_fbchengji.xuehao ASCSELECT teacher_fbchengji.suozaiXi, teacher_fbchengji.xuehao, teacher_fbchengji.fenshu, , statistic.scores FROM teacher_fbchengji, statistic WHERE teacher_fbchengji.suozaiXi = %s AND teacher_fbchengji.

27、xuehao = statistic.num ORDER BY teacher_fbchengji.xuehao ASC以目前的设定若是预览,只会读出数据库中的第一笔数据。如果要显示数据库中的所有数据,我加入了以下代码: a href=teacher_chaxun_detail.php?recordID= mysql_fetch_assoc函数的功能是从结果集中取得一行作为关联数组。要看每个学生成绩的详细情况,我设计的是点击每个学生的学号进入详细界面,然后可以看到学生成绩的详细情况。实现这个功能的代码如下:recordID=?php echo $row_Recordset1xuehao;rec

28、ordID=?php echo $row_Recordset1xuehao;点击学生的学号可以查看每个学生成绩的详细情况。详细界面如下:图4.5 详细界面进入这个页面要显示学生的学号、姓名、专业、出勤次数、缺勤次数、作业明、作业分数。这些字段都不在一个表中,得从两个表中获得,这两个表的连接如下:所使用的SQL语句如下:SELECT * FROM statistic, teacher_fbchengji WHERE num = %s AND teacher_fbchengji.xuehao = %sSELECT * FROM statistic, teacher_fbchengji WHERE

29、num = %s AND teacher_fbchengji.xuehao = %s 在这个界面调用SQL语句从数据库中取出要显示的数据放入数据集,然后绑定数据集,在HTML中加入以上代码,在表格中加入要显示的字段。 42 学生查询图4.6学生查询流程图当学生用自己的用户名和密码登陆后,点击成绩查询,就会进入成绩查询界面。图4.7 学生查询界面在HTML中加入以上语句实现实现查询并跳转到平时成绩界面。 图4.8 平时成绩界面在这个页面的表格中需要显示学生的学号、姓名、考勤分数、网上作业分数和平时总分数。与教师的全体学生成绩页面一样,只不过学生的页只显示自己的一个人的记录就可以了,所以不用设置重

30、复选区。其他的和教师的一样,也需要将两个表连接起来,然后从两个表中获取所要的数据。图4.9表连接所使用的SQL语句如下:SELECT teacher_fbchengji.suozaiXi, teacher_fbchengji.xuehao, teacher_fbchengji.fenshu, , statistic.scores FROM teacher_fbchengji, statistic WHERE teacher_fbchengji.suozaiXi = %s AND teacher_fbchengji.xuehao = statistic.num ORDER BY teacher_

31、fbchengji.xuehao ASCSELECT teacher_fbchengji.suozaiXi, teacher_fbchengji.xuehao, teacher_fbchengji.fenshu, , statistic.scores FROM teacher_fbchengji, statistic WHERE teacher_fbchengji.suozaiXi = %s AND teacher_fbchengji.xuehao = statistic.num ORDER BY teacher_fbchengji.xuehao ASC然后点击学号进入详细界面:图4.10 详

32、细界面加入下面的代码使所有字段都显示出来。 第五章 测试报告软件测试在开发过程中是一个不可缺少的部分.因为在开发软件系统的漫长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观现实,与工程密切相关的各类人员之间的通信和配合也不可能完美无缺,因此,在软件生命周期的各个阶段都不可避免地产生差错;但是,经验表明审查并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误.如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分差错,则这些差错迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,而且往往会造成很恶劣的后果.测试的目的就是在软件投入生产运行之前,尽可能多地发

33、现并纠正软件中的错误.基于上述的原因,我在编码过程中进行了模块测试,编码结束后又进行了系统测试和验收测试.下面一一讲述测试方案测试过程以及测试结果测试方案:采用了白盒测试(又称结构测试),即按照程序内部的逻辑结构,检验程序中的每条通路是否都能按预定要求正常工作测试过程:主要检验各个模块之间的接口每个被调用模块是否正确接收参数 每个调用模块是否能调用每个自己想要调用的模块测试结果:测试结果表明,每个模块之间的接口都吻和既被调用模块都能正确接收参数,调用模块能调用自己想要调用的每个模块系统测试和验收测试测试方案:采用了黑盒测试(又称功能测试),即检查程序功能是否能按照规格说明书的规定正常使用,程序

34、是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息的完整性测试过程:主要检验是否能正确实现每个功能每个功能是否能按照规格说明书的要求正常使用。数据库的记录是否符合要求.结束语由于时间及水平有限,所以公共课平时成绩查询系统还有很多不完善和需要改进的地方。从外观上看可以使界面更加美观;从功能上看可以进一步完善查询功能,主要是完善详细情况的功能;例如我想可以在考勤情况中加入学生哪天没出勤,网上作业里可以查看老师对作业的批阅情况,使学生知道自己作业的完成情况。这次毕业设计是在金小峰老师的精心指导下进行的。通过这次毕业设计,我学到了许多书本上学不到的东西,深深地体会到了理论与实践相结合的重要性

35、。通过大学四年来的学习,我虽然掌握了一定的理论基础,但实践较少,通过这次毕业设计充分暴露出自己实践的不足,真正设计起来感到力不从心,不能得心应手。经过一定时间的摸索,逐渐对自己所学的知识有了进一步的认识,能够将其溶于实践之中,对自己的实践起到了一定的指导作用,同时通过实践也加深了对自己所学知识的理解。在这次的设计过程中,对于我来说,由于很多都是新知识,这就迫使我到处查阅相关资料,学习新知识,从而培养了独立思考解决问题的能力。并且在同小组的互相学习、互相鼓励、团结合作的学习气氛中,我学到了团结精神的实质和重要性。我的毕业设计能够完成,首先感谢金小峰 老师对我的精心指导,无论在理论上还是在实践中,

36、都给与我很大的帮助,使我能够坦然面对各种困难。同时还要感谢计算机系的教师给我们创造这么好的环境来完成毕业设计。再次,向金小峰老师表示衷心的感谢!参考文献(毕业论文)1. 网站PHP后台解决方案 余斌 人民邮电出版社2. Dreamwerver互动网站百宝箱for PHP 邓文渊 中国铁道出版社3PHP 4.0 与MySQL 动态网站编程 冯燕奎 清华大学出版社4PHP&MySQL网站建设宝典 黄经纬 清华大学出版社附录资料:不需要的可以自行删除C语言编译器的设计与实现 我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元

37、式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1) 词法分析部分(2) 语法分析处理及四元式生成部分 (3) 输出显示部分一词法分析器设计 由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。我们规定输出的单词符号格式为如下的二元式: (单词种别,单词自身的值)#define ACC -2#define syl_if 0#define syl_else 1#define syl_while 2#define syl_begin 3#define sy

38、l_end 4#define a 5#define semicolon 6#define e 7#define jinghao 8#define s 9#define L 10#define tempsy 11#define EA 12#define EO 13#define plus 14#define times 15#define becomes 16#define op_and 17#define op_or 18#define op_not 19#define rop 20#define lparent 21#define rparent 22#define ident 23#def

39、ine intconst 24函数说明 读取函数 readline( )、readch( )词法分析包含从源文件读取字符的操作,但频繁的读文件操作会影响程序执行效率,故实际上是从源程序文件” source.dat ”中读取一行到输入缓冲区,而词法分析过程中每次读取一个字符时则是通过执行 readch( )从输入缓冲区获得的;若缓冲区已被读空,则再执行readline( )从 source.dat 中读取下一行至输入缓冲区。扫描函数 scan( ) 扫描函数 scan( )的功能是滤除多余空格并对主要单词进行分析处理,将分析得到的二元式存入二元式结果缓冲区。变量处理 find( )变量处理中首先

40、把以字母开头的字母数字串存到 spelling 数组中,然后进行识别。识别过程是先让它与保留关键字表中的所有关键字进行匹配,若获得成功则说明它为保留关键字,即将其内码值写入二元式结果缓冲区;否则说明其为变量,这时让它与变量名表中的变量进行匹配( 变量匹配函数 find( ) ),如果成功,则说明该变量已存在并在二元式结果缓冲区中标记为此变量( 值填为该变量在变量名表中的位置),否则将该变量登记到变量名表中,再将这个新变量存入二元式缓存数组中。数字识别 number( ) 数字识别将识别出的数字填入二元式结果缓存数组。显示函数 显示函数的功能在屏幕上输出词法分析的结果( 即二元式序列程序),同时

41、给出二元式个数及源程序行数统计。二语法分析器设计 语法分析器的核心是三张 SLR 分析表以及针对这三张 SLR 分析表进行语义加工的语义动作。编译程序中语法分析处理及四元式生成部分主要是以二元式作为输入,并通过 SLR 分析表对语法分析处理过程进行控制,使四元式翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。在处理 if 和 while 语句时,需要进行真值或假值的拉链和返填工作,以便转移目标的正确填入。1. 控制语句的 SLR 分析表1 设计过程如下: 将扩展文法GS S1)S if e S else S2)S while e S3)S L 4)S a;5)L S6)L SL用_CL

42、OSURE方法构造LR(0)项目规范簇为:I0: S SS if e S else SS while e S S L S a ;I1: S SI2: S ife S else SI3: S while e SI4: S L L S L SL S if e S else SS while e S S L S a ; I5: S a; I6: S if e S else S S if e S else SS while e S S L S a ; I7: S while e S S if e S else SS while e S S L S a ; I8: S L I9: L S L SL L

43、SL L S S if e S else SS while e S S L S a ; I10: S a ; I11: S if e S else SI12: S while e S I13: S L I14: S SL I15: S if e S else S S if e S else SS while e S S L S a ; I16: S if e S else S 构造文法G中非终结符的FOLLOW集如下:FOLLOW(S) = # S if e S else S得FOLLOW(S) = else S L 得FOLLOW(L) = 3) S S 得FOLLOW(S) = else

44、, # L S 因为FIRST(S) = ,所以FOLLOW(S) = else , #, 在()项目规范簇中,只有9有“移进归约”冲突,L SL SL因为FOLLOW(L) FIRST(L) = 所以可以用方法解决以上冲突,最后我们得到的分析表如下:ACTIONGOTO ifElsewhilea;e#SL0S2S3S4S511ACC2S63S74S2S3S4S5985S106S2S3S4S5117S2S3S4S5128S139S2S3S4R5S591410R4R4R4111512R2R2R213R3R3R314R615S2S3S4S51616R1R1R1static int action20

45、11=/* 0 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 1, -1,/* 1 */ -1, -1, -1, -1, -1, -1, -1, -1,ACC, -1, -1,/* 2 */ -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1,/* 3 */ -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1,/* 4 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 9, 8,/* 5 */ -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1,/* 6

46、 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 11, -1,/* 7 */ 2, -1, 3, 4, -1, 5, -1, -1, -1, 12, -1,/* 8 */ -1, -1, -1, -1, 13, -1, -1, -1, -1, -1, -1,/* 9 */ 2, -1, 3, 4,105, 5, -1, -1, -1, 9, 14,/* 10*/ -1,104, -1, -1,104, -1, -1, -1,104, -1, -1,/* 11*/ -1, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,/* 12*/ -1,

47、102, -1, -1,102, -1, -1, -1,102, -1, -1,/* 13*/ -1,103, -1, -1,103, -1, -1, -1,103, -1, -1,/* 14*/ -1, -1, -1, -1,106, -1, -1, -1, -1, -1, -1,/* 15*/ 2, -1, 3, 4, -1, 5, -1, -1, -1, 16, -1,/* 16*/ -1,101, -1, -1,101, -1, -1, -1,101, -1, -1;其中,前 9 列为 action 值,后 2 列为 goto 值;016 表示 17 个移进状态( 即 Si);-1表示

48、出错;ACC 表示分析成功;而 100106 对应 7 个归约产生式:S SS if e S else SS while e SS L S a;L SL SL2. 算术表达式的 LR 分析表 2 设计如下:S EE E+EE E*EE (E)E i (过程略)ACTIONGOTOI+*()#E0S3S211S4S5ACC2S3S263R4R4R4R44S3S275S3S286S4S5S97R1R5R1R18R2R2R2R29R3R3R3R3static int action1107=/* 0 */ 3, -1, -1, 2, -1, -1, 1,/* 1 */ -1, 4, 5, -1, -1

49、,ACC, -1,/* 2 */ 3, -1, -1, 2, -1, -1, 6,/* 3 */ -1,104,104, -1,104,104, -1,/* 4 */ 3, -1, -1, 2, -1, -1, 7,/* 5 */ 3, -1, -1, 2, -1, -1, 8,/* 6 */ -1, 4, 5, -1, 9, -1, -1,/* 7 */ -1,101, 5, -1,101,101, -1,/* 8 */ -1,102,102, -1,102,102, -1,/* 9 */ -1,103,103, -1,103,103, -1;3.布尔表达式的 SLR 分析表3 设计如下:(

50、过程略)S BB iB i rop iB ( B )B ! BA B &B ABO B |B OBACTIONGOTOiRop()!&|#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S4S56786R4S9S10R47S1S4S514788S1S4S515789R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static int action21611=/* 0 */ 1, -1, 4, -1, 5, -1, -1, -1, 13, 7, 8,/* 1

51、*/ 1, 2, -1,101, -1,101,101,101, -1, -1, -1,/* 2 */ 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,/* 3 */ -1, -1, -1,102, -1,102,102,102, -1, -1, -1,/* 4 */ 1, -1, 4, -1, 5, -1, -1, -1, 11, 7, 8,/* 5 */ 1, -1, 4, -1, 5, -1, -1, -1, 6, 7, 8,/* 6 */ -1, -1, -1,104, -1, 9, 10,104, -1, -1, -1,/* 7 */ 1, -1,

52、 4, -1, 5, -1, -1, -1, 14, 7, 8,/* 8 */ 1, -1, 4, -1, 5, -1, -1, -1, 15, 7, 8,/* 9 */ 105, -1,105, -1,105, -1, -1, -1, -1, -1, -1,/*10 */ 107, -1,107, -1,107, -1, -1, -1, -1, -1, -1,/*11 */ -1, -1, -1, 12, -1, 9, 10, -1, -1, -1, -1,/*12 */ -1, -1, -1,103, -1,103,103,103, -1, -1, -1,/*13 */ -1, -1, -

53、1, -1, -1, 9, 10,ACC, -1, -1, -1,/*14 */ -1, -1, -1,106, -1, 9, 10,106, -1, -1, -1,/*15 */ -1, -1, -1,108, -1, 9, 10,108, -1, -1, -1;LR 分析表控制语义加工的实现:当扫描 LR 分析表的当前状态为归约状态时,则在调用与该状态对应的产生式进行归约的同时,调用相应的语义子程序进行有关的翻译工作。现在对 LR 分析器的分析栈加以扩充,使得每个文法符号之后都跟着它的语义值。为了清晰起见,我们把这个栈的每一项看成由三部分组成:状态 state ,文法符号 syl 和语义值

54、 val。编译程序实现算术表达式、布尔表达式及程序语句的语义加工时,都是按这种状态栈加工方式进行的。例如:( 5 + 3 ) * 6的分析过程序号STATEValsylinput10-#( 5 + 3 ) * 6 #202-#(5 + 3 ) * 6 #3023-#(5+ 3 ) * 6 #4026-5#(E+ 3 ) * 6 #50264-5-#(E+3 ) * 6 #602643-5-#(E+3 ) * 6 #702647-5-3#(E+E) * 6 #8026-8#(E) * 6 #90269-8-#(E)* 6 #1001-8#E* 6 #11015-8-#E* 6 #120153-8

55、-#E*6#130158-8-6#E*E#1401-48#E#15ACC在分析过程中,第(3)步操作后的状态栈为 023,根据栈顶状态“ 3”和现行输入符号“ +”( input 栏字符串的第一个字符)查分析表 ACTION3,+=R4,即按第(4)个产生式 En 来进行归约;由于产生式右部仅含一项,故去掉状态栈栈顶“3”;此时 2 变为新的栈顶状态,再查( 2,E)的下一状态 s:GOTO2,E=6,即将状态 6 和文法符号 E 压栈,最后得到第( 4)步的状态。第( 7)步操作后也是如此,当前状态栈为 02647,根据栈顶状态 7 和现行输入符号“ )”查分析表 ACTION7,)=R1,

56、即按第(1)个产生式 EE1+E2进行归约;由于产生式右部有三项,故去掉状态栈栈顶的 647 三项;此时 2 变为新的栈顶状态,再查( 2,E)的下一状态 s:GOTO2,E=6,即将状态 6 和文法符号 E 压栈,最后得到第(8)步的状态。三中间代码生成器设计:布尔表达式 布尔表达式在程序语言中有两个基本作用:一是用作控制语句( 如 if -else 或 while语句)的条件式;二是用于逻辑演算,计算逻辑值。布尔表达式是由布尔算符( &、| 、!)作用于布尔变量( 或常数)或关系表达式而形成的。关系表达式的形式是 E1 rop E2,其中 rop 是关系符( 如或),E1和 E2是算术式。

57、在这里,我们只考虑前面给定文法所产生的布尔表达式:BB &B | B | B | ! B | (B) | i rop i | i遵照我们的约定,布尔算符的优先顺序( 从高到低)为:!、&、|,并假定&和|都服从左结合规则。所有关系符的优先级都是相同的,而且高于任何布尔算符,低于任何算术算符,关系算符不得结合。表达式的真、假出口的确定:考虑表达式 B1 | B2 ,若 B1为真,则立即知道 B 也为真;因此,B1的真出口也就是整个 B 的真出口。若 B1?为假,则 B2必须被计值,B2的第一个四元式就是 B1的假出口。当然,B2的真、假出口也就是整个 B的真、假出口。类似的考虑适用于对 B1 &

58、 B2的翻译,我们将 B1 | B2和 B1 & B2 的翻译用下图表示,在自下而上的分析过程中,一个布尔式的真假出口往往不能在产生四元式的同时就填上。我们只好把这种未完成的四元式的地址( 编号)作为 B 的语义值暂存起来,待到整个表达式的四元式产生完毕之后再来回填这个未填入的转移目标。条件语句对条件语句 if e S1 else S2 中的布尔表达式 e,其作用仅在于控制对 S1和 S2的选择。因此,作为转移条件的布尔式e,我们可以赋予它两种“ 出口”:一是“ 真”出T口,出向 S1;一是“ 假”出口,出向 S2。于是,e的代码F条件语句可以翻译成如图的一般形式。非终结符 e 具有两项语义值

59、 e _TC 和e_FC,它们分别指出了尚待回填真、S2的代码假出口的四元式串。e 的“ 真”出口只有在往回扫描到if时才能知道,而它图 3-2 条件语句的代码结构 的“ 假”出口则需到处理过 S1并且到达 else 才能明确。这就是说,必须把 e_FC 的值传下去,以便到达相应的 else时才进行回填。另外,当 S1语句执行完时意味着整个 if-else 语句也已执行完毕;因此,在 S1的编码之后应产生一条无条件转移指令。这条转移指令将导致程序控制离开整个 if-else 语句。但是,在完成 S2的翻译之前,这条无条件转移指令的转移目标是不知道的。甚至,在翻译完 S2之后,这条转移指令的转移

60、目标仍无法确定。这种情形是由于语句的嵌套性所引起的。例如下面的语句:if e1 if e2 S1 else S2 else S3 在 S1的代码之后的那条无条件转移指令不仅应跨越 S2而且应跨越 S3。这也就是说,转移目标的确定和语句所处的环境密切相关。条件循环语句条件循环语句 while e S 通常被翻译成图的代码结构。布尔式 e 的“ 真”出口出向 S 代码段的第一个四元式。紧接 S 代码段之后应产生一条转向测试 e 的无条件转移指令。e 的“ 假”出口将导致程序控制离开整个 while 语句。e 的“ 假”出口目标即使在整个 while 语句翻译完之后也未必明确。例如: if e1 w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论