班级管理系统需求分析报告_第1页
班级管理系统需求分析报告_第2页
班级管理系统需求分析报告_第3页
班级管理系统需求分析报告_第4页
班级管理系统需求分析报告_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、班级管理系统需求分析项目负责人:朱革娇 汪思源 于彩凤 丁 娟苏烽娇 黄 翦 向 欢 濮湘华 目录 TOC o 1-3 h z u HYPERLINK l _Toc383532306 1. 引言 PAGEREF _Toc383532306 h 3 HYPERLINK l _Toc383532307 1.1 编写目的 PAGEREF _Toc383532307 h 3 HYPERLINK l _Toc383532308 1.2 预期读者和阅读建议 PAGEREF _Toc383532308 h 3 HYPERLINK l _Toc383532309 1.3 产品范围 PAGEREF _Toc38

2、3532309 h 4 HYPERLINK l _Toc383532310 1.4 参考文献 PAGEREF _Toc383532310 h 4 HYPERLINK l _Toc383532311 1.5 运行环境 PAGEREF _Toc383532311 h 4 HYPERLINK l _Toc383532312 1.6 设计和实现上的限制 PAGEREF _Toc383532312 h 5 HYPERLINK l _Toc383532313 2. 用户需求分析和可行性分析 PAGEREF _Toc383532313 h 5 HYPERLINK l _Toc383532314 2.1 用户

3、需求分析 PAGEREF _Toc383532314 h 5 HYPERLINK l _Toc383532315 2.2 可行性分析 PAGEREF _Toc383532315 h 5 HYPERLINK l _Toc383532316 3. 功能需求分析 PAGEREF _Toc383532316 h 6 HYPERLINK l _Toc383532317 3.1 用户登权限 PAGEREF _Toc383532317 h 6 HYPERLINK l _Toc383532318 3.2 信息 PAGEREF _Toc383532318 h 7 HYPERLINK l _Toc38353231

4、9 3.3 功能简图 PAGEREF _Toc383532319 h 8 HYPERLINK l _Toc383532320 3.4 输入输出数据 PAGEREF _Toc383532320 h 8 HYPERLINK l _Toc383532321 3.5 数据字典 PAGEREF _Toc383532321 h 11 HYPERLINK l _Toc383532322 4. 网站特色 PAGEREF _Toc383532322 h 14 HYPERLINK l _Toc383532323 4.1 实用的功能设计 PAGEREF _Toc383532323 h 14 HYPERLINK l

5、_Toc383532324 4.2 网站主要功能描述 PAGEREF _Toc383532324 h 14 HYPERLINK l _Toc383532325 5. 数据库设计 PAGEREF _Toc383532325 h 15 HYPERLINK l _Toc383532326 5.1 E-R图 PAGEREF _Toc383532326 h 15 HYPERLINK l _Toc383532327 5.2 建表: PAGEREF _Toc383532327 h 16 HYPERLINK l _Toc383532328 6. 窗体设计与功能显示 PAGEREF _Toc383532328

6、h 17 HYPERLINK l _Toc383532329 7. 任务分工 PAGEREF _Toc383532329 h 17 HYPERLINK l _Toc383532330 8. 附录 PAGEREF _Toc383532330 h 19引言随着学校教育改革的不断深入,学校招生规模不断扩大,班级管理工作变得越来越繁重,对于以前用纸笔记录的时代,已不再能满足要求(网络可以便方面查询信息、了解各班的动态以便更好的相互促进)。有效的班级管理系统对整个学校的教育工作变得至关重要,这不仅是学校高质量人才培养的坚强后盾,也是学校正常教学秩序的保障和教学质量的保证,对学校的人才培养十分重要。传统的

7、C/S和B/S系统结构的班级管理方法、方式以及工作效率已不能满足新的发展需要。只有运用先进的技术手段,开发基于新技术的学校班级管理信息系统,才能满足校内外对班级信息共享和利用的要求。编写目的完成了“班级管理系统”软件的需求调查后,对问卷进行了全面深入地探讨和分析,进行了“班级管理系统”软件需求分析的撰写。它包括全面细致的用户需求分析,明确所要开发的软件应具有的功能、性能,使系统分析人员及软件开发人员能清楚地了解用户的需求,班级开发一个“班级管理系统”,目标是建立及时、准确、全面、丰富的班级成绩信息管理平台。系统针对班级管理的实际,紧贴用户需求,全面覆盖班级管理各个方面,提高管理水平、质量、效率

8、,为班级建立一个良好的管理平台。预期读者和阅读建议用户;开发人员;项目经理;营销人员;测试人员;文档编写人员。产品范围学校招生规模不断扩大,班级管理工作变得越来越繁重,对于以前用纸笔记录的时代,已不再能满足要求(网络可以便方面查询信息、了解各班的动态以便更好的相互促进)。有效的班级管理系统对整个学校的教育工作变得至关重要。只有运用先进的技术手段,开发基于新技术的学校班级管理信息系统,才能满足校内外对班级信息共享和利用的要求。参考文献Software Engineering (IAN Sommerville),配置管理原理与实践(Anne Mette Jonassen Hass个体软件开发过程,

9、Watts S. Humphrey 著,人民邮电出版社,2001年10月。软件工程理论与实践(影印版),Shari Lawrence Pfleeger,高等教育出版社,2001年6月。软件创新之路 - 冲破高技术营造的牢笼,英文原书名 : The inmates are running the asylum , A lan Cooper 著,翻译 : 刘瑞挺 刘强 程岩,电子工业出版社, 2001 。介绍:这不是一本教你如何编程的 书,但却是软件工程师不可不读的书。本书作者 Cooper 被誉为“ VB 之父”。他针对基于电脑的产 品难学、难用、难以理解的弊病,提出了软件设计应分为两部分:交互

10、设计与编码设计。本书通过 大量的商务案例,“透彻地描述了我们面临的挑战,并从方法学上提供了逃离我们自己热心营造的 技术牢笼的指南。” 软件工程实践者之路(第五版,影印), Roger S. Pressman ,清华大学出版社, 2001 。运行环境硬件平台:486或更高档的PC台式机,笔记本电脑运用时占用内存:2MB;安装所需硬盘:6MB;打印机:可选。操作系统:window XP,win7,win8等等;设计和实现上的限制软件设计,思路不够清晰,可能延误期限人力资源有限数据库:MySQL-Front、Microsoft SQL Server 2008 R2、Microsoft SQL Ser

11、ver 2005工具:java、div-css、html、jsp、struts2.0、hibernate、spring等等。空间、服务器申请有一定困难。用户需求分析和可行性分析用户需求分析随着信息化的来临和计算机在日常管理中的广泛应用,为了实现班级管理的信息化和方便化,建立一套功能完善的管理信息系统势在必行。既能满足管理人员日常处理的需要,增强班级管理数字化管理水平,提高实施管理的准确性、科学性,使担负管理的工作人员从繁杂的手工劳作中解脱出来,从而大幅度提高工作效率;又能满足同学们彼此了解的需求,而且还可以更好的向其他想了解本班情况的用户提供大量的数据以及文字信息可行性分析为了进一步帮助班委进

12、行科学有效的学生管理工作,现通过对部分用户的调查了解,对建立班级管理信息系统进行了以下几方面的可行性分析:必要性:随着同学们在校时间的增加,越来越多的数据需要被记录,班干部的管理工作也日趋复杂化,原来的仅靠手工进行的班级管理已日渐显示出其不足之处,那么就有必要建立一套基于计算机的班级管理信息系统。可行性:据了解,各班委都已具有基本的硬件设备,那么这就为班级管理信息系统的实行提供了必要的可行性;加之相关用户都已具备了一定计算机基本操作能力,所以这又为班级管理信息系统的实行提供了用户方面的可能性;再从资金成本等方面讲,因为该系统相对而言只是一个小型的管理系统仅供班级管理需要,所需消耗费也是很少的。

13、综合上述几方面,班级管理信息系统的建立具有很大的可行性。有益性,班级管理信息系统一旦建成,那么通过该系统的使用就可以提高信息的使用质量,提高数据的准确性,减轻用户的工作负担和劳动强度,提高用户的信息处理能力,从而进行有效的决策与管理。总之,通过以上几方面的可行性分析,本开发成员认为建立一套班级管理信息系统是可行的。通过掌握和调查的相关原始资料,就可以对该系统的开发做出相关的计划进度,着手进行系统的分析和设计工作。功能需求分析用户登权限 用户登录分为学生、班级管理员、教师(辅导员)登陆。学生身份(普通学生):班级成员查询学生信息(学号、姓名、性别、民族、家庭住址、职位、年龄等等)开放系统有成员查

14、询课程信息。班级成员查询成绩(综合排名、学期排名)班级成员查询班干信息。班级成员查询班级班费支出信息。班级成员查询班级事件信息。发布作业。班级各个成员处的账号和密码,并可以自行修改各自的账号和密码。 学生身份(班级管理员) 普通学生所有权限。 查询整个系统的班干信息。成员的俱基本 修改、删除、查询、添加班级各个成员基本信息。 修改、删除、查询、添加班级各个成员的成绩信息。 修改、删除、查询、添加班级各个班干基本信息。 修改、删除、查询、添加班级各个班级课程信息。 修改、删除、查询、添加班级班费支出基本信息。 修改、删除、查询、添加班级事件信息。 拥有自己的账号和密码,并可自行修改自己的账号和密

15、码。 教师(辅导员): 拥有普通用户权限。 修改、删除、查询、添加通知。信息学生基本信息:学号、姓名、性别、身份证号、专业、年级、班级等等。班干信息:记录 着整个班的班级班干信息。课程信息:课程编号、课程名、任课教师、学分。成绩信息:学号 、姓名、班级、各科成绩、总分、平均分、班级排名、综合排名。用户信息(系统信息):用户权限、用户身份、用户名、用户密码。班级事件信息:记录班级事件,事件日期、事件内容。班费支出信息:记录班费支出信息,支出日期、支出内容、支出金额。通知信息:由辅导员发出的通知。功能简图 输入输出数据班级管理员:普通学生:老师(主要辅导员): 数据字典班级管理系统学生信息学生信息

16、学生信息老师班级管理员普通学生查询修改、添加、删除、查询 查询班级管理系统成绩信息成绩信息成绩信息老师班级管理员普通学生查询修改、添加、删除、查询 查询班级管理系统班干信息班干信息班干信息老师班级管理员普通学生查询修改、添加、删除、查询 查询班级管理系统课程信息课程信息课程信息老师班级管理员普通学生查询修改、添加、删除、查询 查询班级管理系统通知信息通知信息通知信息老师班级管理员普通学生修改、添加、删除查询查询 查询班级管理系统班费支出信息班费支出班费支出老师班级管理员普通学生查询修改、添加、删除、查询 查询班级管理系统班级事件信息班级事件班级事件老师班级管理员普通学生查询修改、添加、删除、查

17、询 查询网站特色实用的功能设计(1)强大的交流功能(2)美观的界面设计(3)丰富的互动内容网站主要功能描述班级交流平台(CCP)是以班级为中心的实名制社交网站,它提供了强大的交流分享功能,可以帮助你与同班同学保持更紧密的联系。在这里,你可以写日志、传照片,与好友分享生活点滴,以小组为单位进行各项学习,与同学分享你的资源,同时还可以为班级的荣誉以及活动投上你神圣的一票。班级交流平台共分为:个人主页、投票、小组、论坛、资源共享五个功能模块,每个功能模块都以用户所在的班级为中心进行交流分享。个人主页模块包括新鲜事、日志、相册、好友、留言、发状态这些功能。投票模块包括最新投票、我参与过的投票、我发起的

18、投票。小组模块包括我的小组、新成立的小组、建立小组申请。论坛模块包括发帖、浏览帖子、帖子列表。资源共享模块包括资源列表、资源上传、资源下载。数据库设计E-R图建表:表名主键其他属性Table_loginusernamepwdusertypepictureLast_timeTable_diaryidTitlecontentaddtimeusernameTable_pictureidusernametitlesourceTable_voteidtitleselusernameaddtimeendtimeTable_forumidtitlecontentusernameaddtimeTable_re

19、plyNum(自动编号)idcontentusernameaddtimeTable_resourcesidtitlesourceusernameaddtime窗体设计与功能显示任务分工本次网站设计我们采用模块化、并行开发的策略。以下是我们的小组分工:总负责人:汪思源美工组任务分工汪思源负责各页面设计需负责登录模块投票模块的程序界面颜色设计丁娟Logo设计苏烽娇需求分析技术组任务分工朱革娇个人主页小组模块濮湘华、黄翦论论坛模块系统设计于彩凤、向欢资源共享模块、数据库设计时间美工组任务技术组任务总体目标4月24日确定网站整体颜色标语logo网站架构图网站进度表数据库设计5月1日登录界面的实现(暂不

20、考虑管理员)主页的设计,拿出效果图做好公共模块的程序如global.asa常用头文件等主页编程实现5月8日相册,日志界面设计(相册最好用flash技术实现较精致效果)好友管理实现个人主页模块的各功能编程个人主页各功能完善5月15日投票页面设计以及投票模块编程协助投票模块的实现同时进行论坛编程投票,论坛实现5月22日资源共享页面设计资源共享的编程资源共享模块实现5月29日小组模块页面设计小组模块的编程小组模块实现6月5日完善,作品介绍等完善胜利!附录班级网站建设调查问卷你的身份是?学生老师你希望你的班级有一个属于你们自己的独立网站吗?非常希望希望无所谓你最喜欢的班级网站的主题颜色是?天蓝色黄绿色

21、淡紫色红色其他请按你认为的班级网站功能的重要程度排序【请选择1-5项并排序】上传下载共享文件分享交流查询班级公共信息发布分享班级活动班级相册 你认为你的班级建设哪种班级网站?【多选题】大学生专业学习网站大学生职业生涯规划大学生校园生活大学生分享交流网站你认为要如何布局设计整个网页版面?井字型 T字型三型/梯状型“口”型影响你浏览班级网站的因素【多选题】网站的界面简介度网站的导航功能网站的整体配色网站的图文排放其他 你希望班级网站里有哪方面的导航?【多选题】班级风采班级活动班级论坛信息导航互帮互助班级相册其他 你认为一个班级网站需要哪些部分?【多选题】线性结构树状链接结构你认为班级网站是否需要分

22、学习专区?例如:英语专区、专业课程专区等等。需要不需要你是否认为学习网站有必要建立一个定期的在校师生交流专区?是否你希望你们班级的网站建立一个怎样的师生交流平台?老师1小时在线回答学生问题公共邮箱手法邮件方式学生约老师的方式老师与学生以论坛的方式交流你认为怎样的班级网站才能吸引你去浏览?【多选题】有丰富的学习资讯有有趣的业余活动有共同的讨论平台其他 你觉得班级网站是否应该及时地回复用户的建议?应该可以延迟回答你觉得班级网站需要提供更多的?【多选题】分享经典视频图片文档等资料班级新闻其他16.你对建立一个好的班级网站有什么其他好的意见或建议附录资料:不需要的可以自行删除C语言编译器的设计与实现

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

24、fine syl_else 1#define syl_while 2#define syl_begin 3#define syl_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

25、 rop 20#define lparent 21#define rparent 22#define ident 23#define intconst 24函数说明 读取函数 readline( )、readch( )词法分析包含从源文件读取字符的操作,但频繁的读文件操作会影响程序执行效率,故实际上是从源程序文件” source.dat ”中读取一行到输入缓冲区,而词法分析过程中每次读取一个字符时则是通过执行 readch( )从输入缓冲区获得的;若缓冲区已被读空,则再执行readline( )从 source.dat 中读取下一行至输入缓冲区。扫描函数 scan( ) 扫描函数 scan(

26、)的功能是滤除多余空格并对主要单词进行分析处理,将分析得到的二元式存入二元式结果缓冲区。变量处理 find( )变量处理中首先把以字母开头的字母数字串存到 spelling 数组中,然后进行识别。识别过程是先让它与保留关键字表中的所有关键字进行匹配,若获得成功则说明它为保留关键字,即将其内码值写入二元式结果缓冲区;否则说明其为变量,这时让它与变量名表中的变量进行匹配( 变量匹配函数 find( ) ),如果成功,则说明该变量已存在并在二元式结果缓冲区中标记为此变量( 值填为该变量在变量名表中的位置),否则将该变量登记到变量名表中,再将这个新变量存入二元式缓存数组中。数字识别 number( )

27、 数字识别将识别出的数字填入二元式结果缓存数组。显示函数 显示函数的功能在屏幕上输出词法分析的结果( 即二元式序列程序),同时给出二元式个数及源程序行数统计。二语法分析器设计 语法分析器的核心是三张 SLR 分析表以及针对这三张 SLR 分析表进行语义加工的语义动作。编译程序中语法分析处理及四元式生成部分主要是以二元式作为输入,并通过 SLR 分析表对语法分析处理过程进行控制,使四元式翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。在处理 if 和 while 语句时,需要进行真值或假值的拉链和返填工作,以便转移目标的正确填入。1. 控制语句的 SLR 分析表1 设计过程如下: 将扩展

28、文法GS S1)S if e S else S2)S while e S3)S L 4)S a;5)L S6)L SL用_CLOSURE方法构造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

29、 S S if e S else SS while e S S L S a ; I8: S L I9: L S L SL L 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 els

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

31、111512R2R2R213R3R3R314R615S2S3S4S51616R1R1R1static int action2011=/* 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, -

32、1, 9, 8,/* 5 */ -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1,/* 6 */ 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

33、,/* 11*/ -1, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,/* 12*/ -1,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,

34、-1;其中,前 9 列为 action 值,后 2 列为 goto 值;016 表示 17 个移进状态( 即 Si);-1表示出错;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 acti

35、on1107=/* 0 */ 3, -1, -1, 2, -1, -1, 1,/* 1 */ -1, 4, 5, -1, -1,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,

36、 -1,/* 9 */ -1,103,103, -1,103,103, -1;3.布尔表达式的 SLR 分析表3 设计如下:(过程略)S BB iB i rop iB ( B )B ! BA B &B ABO B |B OBACTIONGOTOiRop()!&|#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S4S56786R4S9S10R47S1S4S514788S1S4S515789R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static int

37、action21611=/* 0 */ 1, -1, 4, -1, 5, -1, -1, -1, 13, 7, 8,/* 1 */ 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,/

38、* 6 */ -1, -1, -1,104, -1, 9, 10,104, -1, -1, -1,/* 7 */ 1, -1, 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

39、*/ -1, -1, -1,103, -1,103,103,103, -1, -1, -1,/*13 */ -1, -1, -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 分析器的分析栈加以扩充,使得每个文

40、法符号之后都跟着它的语义值。为了清晰起见,我们把这个栈的每一项看成由三部分组成:状态 state ,文法符号 syl 和语义值 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#

41、(E) * 6 #90269-8-#(E)* 6 #1001-8#E* 6 #11015-8-#E* 6 #120153-8-#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)步的状态。第(

42、7)步操作后也是如此,当前状态栈为 02647,根据栈顶状态 7 和现行输入符号“ )”查分析表 ACTION7,)=R1,即按第(1)个产生式 EE1+E2进行归约;由于产生式右部有三项,故去掉状态栈栈顶的 647 三项;此时 2 变为新的栈顶状态,再查( 2,E)的下一状态 s:GOTO2,E=6,即将状态 6 和文法符号 E 压栈,最后得到第(8)步的状态。三中间代码生成器设计:布尔表达式 布尔表达式在程序语言中有两个基本作用:一是用作控制语句( 如 if -else 或 while语句)的条件式;二是用于逻辑演算,计算逻辑值。布尔表达式是由布尔算符( &、| 、!)作用于布尔变量( 或

43、常数)或关系表达式而形成的。关系表达式的形式是 E1 rop E2,其中 rop 是关系符( 如或),E1和 E2是算术式。在这里,我们只考虑前面给定文法所产生的布尔表达式:BB &B | B | B | ! B | (B) | i rop i | i遵照我们的约定,布尔算符的优先顺序( 从高到低)为:!、&、|,并假定&和|都服从左结合规则。所有关系符的优先级都是相同的,而且高于任何布尔算符,低于任何算术算符,关系算符不得结合。表达式的真、假出口的确定:考虑表达式 B1 | B2 ,若 B1为真,则立即知道 B 也为真;因此,B1的真出口也就是整个 B 的真出口。若 B1?为假,则 B2必须

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

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

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

47、制离开整个 while 语句。e 的“ 假”出口目标即使在整个 while 语句翻译完之后也未必明确。例如: if e1 while e2 S1 else S2这种情况仍是由于语句的嵌套性引起的。所以,我们只好把它作为语句的语义值 SCHAIN 暂留下来,以便在处理外层语句时再伺机回填。语法翻译实现方法 将上述语法翻译付诸实现过程中,我们仅保留了算术表达式和布尔表达式翻译的文法和语义动作;面对程序语句的翻译,由于改造后含有较多的非终结符且语义动作又相对简单,故仍恢复为改造之前的程序语句文法。由于总体上构造一个 SLR 分析表来实现语法分析及语义加工将使得所构造的 SLR 分析表过大,所以将其分

48、为下面三部分处理:对算术表达式单独处理,即为算术表达式构造一个 SLR 分析表,并将赋值语句A=E 与算术表达式归为一类处理,处理之后的赋值语句仅看作为程序语句文法中的一个终结符 a。对布尔表达式也单独处理,并为其构造一个 SLR 分析表,经 SLR 分析表处理后的布尔表达式看作为程序语句文法中的一个终结符 e。程序语句文法此时变为:S if e S else S | while e S | L | a;L SL | S此时为程序语句构造相应的 SLR 分析表就简单多了。前面的程序语句文法中所添加的非终结符是为了能及时回填有关四元式转移目标而引入的,在取消了这些非终结符后又如何解决及时回填转移

49、目标的问题呢?我们采取的解决方法是增加两个数组 labelmark 和 labeltemp 来分别记录语句嵌套中每一层布尔表达式( 如果有的话)e 的首地址以及每一层else( 如果有的话)之前的四元式地址( 即无条件转出此层 if 语句的四元式)。也即,对程序语句的翻译来说:在处理完布尔表达式 e 后,回填 if 或 while 语句的真值链;在归约完每一个语句 S 之后检查符号栈,看在 S 之前的文法符号是否 if 或 while,若是则回填假值链( 假值入口为语句 S 所对应的四元式序列之后;对 if 语句,此时已在该序列之后加入了一条无条件转移的四元式);在 if 语句中,else 前面要加入一个无条件转移的四元式转向 if 语句末尾;在 while语句尾要有一个无条件转移四元式转向 while 语句开头。四数据结构说明 编译程序中涉及到的数据结构说明如下:char ch=0; /*从字符缓冲区中读取当前字符*/int count=0; /*词法分析结果缓冲区计数器*/stati

温馨提示

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

评论

0/150

提交评论