管理信息系统分析报告_第1页
管理信息系统分析报告_第2页
管理信息系统分析报告_第3页
管理信息系统分析报告_第4页
管理信息系统分析报告_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、编号:编号: MIS分 析 报 告教学课程名称 管理信息系统 专 业 班 级 学 生 姓 号 学 生 姓 名 实验指导教师 学生教务管理信息系统需求分析报告学生教务管理信息系统开发项目介绍新系统的目标和功能新系统的名称:安徽工程大学建工学院学生教务管理信息系统新系统的总体目标:采用本方案建议的新的教务管理信息系统后,可以期望实现的目标:在原先系统的功能基础上,提高性能,加以完善。实现教务管理工作信息化、模块化、便捷化。新系统的主要功能:教务管理系统是典型的信息管理系统(MIS),它能够实现整体规划教学资源,评估教学质量,制定教学计划,检查教学进度,给学校的教务人员管理教务工作提供了极大的方便,

2、使教务管理工作变得更加快捷和高效。新系统功能全面,中心数据库提供了高性能Web页信息访问机制,是比较优秀的一套教务管理信息系统。新系统开发背景介绍开发背景环境介绍:由于信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。任何一个单位要生存、要发展、要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。这对于正在迅速发展的各大高校而言,同样有着重要意义。作为高校日常教学主要管理工作之一的教务管理,它涉及到院校、专业、师生等诸多方面。特别是目前国家的教育体制也正处在不断改革、创新的阶段,教育部门充分吸取国外优秀的教学模式,结合国内多年的办学经验,逐

3、步探索出了适合中国特色的教学形式,国家教育部面向各级各类学校开展了全面学分制改革。同时,随着选课制的展开和深入,教务日常管理工作也日趋繁重、复杂,如何把教务工作信息化、模块化、便捷化便成为了现代高校发展的重点。总而言之,教务管理软件应实现教务信息的集中管理,使传统的教务管理朝数字化、无纸化、智能化、综合化的方向发展,并为进一步实现完善的计算机教务管理系统和全校信息系统打下良好的基础。在高校中,教务管理工作具有举足轻重的地位,教学质量直接取决十教务管理水平。现如今教务管理信息系统的开发与实施可谓日新月异。根据实际,本系统决定采用原型法进行系统开发。即通过确定基本需求、构建初始原型、验正评价原型、

4、修改完善原型最终完成此次系统设计。开发者介绍:XX软件公司是一家专业从事软件技术开发、软件产品生产、网站运营、电子商务、网络工程的高科技公司,是国家级高新技术企业、软件企业。公司拥有一支富有创新、开拓精神的高素质的战斗团队,具备国内一流的软件开发技术和大型工程实施功能。 安徽工程大学“教务系统”的初步调查教务系统的初步调查组织结构图: 管理功能图: 业务流程图:图符定义: 系统内人员 处理 存储 数据流业务流程:现行系统的使用情况和不足现行系统已经实现的功能:包括:学生信息管理、教师信息管理及其他信息管理。现行的教务系统已经具备许多功能,具体包括:教师信息、学生信息、课程信息、系统管理等。现行

5、系统存在的问题:选课模块需要完善。尤其是网上选课和网上报名等。现行系统功能不足。增加“素质技能拓展”板块。通过本板块,可实现职业资格证书、技能竞赛获奖情况的网上填报和统计,便于管理部门及时了解和跟踪各专业的职业资格证书获取情况和技能竞赛得奖情况,该板块的相关数据能在学生成绩报告单和学籍卡中得到反映等。3.初步需求分析新系统硬件设备配置及网络建设方案硬件设备配置:服务器3台,网管工作站1个,交换机3台,客户机11台网络建设方案:建立一个学校的局域网,通过3台服务器,1个网管工作站,3台交换机与11台客户机进行所有的数据交换用户对新系统安全性能的需求无忧维护:软件公司B通过遍及全国的办事处及营销网

6、络提供免费一年维护,真正接触用户的后顾之忧。系统同时以易于维护为目标,方便学校教务系统的运营。数据安全保密:采用大型网络数据库,数据保密、安全。采用严格的权限管理,杜绝未经授权的访问。用户对开发时间上的要求签约后两个月内完成所有实施进度。项目可行性分析1.经济上的可行性教育事业的不断发展,各级教育层次的教学规模日益扩大,采用原先的教务信息管理方法(如开发程度不高的管理系统)不但浪费大量人力、物力和财力资源,而且不能满足当前教育发展的需求。基于学生对于自己学习事业的关心,开发具有高效,易于查询并且便于管理员管理的教务信息系统的需求就明显增多。2.技术上的可行性大学教务管理信息系统采用了客户机/服

7、务器的系统结构。客户机/服务器体系结构可以更好地实现数据服务和应用程序的共享,使系统容易扩充、更加灵活,从而简化了系统的开发。教务信息管理系统最简单的是采用SQL server2000的数据库技术进行架构,主要包括登录,教师用户,管理员用户,学生用户四个模块,各个对象根据自己的权限进行查询。学校校园网已正常运行,开发人员已熟练掌握面向对象的开发工具,教务人员已实现计算机培训,这都为新系统开发提供了技术上的可能性支持。3.操作上的可行性从软件角度来讲,系统采用的可视化开发工具以运行速度快而著称,所以系统在运行速度方面也将是可以肯定的。另外,数据库管理系统可以保证数据操作的一致性和完整性,与可视化

8、开发工具结合能够完全发挥软件系统的性能和作用。其次,从硬件角度来说,现有的计算机硬件配置已经满足开发软件系统的需求,可以为系统开发提供保证。此外,系统的开发是在Windows操作平台下进行的,Windows操作平台可以保证软件系统的性能以及稳定性。根据实际考察与调研的结果,设计出适应高等院校日常工作需要, 并且系统操作简单、界面友好、美观,功能全面、能提高工作效率,节省时间、数据安全性好,稳定性高、投资小、回报大的教务管理信息系统。新系统详细调查和建立逻辑模型新系统详细调查1.性能目标操作简单、用户界面友好采用Windows图形界面,每一步骤都经过精心的设计,将复杂的统计运算过程隐藏于简单的操

9、作之下,支持纯键盘操作。系统的设计能降低使用前的培训、实施和使用中的维护时间。性能稳定通过合理而先进的网络设计及软、硬件的优化选型,足可保证系统的可靠性与容错性。系统以用户需求为目标、以用户方便为原则,在过去使用的教务管理系统的基础上,根据学校的实际需求功能情况,为用户二次开发,打造一套先进的教务管理系统,并实施安装和后期维护。先进灵活系统充分应用现有成熟的计算机技术、网络技术、软件开发技术,为用户提供高性能的系统。系统运用C/S结构与B/S结构,具备高性能、可靠性。新系统的逻辑模型1.组织结构 2.功能模块结构系统总体功能模块图:业务流程分析图符定义:业务流程:数据流程分析教务信息管理系统教

10、务信息管理系统C/S结构B/S结构学籍管理计划管理智能排课选课管理成绩管理教材管理实践管理教学评估教务处各科室、院系、系考试安排收费管理系统维护学生成绩录入信息维护信息查询教师各部门科室信息查询教务公告发布教学成果发布机构设置管理教学设施管理上传管理文件教学论坛管理教务公告教学成果机构设置培养计划管理文件课程介绍教学设施教学论坛访客信息修改信息查询与下载网上选课教学质量评价活动报名教学资料发布数据字典数据结构描述某些数据项之间的关系。一个数据结构可以由若干个数据项组成;也可以由若干个数据结构组成,还可以由若干个数据项和数据结构组成。以下是教务管理信息系统数据结构的定义。数据结构名称:班级数据结

11、构名称:班级含义说明:数据库中用来存储班级的信息数据结构组成:班级编号+所属院系学历类别+入学年份+教师编号+专业数据结构名称:课程含义说明:数据库中用来存储课程的信息数据结构组成:序号+课程编号+课程名称+任课教师编号+学分+选课人数数据结构名称:选课含义说明:数据库中用来存储学生选课的信息数据结构组成:序号+学号+课程编号+学期+成绩 数据结构名称:学期含义说明:数据库中用来存储学期的信息数据结构组成:学期号默认学期 数据流名称:成绩修改数据流名称:成绩修改简要说明:对学生的原来的错误分数进行更正 数据流来源:课程管理模块 数据流去向:P1.8 数据结构:序号+学号+课程编号+学期+成绩数

12、据流名称:成绩统计 简要说明:对各科成绩进行统计 数据流来源:P1.8数据流去向:课程管理模块数据结构:序号+学号+课程编号+学期+成绩数据流名称:选课信息 简要说明:学生对学校开设的课程进行选择数据流来源:课程设置模块数据流去向:P1.6数据结构:序号+学号+课程编号+学期+成绩数据流名称:教师信息 简要说明:对教师的个人信息进行维护 数据流来源:教务处数据流去向:P1.3数据结构:序号+教师编号+教师姓名+性别+出生日期+所属院系+职称+密码数据流名称:学生信息 数据流名称:学生信息 简要说明:对学生的个人信息进行维护数据流来源:学生处数据流去向:P1.4数据结构:序号+学生编号+学生姓名

13、+性别+出生日期+所属院系+入学年份+班级+专业+密码数据流名称:班级信息 简要说明:对院系的班级信息进行维护数据流来源:教务处数据流去向:P1.5数据结构:班级编号+所属院系学历类别+入学年份+教师编号+专业数据流名称:课程信息 简要说明:课程开设的情况 数据流来源:教务处数据流去向:P1.6数据结构:序号+课程编号+课程名称+任课教师编号+学分+选课人数数据存储名称:教师信息数据存储名称:教师信息说明:关于教师信息维护后情况的记载文档 输入的数据流:P1.3输出的数据流:D3数据存储组成:序号+教师编号+教师姓名+性别+出生日期+所属院系+职称+密码数据结构名称:教师数据结构名称:教师含义

14、说明:数据库中用来存储教师的信息数据结构组成:序号+教师编号+教师姓名+性别+出生日期+所属院系+职称+密码数据结构名称:学生含义说明:数据库中用来存储学生的信息数据结构组成:序号+学生编号+学生姓名+性别+出生日期+所属院系+入学年份+班级+专业+密码数据结构名称:统计含义说明:数据库中用来存储统计的信息数据结构组成:统计项目的名称统计数值 数据结构名称:管理员含义说明:数据库中用来存储管理员的信息数据结构组成:登录名密码姓名性别院系数据结构名称:教材含义说明:数据库中用来存储教材的信息数据结构组成:图书编号+图书名称+出版社+作者+价格数据结构名称:院系含义说明:数据库中用来存储院系的信息

15、数据结构组成:院系编号+ 院系名称+院系负责人+教师数量数据结构名称:专业含义说明:数据库中用来存储专业的信息数据结构组成:专业编号+专业名称+院系编号数据存储名称:学生信息数据存储名称:学生信息说明:关于学生信息维护后情况的记载文档 输入的数据流:P1.4输出的数据流:D4数据存储组成:序号+学生编号+学生姓名+性别+出生日期+所属院系+入学年份+班级+专业+密码数据存储名称:班级信息说明:关于班级信息维护后情况的记载文档 输入的数据流:P1.5输出的数据流:D5数据存储组成:班级编号+所属院系学历类别+入学年份+教师编号+专业数据存储名称:开课信息说明:关于课程信息维护后情况的记载文档 输

16、入的数据流:P1.6输出的数据流:D6数据存储组成:序号+课程编号+课程名称+任课教师编号+学分+选课人数数据存储名称:选课信息说明:关于学生选择课程后情况的记载文档 输入的数据流:P1.6输出的数据流:D9数据存储组成:序号+学号+课程编号+学期+成绩数据存储名称:登录信息说明:关于登录人员情况的记载文档 输入的数据流:P1.1输出的数据流:D1数据存储组成:登录名密码姓名性别院系数据存储名称:备份信息数据存储名称:备份信息说明:关于数据备份情况的记载文档 输入的数据流:P1.7输出的数据流:D7数据存储名称:密码信息说明:关于密码修改情况的记载文档 输入的数据流:P1.7输出的数据流:D8

17、数据存储组成:登录名密码姓名性别院系数据存储名称:成绩信息说明:关于成绩修改情况的记载文档 输入的数据流:P1.8输出的数据流:D10数据存储组成:序号+学号+课程编号+学期+成绩数据存储名称:统计信息说明:关于统计情况的记载文档输入的数据流:P1.8输出的数据流:D11数据存储组成:序号+学号+课程编号+学期+成绩数据存储名称:权限信息说明:关于权限判定情况的记载文档 输入的数据流:P1.2输出的数据流:D2数据存储组成:登录名密码姓名性别院系处理的描述配备人员计划职务人数施工人员: 项目负责人1 项目总监1 项目主管1 硬件工程师3 软件工程师3 安装工程师5 质检工程师3 维护主管1辅导

18、人员: 培训主管1 培训师3投资预算计划设备:服务器3台,网管工作站1个,交换机3台,客户机11台费用支出:初步调查费、系统开发费、硬件购买费新系统实施的计划时间计划时 间步 骤30天60天30天长期系统分析 系统设计 系统实施 系统维护与管理 人员计划系统分析:5人 系统设计:10人系统实施:10人 系统维护与管理:5人结论经过三个月的毕业设计,教务管理信息系统已经开发完毕。系统的功能基本上都得以实现。在这三个月的过程中,我面对了许多挑战和考验。使我深刻地体会到开发软件系统的艰辛。而且,我还深深地认识到理论结合实践的必要性。教务管理信息系统的设计与实现,基本完成了教师信息、学生信息、班级管理

19、、课程管理以及系统管理等功能。通过本系统可以完成教师、学生信息的查询以及维护。还可对班级和课程的信息进行管理和维护。尤其是课程管理的实现,它是将课程设置、选课管理、成绩管理相互间进行关联,方便了学校的教务工作,提高了工作的效率。另外,根据实际的需求,系统在设计时充分的考虑到数据的处理,并在系统中实现了数据库的备份,从而提高了工作中操作的安全性。另外,在系统实施的过程中,使用了触发器和存储过程。触发器的使用解决了课程管理中数据不一致的问题。而利用存储过程进行成绩统计,提高了系统统计的速度,增强了统计的准确性。然而,由于个人能力和开发经验有限,系统在开发的过程中不可避免的会存在一些不尽如人意的地方

20、。系统所运用的某些方法,并不是最优的方法。用户界面也不够美观。对于这些不尽如人意的地方,需要不断地学习理论知识,并在实践中增长开发经验争取尽快解决这些问题,从而使系统更加完善。附录资料:不需要的可以自行删除C语言编译器的设计与实现 我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1) 词法分析部分(2) 语法分析处理及四元式生成部分 (3) 输出显示部分一词法分析器设计 由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入

21、错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。我们规定输出的单词符号格式为如下的二元式: (单词种别,单词自身的值)#define ACC -2#define syl_if 0#define 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#de

22、fine 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#define intconst 24函数说明 读取函数 readline( )、readch( )词法分析包含从源文件读取字符的操作,但频繁的读文件操作会影响程序执行效率,故实际上是从源程序文件” source.dat ”中读取一行到输入缓冲区,而

23、词法分析过程中每次读取一个字符时则是通过执行 readch( )从输入缓冲区获得的;若缓冲区已被读空,则再执行readline( )从 source.dat 中读取下一行至输入缓冲区。扫描函数 scan( ) 扫描函数 scan( )的功能是滤除多余空格并对主要单词进行分析处理,将分析得到的二元式存入二元式结果缓冲区。变量处理 find( )变量处理中首先把以字母开头的字母数字串存到 spelling 数组中,然后进行识别。识别过程是先让它与保留关键字表中的所有关键字进行匹配,若获得成功则说明它为保留关键字,即将其内码值写入二元式结果缓冲区;否则说明其为变量,这时让它与变量名表中的变量进行匹配

24、( 变量匹配函数 find( ) ),如果成功,则说明该变量已存在并在二元式结果缓冲区中标记为此变量( 值填为该变量在变量名表中的位置),否则将该变量登记到变量名表中,再将这个新变量存入二元式缓存数组中。数字识别 number( ) 数字识别将识别出的数字填入二元式结果缓存数组。显示函数 显示函数的功能在屏幕上输出词法分析的结果( 即二元式序列程序),同时给出二元式个数及源程序行数统计。二语法分析器设计 语法分析器的核心是三张 SLR 分析表以及针对这三张 SLR 分析表进行语义加工的语义动作。编译程序中语法分析处理及四元式生成部分主要是以二元式作为输入,并通过 SLR 分析表对语法分析处理过

25、程进行控制,使四元式翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。在处理 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用_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

26、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 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

27、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 , # L S 因为FIRST(S) = ,所以FOLLOW(S) = else , #, 在()项目规范簇中,只有9有“移进归约”冲突,L SL SL因为FOLLOW(L) FIRST(L) = 所以可以用方法解决以上冲突,最后我们得到的分

28、析表如下:ACTIONGOTO ifElsewhilea;e#SL0S2S3S4S511ACC2S63S74S2S3S4S5985S106S2S3S4S5117S2S3S4S5128S139S2S3S4R5S591410R4R4R4111512R2R2R213R3R3R314R615S2S3S4S51616R1R1R1static 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, -

29、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 */ 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,

30、 -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,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

31、, -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表示出错;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)

32、E i (过程略)ACTIONGOTOI+*()#E0S3S211S4S5ACC2S3S263R4R4R4R44S3S275S3S286S4S5S97R1R5R1R18R2R2R2R29R3R3R3R3static int action1107=/* 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

33、, -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 设计如下:(过程略)S BB iB i rop iB ( B )B ! BA B &B ABO B |B OBACTIONGOTOiRop()!&|#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S

34、4S56786R4S9S10R47S1S4S514788S1S4S515789R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static int 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,

35、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, 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

36、, -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, -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,

37、 -1, -1, -1;LR 分析表控制语义加工的实现:当扫描 LR 分析表的当前状态为归约状态时,则在调用与该状态对应的产生式进行归约的同时,调用相应的语义子程序进行有关的翻译工作。现在对 LR 分析器的分析栈加以扩充,使得每个文法符号之后都跟着它的语义值。为了清晰起见,我们把这个栈的每一项看成由三部分组成:状态 state ,文法符号 syl 和语义值 val。编译程序实现算术表达式、布尔表达式及程序语句的语义加工时,都是按这种状态栈加工方式进行的。例如:( 5 + 3 ) * 6的分析过程序号STATEValsylinput10-#( 5 + 3 ) * 6 #202-#(5 + 3 )

38、 * 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-#E*6#130158-8-6#E*E#1401-48#E#15ACC在分析过程中,第(3)步操作后的状态栈为 023,根据栈顶状态“ 3”和现行输入符号“ +”( input 栏字符串的第一个字符)查分析表 ACTION3,+=R4,即按

39、第(4)个产生式 En 来进行归约;由于产生式右部仅含一项,故去掉状态栈栈顶“3”;此时 2 变为新的栈顶状态,再查( 2,E)的下一状态 s:GOTO2,E=6,即将状态 6 和文法符号 E 压栈,最后得到第( 4)步的状态。第( 7)步操作后也是如此,当前状态栈为 02647,根据栈顶状态 7 和现行输入符号“ )”查分析表 ACTION7,)=R1,即按第(1)个产生式 EE1+E2进行归约;由于产生式右部有三项,故去掉状态栈栈顶的 647 三项;此时 2 变为新的栈顶状态,再查( 2,E)的下一状态 s:GOTO2,E=6,即将状态 6 和文法符号 E 压栈,最后得到第(8)步的状态。

40、三中间代码生成器设计:布尔表达式 布尔表达式在程序语言中有两个基本作用:一是用作控制语句( 如 if -else 或 while语句)的条件式;二是用于逻辑演算,计算逻辑值。布尔表达式是由布尔算符( &、| 、!)作用于布尔变量( 或常数)或关系表达式而形成的。关系表达式的形式是 E1 rop E2,其中 rop 是关系符( 如或),E1和 E2是算术式。在这里,我们只考虑前面给定文法所产生的布尔表达式:BB &B | B | B | ! B | (B) | i rop i | i遵照我们的约定,布尔算符的优先顺序( 从高到低)为:!、&、|,并假定&和|都服从左结合规则。所有关系符的优先级都

41、是相同的,而且高于任何布尔算符,低于任何算术算符,关系算符不得结合。表达式的真、假出口的确定:考虑表达式 B1 | B2 ,若 B1为真,则立即知道 B 也为真;因此,B1的真出口也就是整个 B 的真出口。若 B1?为假,则 B2必须被计值,B2的第一个四元式就是 B1的假出口。当然,B2的真、假出口也就是整个 B的真、假出口。类似的考虑适用于对 B1 & B2的翻译,我们将 B1 | B2和 B1 & B2 的翻译用下图表示,在自下而上的分析过程中,一个布尔式的真假出口往往不能在产生四元式的同时就填上。我们只好把这种未完成的四元式的地址( 编号)作为 B 的语义值暂存起来,待到整个表达式的四

42、元式产生完毕之后再来回填这个未填入的转移目标。条件语句对条件语句 if e S1 else S2 中的布尔表达式 e,其作用仅在于控制对 S1和 S2的选择。因此,作为转移条件的布尔式e,我们可以赋予它两种“ 出口”:一是“ 真”出T口,出向 S1;一是“ 假”出口,出向 S2。于是,e的代码F条件语句可以翻译成如图的一般形式。非终结符 e 具有两项语义值 e _TC 和e_FC,它们分别指出了尚待回填真、S2的代码假出口的四元式串。e 的“ 真”出口只有在往回扫描到if时才能知道,而它图 3-2 条件语句的代码结构 的“ 假”出口则需到处理过 S1并且到达 else 才能明确。这就是说,必须

43、把 e_FC 的值传下去,以便到达相应的 else时才进行回填。另外,当 S1语句执行完时意味着整个 if-else 语句也已执行完毕;因此,在 S1的编码之后应产生一条无条件转移指令。这条转移指令将导致程序控制离开整个 if-else 语句。但是,在完成 S2的翻译之前,这条无条件转移指令的转移目标是不知道的。甚至,在翻译完 S2之后,这条转移指令的转移目标仍无法确定。这种情形是由于语句的嵌套性所引起的。例如下面的语句:if e1 if e2 S1 else S2 else S3 在 S1的代码之后的那条无条件转移指令不仅应跨越 S2而且应跨越 S3。这也就是说,转移目标的确定和语句所处的环

44、境密切相关。条件循环语句条件循环语句 while e S 通常被翻译成图的代码结构。布尔式 e 的“ 真”出口出向 S 代码段的第一个四元式。紧接 S 代码段之后应产生一条转向测试 e 的无条件转移指令。e 的“ 假”出口将导致程序控制离开整个 while 语句。e 的“ 假”出口目标即使在整个 while 语句翻译完之后也未必明确。例如: if e1 while e2 S1 else S2这种情况仍是由于语句的嵌套性引起的。所以,我们只好把它作为语句的语义值 SCHAIN 暂留下来,以便在处理外层语句时再伺机回填。语法翻译实现方法 将上述语法翻译付诸实现过程中,我们仅保留了算术表达式和布尔表

45、达式翻译的文法和语义动作;面对程序语句的翻译,由于改造后含有较多的非终结符且语义动作又相对简单,故仍恢复为改造之前的程序语句文法。由于总体上构造一个 SLR 分析表来实现语法分析及语义加工将使得所构造的 SLR 分析表过大,所以将其分为下面三部分处理:对算术表达式单独处理,即为算术表达式构造一个 SLR 分析表,并将赋值语句A=E 与算术表达式归为一类处理,处理之后的赋值语句仅看作为程序语句文法中的一个终结符 a。对布尔表达式也单独处理,并为其构造一个 SLR 分析表,经 SLR 分析表处理后的布尔表达式看作为程序语句文法中的一个终结符 e。程序语句文法此时变为:S if e S else S

46、 | while e S | L | a;L SL | S此时为程序语句构造相应的 SLR 分析表就简单多了。前面的程序语句文法中所添加的非终结符是为了能及时回填有关四元式转移目标而引入的,在取消了这些非终结符后又如何解决及时回填转移目标的问题呢?我们采取的解决方法是增加两个数组 labelmark 和 labeltemp 来分别记录语句嵌套中每一层布尔表达式( 如果有的话)e 的首地址以及每一层else( 如果有的话)之前的四元式地址( 即无条件转出此层 if 语句的四元式)。也即,对程序语句的翻译来说:在处理完布尔表达式 e 后,回填 if 或 while 语句的真值链;在归约完每一个语句

47、 S 之后检查符号栈,看在 S 之前的文法符号是否 if 或 while,若是则回填假值链( 假值入口为语句 S 所对应的四元式序列之后;对 if 语句,此时已在该序列之后加入了一条无条件转移的四元式);在 if 语句中,else 前面要加入一个无条件转移的四元式转向 if 语句末尾;在 while语句尾要有一个无条件转移四元式转向 while 语句开头。四数据结构说明 编译程序中涉及到的数据结构说明如下:char ch=0; /*从字符缓冲区中读取当前字符*/int count=0; /*词法分析结果缓冲区计数器*/static char spelling10= ; /*存放识别的字*/static char line81= ; /*一行字符缓冲区( 最多 80 个字符)*/cha

温馨提示

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

评论

0/150

提交评论