




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 引言随着我国市场经济的蓬勃发展和人们对物质水平需求的增加,各行各业都处于一个飞速发展的时期,行业的快速发展必然导致各企业之间的竞争更加激烈,为了使自己的企业在竞争中能够站稳脚跟,不被激烈的竞争环境所压倒,必然要求企业加强对自身的管理,提高企业的经营效率。本库存管理系统的开发主要包括前端应用程序以及后台数据库的建立和维护两个方面。经过分析,我选用myeclipse来开发系统,利用其提供的各种面向对象的开发工具,来操纵数据库。本论文正文分为五部分。第一部分介绍了开发库存管理系统的必要性以及如何开发,并简要概述了myeclipse和SQL Server 2000。第二部分介绍系统开发前的准备,包括
2、系统的需求说明及系统总体结构设计和详细设计。第三部分并着重阐述了系统主要功能模块的具体实现。第四部分是系统开发的后期工作,讲到了该系统的不完善之处及本次系统开发过程中一些切身的感受与想法,是我做这次课程设计的心得体会系统分析(一)选题的背景企业的库存物资管理往往是很复杂、很繁琐的。由于所掌握的物资种类众多,订货、管理、发放的渠道各有差异,各个企业之间的管理体制不尽相同,各类统计报表繁多,因此仓库的库存管理必须编制一套库存管理信息系统,实现计算机化操作,而且必须根据企业的具体情况制定相应的方案。 由于超市的行业特殊性,产品种类繁多,业务量巨大,若仍然采用人工记账的方式,必然不能满足企业的需求,企
3、业需要利用计算机来进行库存管理,因此需要构造一个库存管理系统。一个完整的企业物资供应管理系统应包括采购计划管理,合同收托管理、仓库库存管理、定额管理、统计管理、财务管理等模块。其中仓库的库存管理是整个物资供应管理系统的核心。因此有必要开发一套独立的库存管理系统来提高企业工作效率, 而所使用的这套库存管理系统是企业生产经营管理活动中的核心,此系统必须可以用来控制合理的库存费用、适时适量的库存数量,使企业生产活动效率最大化。通过对这些情况的仔细调查,我开发了下面的仓库库存管理系统。(二)系统需求分析 系统需求分析就是在用户需求调研的基础上,确定系统的总体结构方案,完成相应的需求分析报告。在确定系统
4、的总体结构方案过程中,包括确定应用程序的结构、系统开发环境和开发工具的选择。1.应用程序结构确定 从用户应用角度来看,可把应用程序系统的组成部分分成数据存储层、业务处理层和界面表示层等3个层次,而应用程序结构可归纳为:集中式应用程序结构、单机板应用程序结构、多层服务器应用程序结构、浏览器服务器应用程序结构、客户机服务器应用程序结构等5种类型。 本库存管理系统就采用了单机版应用程序结构,将数据库和应用程序置于一台机器上,这样更加节约成本,适合中小规模的超市使用。用户可以轻松将其拷贝到其他计算机上,可以同时运行程序。2.确定系统开发环境 由于大多数公司内部使用的计算机平台都是基于Windows环境
5、的。为了降低系统成本,应最大程度地利用现有的资源、兼容现有的环境,可确定使用下面的开发环境: 数据库:Microsoft SQL Server 2000; 前端开发工具:myeclipse;3开发工具的选择可视化程序设计是一种全新的程序设计方法,全面采用面向对象的程序设计技术,使用事件驱动机制进行程序设计。利用可视化开发工具可以快速、高效地开发应用程序。可视化的开发工具很多。myeclipse是集成开发环境,是目前最流行的 Windows 平台应用程序开发环境。它是把代码的编写、程序的调试、编译、运行以及其他的相关操作都集成在一起的“编程工具”。 作用是程序员通过它这个平台,利用编程语言来写程
6、序,调试,运行。SQL Server 2000 是Microsoft 公司推出的SQL Server 数据库管理系统。该版本继承了SQL Server 7.0 版本的优点同时又比它增加了许多更先进的功能,具有使用方便,可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。经分析,本库存管理系统选用myeclipse来设计界面,选用SQL Server 2000来建立后台数据库。(三)系统的开发及功能描述1.开发方法的选择信息系统的开发是一项比较复杂的工作,
7、因此我们必须选用科学有效的开发方法。本系统的开发采用了生命周期法。在系统设计时遵循系统调查研究、系统分析、系统设计和系统实施四个主要阶段进行设计,而在具体的设计上,则通过在系统的使用及对系统了解的不断加深中,对某一部分或几部分进行重新分析、设计、实施,使系统逐步完善。2.系统功能描述及系统安全性本库存管理系统是一套对货品入库、出库、库存进行全面管理的系统。在管理内容上,它的主要功能包括:进货管理:进行填写货品信息,货品采购入库,入库单据的填写和修改最低库存量。 出货管理:进行货品出库,出货单据的填写和获取采购员信息。信息查询:货品信息查询,库存信息查询,入库、出库单据查询,日报表、月报表查询。
8、统计报表:完整的日报表、月报表统计查询功能,每张单据每次业务金额都可以清楚地反映。系统管理:身份验证,修改本人密码,注册用户,修改删除用户。由于库存管理系统包含比较重要的信息,因此,在系统设计时除了注重用户的需求,还要保证系统的安全性和一致性,体现如下:(1)安全性:本系统中共分为三类不同的用户,分别具有不同的权限。(2)一致性:系统的数据要保证一致性、准确性,当某一数据库中记录发生改变时,与之相关联的数据库也随之变化。(四)系统逻辑模型本系统的逻辑模型以系统流图为主要描述工具。我们用不同的符号代表这四个元素:表示数据流;表示文件(数据存储);表示加工;出货结果出货结果出货管理进货管理采购员表
9、仓库信息表 操作员个人信息表客户信息表采购员表查询结果修改结果修改要求信息查询操作员个人信息表密码用户编号用户编号密码数据维护信息查询系统管理员仓库管理员进货管理身份验证身份验证操作员个人信息表系统管理员库存管理系统出货管理进货结果月报表统计报表统计统计结果采购员表库存信息表表货品信息表表库存信息表表日报表经理身份验证用户编号密码信息查询经理货品信息表库存信息表入库单出库单信息查询查询结果日报表月报表操作员个人信息表二、系统设计(一)系统总体结构设计1.系统功能分析本库存管理系统需要完成的功能有:(1)库存管理的各种信息的输入,包括入库、出库、货品信息的输入等。 (2)库存管理的各种信息的查询
10、、修改和维护。 (3)入库单、出库单的生成,日报表、月报表的生成。 (4)在货品库存中加入所允许的最低库存字段,对所有库存物资实现监控和报警。 2系统功能模块图根据系统功能分析,画出系统功能模块图如下:库存管理系统库存管理系统身份验证注册用户修改删除用户修改密码信息查询报表统计进货管理出货管理系统管理入库单填写填写货品信息修改最低库存出库单填写获取采购员信息日报表月报表库存查询货品查询报表查询(二)数据库设计数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。数据库概念结构设计货品货品采购仓库客户存储订购采购员n1mnn1货品编号规格
11、型号单位货品名称客户编号客户名称仓库名称负责人联系电话采购员编号采购的货品类别图2-2库存管理系统ER图(三)系统功能模块的详细设计本库存管理系统是本着用户操作界面友好、清晰、易学易用的原则进行设计的。1身份验证模块的设计库存管理系统库存管理系统用户编号:密码:退出登陆图2-3用户登录模块界面设计 该模块的流程图如图2-4所示:是是否用 户登 录是否为合法用户?否选择身份判断用户类型进入系统开 始结 束此外,对一个完整的系统而言,用户是应该可以修改自己的密码的,因此系统中应该具有修改密码的功能,提高数据的安全性。请输入新密码请输入新密码请确认新密码确认取消图2-5修改密码界面设计2系统主界面的
12、实现 系统管理系统管理删除报表查询修改信息退出系统图2-6主界面(admin)设计修改密码修改密码进货管理出货管理报表统计图2-7主界面(仓管)设计修改密码修改密码信息查询退出系统图2-8主界面(经理)设计 3进货管理模块的实现 进货管理模块包括填写货品信息、入库单、修改最低库存三个子模块。(1)填写货品信息填写货品信息填写货品信息货品编号货品名称单位货品类别规格型号颜色确定取消(2)入库单 入库单入库单凭证编号货品编号数量库别进货单价入库时间确定取消采购人编号制单人(3)修改最低库存修改最低库存修改最低库存货品编号最低库存确定取消 4出库管理模块的实现出库管理包括填写出库单,获取采购员信息两
13、个子模块。(1)出库单出库单出库单凭证编号货品编号数量库别出货单价出库时间确定取消客户编号制单人(2)获取采购员信息获取采购员信息获取采购员信息货品编号搜索的信息:确定搜索5.报表统计模块的实现本系统的报表分为日报表和月报表,日报表在添加入库单和出库单时就已经自动添加进数据库中的日报表了,所以在此只需再手动添加月报表。三、系统实现系统实现包括用户需求实现,系统界面实现和数据库实现三方面。1用户登录界面用户通过该界面登录进入系统。图3-1系统登录界面 3.1 系统管理修改密码界面 以下是注册用户界面:系统管理员注册用户界面注册前数据库中操作员个人信息表如图3-7:注册前的操作员个人信息表数据库
14、注册用户成功界面:系统管理员修改删除用户界 删除报表界面如下图:系统管理员删除报表界面 3.2 进货管理 仓库管理员填写入库单界面如下图:仓库管理员填写入库单界面 界面自动跳转到如下图:仓库管理员填写入库单界面仓库管理员填写货品信息界面入库单填写的信息会自动加入入库单数据库,并且更改库存信息表和日报表中的相关信息。未添加信息前的入库单入库单未添加前的库存信息表 填写完入库单的图如下: 四、系统开发总结此次库存管理系统开发让我学习到很多知识,现总结如下:系统开发的过程中,我深刻体会到了以前上课老师经常提起的一个问题,那就是:一个系统开发的过程中编码不是最重要的,重要的是对系统进行分析以及建立恰当
15、的系统模型。在该库存管理系统设计中,从系统的实用性出发,我能够在开发该系统时站在用户的角度看问题,本着用户操作界面友好、清晰、易学易用的原则进行设计。总之,这次的系统开发,实现了我自己动手完成一个系统开发的目标,也学习到很多东西,不只是实践经验,还有一些做事的道理:在工作时,要尽量把要遇到的问题考虑周全,提前做好准备,那样就不会在遇到问题时有措手不及的感觉。参考文献:1 梅玫: 物资库存的计算机管理,黑龙江科技信息,2009年7月25日.2 申冠楠,郭宗义百货店商品的库存管理系统的设计与实现,现代商业,2010年1月18日.3 刘志坚: 中小制造企业库存管理系统的开发与设计,中北大学,2009
16、年4月25日.4 美c.j.date:数据库系统导论(英文版第七版),机械工业出版社,2002年.5 邓良松:软件工程,西安电子科技大学出版社,2004年.6 邓远志:数据库设计方法,南昌教育学院学报,2005年第20卷第4期.7萨师煊等编著 ,数据库系统概论 , 高等教育出版社, 2000年.8东方人华主编,JSP范例入门与提高, 清华大学出版社, 2003年.9李佳, 付强, 丁宁等编著,java开发技术大全, 清华大学出版社, 2009年. 10欧立奇,康祥顺,马煜编著,java案例开发集锦 , 电子工业出版社 ,2005年.11 邝孔武,王晓敏编著,信息系统分析与设计,清华大学出版社,
17、1999年.12 史济民:软件工程-原理、方法与应用,高等教育出版社,2002年. 13 薛华成:管理信息系统,清华大学出版社,1999年. 14 张金城:管理信息系统,北京大学出版社,2004年.15马士华:供应链管理,机械工业出版社,2000年.16李玉良,邵新宇:CPFR供应链库存管理技术的新趋势,机械设计与制造工程,2001年第30卷第3期.附 录 源代码:import tongji.*;import danjuchaxun.*;import javax.swing.ImageIcon;import javax.swing.JLabel;import javax.swing.JPane
18、l;import javax.swing.JFrame;import javax.swing.JButton;import java.awt.Rectangle;public class Danjuchaxun extends JFrame private static final long serialVersionUID = 1L;ImageIcon beijing = new ImageIcon(pic/danjuchaxunbeijing.jpg);private JPanel jContentPane = null; private JButton jButton = null;pr
19、ivate JButton jButton1 = null;private JButton jButton2 = null;private JButton jButton3 = null;private JButton jButton4 = null;private JButton jButton5 = null;private JButton jButton6 = null;private JButton jButton7 = null;private JButton jButton8 = null;private JButton jButton9 = null;private JButto
20、n jButton10 = null;private JButton jButton11 = null;/private JButton jButton12 = null;private JButton jButton13 = null;JLabel backgroundall = new JLabel(beijing);/* * This is the default constructor */public Danjuchaxun() super();initialize();/* * This method initializes this * return void */private
21、 void initialize() this.setBounds(233, 218, 156, 303);this.setContentPane(getJContentPane();this.setTitle(单据查询);this.setUndecorated(true);this.setResizable(false);this.getLayeredPane().add(backgroundall, new Integer(Integer.MIN_VALUE);backgroundall.setBounds(0, 0, beijing.getIconWidth(), beijing.get
22、IconHeight();this.setVisible(true);/* * This method initializes jContentPane * return javax.swing.JPanel */private JPanel getJContentPane() if (jContentPane = null) jContentPane = new JPanel();jContentPane.setLayout(null);jContentPane.setOpaque(false);jContentPane.add(getJButton(), null);jContentPan
23、e.add(getJButton1(), null);jContentPane.add(getJButton2(), null);jContentPane.add(getJButton3(), null);jContentPane.add(getJButton4(), null);jContentPane.add(getJButton5(), null);jContentPane.add(getJButton6(), null);jContentPane.add(getJButton7(), null);jContentPane.add(getJButton8(), null);jConten
24、tPane.add(getJButton9(), null);jContentPane.add(getJButton10(), null);jContentPane.add(getJButton11(), null);/jContentPane.add(getJButton12(), null);jContentPane.add(getJButton13(), null);return jContentPane;/* * This method initializes jButton * return javax.swing.JButton */private JButton getJButt
25、on() if (jButton = null) jButton = new JButton();jButton.setBounds(new Rectangle(8, 8, 140, 22);jButton.setText(进货单据查询);jButton.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new ChaxundanjuJH(););return jButton;/* * This method initia
26、lizes jButton1 * return javax.swing.JButton */private JButton getJButton1() if (jButton1 = null) jButton1 = new JButton();jButton1.setBounds(new Rectangle(8, 30, 140, 22);jButton1.setText(出货单据查询);jButton1.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.even
27、t.ActionEvent e) new ChaxundanjuCH(););return jButton1;/* * This method initializes jButton2 * return javax.swing.JButton */private JButton getJButton2() if (jButton2 = null) jButton2 = new JButton();jButton2.setBounds(new Rectangle(8, 52, 140, 22);jButton2.setText(退货出库单据查询);jButton2.addActionListen
28、er(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new ChaxundanjuTHCK(););return jButton2;/* * This method initializes jButton3 * return javax.swing.JButton */private JButton getJButton3() if (jButton3 = null) jButton3 = new JButton();jButton3.setBounds
29、(new Rectangle(8, 74, 140, 22);jButton3.setText(客户退货单据查询);jButton3.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new ChaxundanjuTHRK(););return jButton3; This method initializes jButton4* return javax.swing.JButton */private JButton g
30、etJButton4() if (jButton4 = null) jButton4 = new JButton();jButton4.setBounds(new Rectangle(8, 96, 140, 22);jButton4.setText(库存调拨单据查询);jButton4.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new ChaxundanjuDB();return jButton4;* This m
31、ethod initializes jButton5 * return javax.swing.JButton */private JButton getJButton5() if (jButton5 = null) jButton5 = new JButton();jButton5.setBounds(new Rectangle(8, 118, 140, 22);jButton5.setText(供货商统计);jButton5.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(j
32、ava.awt.event.ActionEvent e) new TongjiGHS();return jButton5;* This method initializes jButton6 * return javax.swing.JButton */private JButton getJButton6() if (jButton6 = null) jButton6 = new JButton();jButton6.setBounds(new Rectangle(8, 140, 140, 22);jButton6.setText(客户统计);jButton6.addActionListen
33、er(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new TongjiKH();return jButton6;* This method initializes jButton7 * return javax.swing.JButton */private JButton getJButton7() if (jButton7 = null) jButton7 = new JButton();jButton7.setBounds(new Rectang
34、le(8, 162, 140, 22);jButton7.setText(库存统计);jButton7.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new TongjiKC();return jButton7;/* * This method initializes jButton8 * return javax.swing.JButton */private JButton getJButton8() if (jB
35、utton8 = null) jButton8 = new JButton();jButton8.setBounds(new Rectangle(8, 184, 140, 22);jButton8.setText(采购统计);jButton8.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new TongjiCG();return jButton8;* This method initializes jButton9
36、* return javax.swing.JButton */private JButton getJButton9() if (jButton9 = null) jButton9 = new JButton();jButton9.setBounds(new Rectangle(8, 206, 140, 22);jButton9.setText(出货统计);jButton9.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e)
37、 new TongjiCH(););return jButton9; * This method initializes jButton10 return javax.swing.JButton private JButton getJButton10() if (jButton10 = null) jButton10 = new JButton();jButton10.setBounds(new Rectangle(8, 228, 140, 22);jButton10.setText(退货出库统计);jButton10.addActionListener(new java.awt.event
38、.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new TongjiTHCK();return jButton10;* This method initializes jButton11 * return javax.swing.JButton */private JButton getJButton11() if (jButton11 = null) jButton11 = new JButton();jButton11.setBounds(new Rectangle(8, 250, 14
39、0, 22);jButton11.setText(客户退货统计);jButton11.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) new TongjiTHRK(););return jButton11; * This method initializes jButton12 * return javax.swing.JButton */*private JButton getJButton12() if (jButt
40、on12 = null) jButton12 = new JButton();jButton12.setBounds(new Rectangle(8, 272, 140, 22);jButton12.setText(统计);return jButton12;*/* This method initializes jButton13 * return javax.swing.JButton */private JButton getJButton13() if (jButton13 = null) jButton13 = new JButton();jButton13.setBounds(new
41、 Rectangle(8, 272, 140, 22);jButton13.setText(退出);jButton13.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) dispose(););return jButton13 / jve:decl-index=0:visual-constraint=10,10附录资料:不需要的可以自行删除C语言编译器的设计与实现 我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器
42、、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1) 词法分析部分(2) 语法分析处理及四元式生成部分 (3) 输出显示部分一词法分析器设计 由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。我们规定输出的单词符号格式为如下的二元式: (单词种别,单词自身的值)#define ACC -2#define syl_if 0#define syl_else 1#define syl_wh
43、ile 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 rop 20#define lparent 21#def
44、ine rparent 22#define ident 23#define intconst 24函数说明 读取函数 readline( )、readch( )词法分析包含从源文件读取字符的操作,但频繁的读文件操作会影响程序执行效率,故实际上是从源程序文件” source.dat ”中读取一行到输入缓冲区,而词法分析过程中每次读取一个字符时则是通过执行 readch( )从输入缓冲区获得的;若缓冲区已被读空,则再执行readline( )从 source.dat 中读取下一行至输入缓冲区。扫描函数 scan( ) 扫描函数 scan( )的功能是滤除多余空格并对主要单词进行分析处理,将分析得到
45、的二元式存入二元式结果缓冲区。变量处理 find( )变量处理中首先把以字母开头的字母数字串存到 spelling 数组中,然后进行识别。识别过程是先让它与保留关键字表中的所有关键字进行匹配,若获得成功则说明它为保留关键字,即将其内码值写入二元式结果缓冲区;否则说明其为变量,这时让它与变量名表中的变量进行匹配( 变量匹配函数 find( ) ),如果成功,则说明该变量已存在并在二元式结果缓冲区中标记为此变量( 值填为该变量在变量名表中的位置),否则将该变量登记到变量名表中,再将这个新变量存入二元式缓存数组中。数字识别 number( ) 数字识别将识别出的数字填入二元式结果缓存数组。显示函数
46、显示函数的功能在屏幕上输出词法分析的结果( 即二元式序列程序),同时给出二元式个数及源程序行数统计。二语法分析器设计 语法分析器的核心是三张 SLR 分析表以及针对这三张 SLR 分析表进行语义加工的语义动作。编译程序中语法分析处理及四元式生成部分主要是以二元式作为输入,并通过 SLR 分析表对语法分析处理过程进行控制,使四元式翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。在处理 if 和 while 语句时,需要进行真值或假值的拉链和返填工作,以便转移目标的正确填入。1. 控制语句的 SLR 分析表1 设计过程如下: 将扩展文法GS S1)S if e S else S2)S wh
47、ile 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 S S if e S else SS while e S
48、 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 else S得FOLLOW(S) = else S L 得FOL
49、LOW(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#SL0S2S3S4S511ACC2S63S74S2S3S4S5985S106S2S3S4S5117S2S3S4S5128S139S2S3S4R5S591410R4R4R4111512R2R2R213R3R3R314R615S2S
50、3S4S51616R1R1R1static 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, -1, 9, 8,/* 5 */ -1, -1, -1, -
51、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,/* 11*/ -1, 15, -1, -1, -1,
52、-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, -1;其中,前 9 列为 action 值,后 2 列为
53、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 action1107=/* 0 */ 3, -1, -1, 2,
54、-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, -1,/* 9 */ -1,103,103, -1,10
55、3,103, -1;3.布尔表达式的 SLR 分析表3 设计如下:(过程略)S BB iB i rop iB ( B )B ! BA B &B ABO B |B OBACTIONGOTOiRop()!&|#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S4S56786R4S9S10R47S1S4S514788S1S4S515789R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static int action21611=/* 0 */ 1, -1, 4,
56、 -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,/* 6 */ -1, -1, -1,104, -1, 9,
57、 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 */ -1, -1, -1,103, -1,103,103
58、,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 分析器的分析栈加以扩充,使得每个文法符号之后都跟着它的语义值。为了清晰起见,我们把这个栈的每
59、一项看成由三部分组成:状态 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#(E) * 6 #90269-8-#(E)* 6 #100
60、1-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)步的状态。第( 7)步操作后也是如此,当前状态栈为 02647,根据栈顶状
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北劳动关系职业学院《北京规划研究》2023-2024学年第二学期期末试卷
- 齐鲁医药学院《微机原理与嵌入式系统实验》2023-2024学年第二学期期末试卷
- 潍坊工程职业学院《Java开发框架》2023-2024学年第二学期期末试卷
- 三亚学院《演讲与主持》2023-2024学年第二学期期末试卷
- 大连工业大学艺术与信息工程学院《建筑概预算》2023-2024学年第二学期期末试卷
- 天津开发区职业技术学院《微电子器件基础》2023-2024学年第二学期期末试卷
- 心理咨询技能课件
- 内蒙古鸿德文理学院《酒店收益管理》2023-2024学年第二学期期末试卷
- 吉林交通职业技术学院《动植物检验检疫》2023-2024学年第二学期期末试卷
- 广西机电职业技术学院《电法勘探》2023-2024学年第二学期期末试卷
- 2025年四川省成都市锦江区中考二诊物理试题(含答案)
- (二模)赣州市2025年高三年级适应性考试英语试卷(含答案)
- 2024年新疆阿合奇县事业单位公开招聘村务工作者笔试题带答案
- 2025-2030中国胃食管反流药物行业市场发展趋势与前景展望战略研究报告
- 2025年建筑集成光伏(BIPV)市场规模分析
- 小学生脱口秀课件
- 2025-2030海工装备制造行业市场深度调研及前景趋势与投资研究报告
- 华为测试面试题及答案
- 漂珠销售合同协议
- 2025化学中考解题技巧 专题10 技巧性计算(解析版)
- 部门加班调休管理制度
评论
0/150
提交评论