![基于PLC的机械手设计_第1页](http://file4.renrendoc.com/view/9fb79b7f3d15c53e7da6d979a4e9075b/9fb79b7f3d15c53e7da6d979a4e9075b1.gif)
![基于PLC的机械手设计_第2页](http://file4.renrendoc.com/view/9fb79b7f3d15c53e7da6d979a4e9075b/9fb79b7f3d15c53e7da6d979a4e9075b2.gif)
![基于PLC的机械手设计_第3页](http://file4.renrendoc.com/view/9fb79b7f3d15c53e7da6d979a4e9075b/9fb79b7f3d15c53e7da6d979a4e9075b3.gif)
![基于PLC的机械手设计_第4页](http://file4.renrendoc.com/view/9fb79b7f3d15c53e7da6d979a4e9075b/9fb79b7f3d15c53e7da6d979a4e9075b4.gif)
![基于PLC的机械手设计_第5页](http://file4.renrendoc.com/view/9fb79b7f3d15c53e7da6d979a4e9075b/9fb79b7f3d15c53e7da6d979a4e9075b5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE 基于PLC控制的机械手设计目 录摘要1引言11.机械手总体方案设计21.1设计要求21.2运动形式的选择21.3驱动方式的选择41.4总体结构设计52.机械手手部设计62.1结构分析62.2计算分析63.PLC控制系统设计113.1机械手移动工件控制系统的控制要求113.2机械手移动工件控制系统的PLC选型和资源配置133.3机械手移动工件控制系统的PLC程序144.动画制作184.1建立机械手模型184.2制作机械手的动画18结束语26致谢26参考文献26附录27摘 要机械手设计包括机械结构设计,检测传感系统设计和控制系统设计等,是机械、电子、检测、控制和计算机技术的综合应用。本课
2、题通过对设计要求的分析,设计出机械手的总体方案,重点阐述了手部结构的设计以及控制系统硬软件的设计,完成了整个系统工作的动画设计。实现了机械手的基本搬运功能,达到了预期要求,具有一定的应用前景。关键词:机械手 PLC 动画引 言随着世界经济和技术的发展,人类活动的不断扩大,机器人应用正迅速向社会生产和生活的各个领域扩展,也从制造领域转向非制造领域,各种各样的机器人产品随之出现。像海洋开发、宇宙探测、采掘、建筑、医疗、农林业、服务、娱乐等行业都提出了自动化各机器人化的要求。随着机器人的产生和大量应用,很多领域,许多单一、重复的机械工作由机器人(也称机械手)来完成。工业机器人是一种能进行自动控制的、
3、可重复编程的,多功能的、多自由度的、多用途的操作机,广泛采用工业机器人,不仅可提高产品的质量与产量,而且对保障人身安全,改善劳动环境,减轻劳动强度,提高劳动生产率,节约原材料消耗以及降低生产成本,有着十分重要的意义。和计算机、网络技术一样,工业机器人的广泛应用正在日益改变着人类的生产和生活方式。机械手是一种模仿人手动作,并按设定的程序来抓取、搬运工件或夹持工具,机械手可在空间抓放物体,动作灵活多样,适用于可变换生产品种的中、小批量自动化生产,广泛应用于自动生产线、自动机的上下料、数控设备的自动换刀装置中。机械手一般由执行系统、驱动系统、控制系统和人工智能组成,主要完成移动、转动、抓取等动作。控
4、制系统是机械手的指挥系统,它通过控制驱动系统,让执行器按照规定的要求进行工作,并检测其正确与否。可编程控制器(PLC)是一种数定运算操作的电子系统,它将逻辑运算、顺序控制、时序、计数、算术运算等控制程序,用指令形式存放在存储器中,并通过数字式、模拟式的输入和输出,控制各种机械或生产过程。与继电器控制线路相比,PLC具有可靠性高、抗干扰能力强;编程简单、使用方便;设计、安装容易,维护工作量少;功能完善、通用性强;体积小、能耗低等特点。因此,机械手控制系统越平越多的由可编程控制器来实现。1.机械手总体方案设计1.1设计要求:1.机械手能够完成从一个工作点取物体旋转一定角度,放到另一个工作点上。2.
5、要求完成手抓结构的设计,进行夹紧力的计算分析。初值给定如下:工件质量m=0.1kg摩擦系数=0.15重力加速度g=9.8m/s2垂直加速度a=0.3g=2.94m/s2水平加速度a=0.3g=2.94m/s2回转半径r=0.5m角速度3.5rad/s角加速度2.1rad/s2安全系数S=1.45夹角453.要求选用PLC作为控制系统。1.2运动形式的选择:根据主要的运动参数选择运动形式是结构设计的基础。常见机器人的运动形式有四种,下面分别论述其特点,然后确定运动形式。1.直角坐标型机器人 直角坐标型机器人的结构简图如图1-1所示,它在x,y,z轴上的运动是独立的,3个关节都是移动关节,关节轴线
6、相互垂直,它主要用于生产设备的上下料,也可用于高精度的装卸和检测和作业。这种形式的主要特点是: (1)在三个直线方向上移动,运动容易想象。 (2)计算比较方便。 (3)由于可以两端支撑,对于给定的结构长度,其刚性最大。 (4)要求保留较大的移动空间,占用空间较大。 (5)要求有较大的平面安装区域。 (6)滑动部件表面的密封较困难,容易被污染。2.圆柱坐标型机器人圆柱坐标型机器人的结构简图如图1-2所示,R、和x为坐标系的三个坐标,其中R是手臂的径向长度,是手臂的角位置,x是垂直方向上手臂的位置。这种形式的主要特点是:(1)容易想象和计算。(2)能够伸入形腔式机器内部。(3)空间定位比较直观。(
7、4)直线驱动部分难以密封、防尘及防御腐蚀物质。(5)手臂端部可以达到的空间受限制,不能到达靠近立柱或地面的空间。3.极坐标型机器人 极坐标型机器人又称为球坐标机器人,其结构图如图1-3所示,R,和为坐标系的坐标。其中是绕手臂支撑底座垂直轴的转动角,是手臂在铅垂面内的的摆动角。这种机器人运动所形成的轨迹表面是半球面。其特点是: (1)在中心支架附近的工作范围较大。 (2)两个转动驱动装置容易密封。 (3)覆盖工作空间较大。 (4)坐标系较复杂,较难想象和控制。 (5)直线驱动装置仍存在密封问题。 (6)存在工作死区。4.多关节机器人 多关节机器人结构简图如图1-4所示,它是以其各相邻运动部件之间
8、的相对角位移作为坐标系的。、和为坐标系的坐标,其中是绕底座铅垂轴的转角,是过底座的水平线与第一臂之间的夹角,是第二臂相对于第一臂的转角。这种机器人手臂可以达到球形体积内绝大部分位置,所能达到区域的形状取决于两个臂的长度比例。其特点是:(1)动作较灵活,工作空间大。(2关节驱动处容易密封防尘。(3)工作条件要求低,可在水下等环境中工作。(4) 适合于电动机驱动。(5)运动难以想象和控制,计算量较大。(6)不适于液压驱动。 图1-1 直角坐标型 图1-2 圆柱坐标型 图1-3 极坐标型 图1-4 多关节型 选择方案的准则:1.满足设设计要求:机械手能够旋转一定角度。2.结构简单,便于计算分析。分析
9、比较以上四种运动形式,确定选用圆柱坐标型机器人。1.3驱动方式的选择:机器人关节的驱动方式有液压式、气动式、和电动式。下面将三种驱动方式进行分析比较。1.液压驱动机器人的驱动系统采用液压驱动,有以下几个优点:(1)液压容易达到较高的压力(常用液压为2.56.3MPa),体积较小,可以获得较大的推力或转矩;(2)液压系统介质的可压缩性小,工作平稳可靠,并可得到较高的位置精度;(3)液压传动中,力、速度和方向比较容易实现自动控制;(4)液压系统采用油液作介质,具有防锈性和自润滑性能,可以提高机械效率,使用寿命长。液压传动系统的不足之处是:(1)油液的粘度随温度变化而变化,影响工作性能,高温容易引起
10、燃爆炸等危险;(2)液体的泄漏难于克服,要求液压元件有较高的精度和质量,故造价较高;(3)需要相应的供油系统,尤其是电液伺服系统要求严格的滤油装置,否则会引起故障。液压驱动方式的输出力和功率更大,能构成伺服机构,常用于大型机器人关节的驱动。2.气压驱动与液压驱动相比,气压驱动的特点是:(1)压缩空气粘度小,容易达到高速;(2)利用工厂集中的空气压缩站供气,不必添加动力设备;(3)空气介质对环境无污染,使用安全,可直接应用于高温作业;(4)气动元件工作压力低,故制造要求也比液压元件低。它的不足之处是:(1)压缩空气常用压力为0.40.6MPa,若要获得较大的力,其结构就要相对增大;(2)空气压缩
11、性大,工作平稳性差,速度控制困难,要达到准确的位置控制很困难;(3)压缩空气的除水问题是一个很重要的问题,处理不当会使钢类零件生锈,导致机器人失灵。此外,排气还会造成噪声污染。气动式驱动多用于点位控制、抓取、开关控制和顺序控制的机器人。3.电动机驱动电动机驱动可分为普通交、直流电动机驱动,交、直流伺服电动机驱动和步进电动机驱动。 普通交、直流电动机驱动需加减速装置,输出力矩大,但控制性能差,惯性大,适用于中型或重型机器人。伺服电动机和步进输出力矩相对小,控制性能好,可实现速度和位置的精确控制,适用于中小型机器人。交、直伺服电动机一般用于闭环控制系统,而步进电动机则主要用于开环控制系统,一般用于
12、速度和位置精度要求不高的场合。本课题设计的机械手的特点:1.点位控制进行搬运工作,采用顺序控制方式。2.负载小,精度要求不高。3.要求成本低。根据以上特点,确定选用气压驱动。1.4总体结构设计根据圆柱坐标型运动方式和气压驱动方式的选定,对机械手进行总体结构的设计,机械结构由摆动气缸、双联气缸、单联气缸和气爪组成,结构图如图1-5所示。图1-5 机械手总体结构图2.机械手手部设计2.1结构分析机械手的手部是最重要的执行机构,是用来握持工件的部件。常用的手部按其握持原理可以分为夹持类和吸附类两大类,本课题采用夹持类手部。夹持类手部又可分夹钳式、托勾式和弹簧式。本课题选用夹钳式,它是工业机器人最常见
13、的一种手部。手部传动机构可分回转型、平动型和平移型。回转型的特点是当手爪夹紧和松开物体时,手指作回转运动。当被抓物体的直径大小变化时,需要调整手爪的位置才能保持物体的中心位置不变。平动型的特点是手指由平行四杆机构传动,当手爪夹紧和松开物体时,手指姿态不变,作平动。和回转型手爪一样,夹持中心随被夹持物体直径的大小而变。平移型的特点是当手爪夹紧和松开工件时,手指作平移运动,并保持夹持中心固定不变,不受工件直径变化的影响。为便于夹持避免固定中心的麻烦,采用平移型,图2-1所示的是靠导槽保持手指作平移运动。手部结构也采用气压驱动。图2-1 手部装配图2.2计算分析因工件运动速度引起视在重量增加情况下的
14、夹紧力计算机器人手臂停止状态开始的直线运动和旋转运动的组合,所以伴随有速度和加速度.工件有了加速度,其视在重量就变化。设机械手手部纵向中心线上所加的驱动力为P,P气缸有效截面积使用的气压.作用在一个指尖上的夹紧力为Q(方向沿手指的运动方向).设两个手指以摩擦力2Q,工件重量为G=mg.夹起工件要计算的是单个手指所必须的力Q.1.垂直上升的情况如图2-2所示,工件以加速度a垂直上升,要使工件不掉下,下式必须成立.得代入数据,得图2-2 工件垂直上升时受力分析图2.水平旋转的情况机械手部绕垂直轴以半径r作水平旋转,工件夹紧面与旋转圆弧切线方向平行,如图2-3所示。切线方向:主法线方向: 副法线方向
15、: 联立上式,求解得代入数据,得后指:由于是机械手部机构,QF=QR,所以结果Q必须满足下式代入数据,得 图2-4 工件水平直进时受力分析图 综上所述,得由于考虑到设计的机械手的安全问题,应再乘上一个安全系数S。夹紧力Q与压强的关系由实验测得,如图2-5所示。由设计要求得知夹持长度L25mm,根据图2-5可知所加的压强约为0.5MPa.图2-5 夹紧力、夹持长度、压强关系图3.PLC控制系统设计3.1机械手移动工件控制系统的控制要求3.1.1机械手移动工件的基本结构、工作流程和工作原理1.机械手移动工件的基本机构机械移动工件的基本结构图如图3-1所示。 图3-1 机械移动工件的基本结构图2.机
16、械手移动工作的工作流程机械手移动工件单个工作流程示意图如图2-2所示。机械手移动工件的单个工作流程由复位到初始位置、将机械手移动到工件处、夹紧工件、将工件移动到目标位置、放下工件和移动到初始位置6个过程组成。机械手移动工件通过PLC平控制,可以实现这6个过程全自动依次运行。3.机械手移动工件的工作原理由于本机械手采用气动传动,为方便检测,选用磁性开关作为传感器。安装在气缸外部即可。机械手移动工件通过磁性限位开关与电磁阀来控制。(1)机械手左转、右转、左移、右移、上移、下移分别通过左转电磁阀、右转电磁阀、左移电磁阀、右移电磁阀、上移电磁阀、下移电磁阀来实现,移动或转动的最大位置由左转限位开关SL
17、0、右转限位开关SL1、左移限位开关SL2、右移限位开关SL3、上移限位开关SL4、下移限位开关SL5来控制。(2)放松、夹紧工件通过放松电磁阀、夹紧电磁阀来实现。夹紧工件通过定时器控制,根据实际情况,夹紧时间设为3秒。放松工件通过放松限位开关来控制。(1)按下启动按按钮,系统先检查机械手是否在初始位置,若不是机械手先进行复位,然后再进入机械手正式工作状态。按下停止按扭,等机械手运行到初始位置后,再停车。按下急停按钮,断开PLC外部负载电源和气动装置电源,系统立即停止。开 始开 始复位移到工件处夹紧工件放下工件移动初始位置处移到目标处结束图3-2 机械手移动工件单个工作流程 3.1.2设备控制
18、要求该系统要求机械手能自动进行工作,转动时要求回转半径最小,要具体控制要求如下:(1)按下启动按钮,系统进行自检查机械是否在初始位置,不是的话先进行复位工作,然后进行正式工作。(2)复位工作控制要求如下: = 1 * GB3 机械手首先上移,直到运动到最上端。 = 2 * GB3 上移后,机械手开始右移。 = 3 * GB3 右移完成后,机械手开始左转,至此,复位工作完成。(3)正式工作控制要求如下: = 1 * GB3 机械手开始左移,一直运动到最左端。 = 2 * GB3 运行到最左端后,机械手开始向下运动。 = 3 * GB3 到达最下端后,机械手开始夹紧工件,一直到把工件夹紧为止,时间
19、由定时器控制,定时为3秒。 = 4 * GB3 机械手开始向上运动,运动到最上端。 = 5 * GB3 上移后,机械手开始右移。 = 6 * GB3 右移完成后,机械手开始右转,直到右转限位开关检测到信号。 = 7 * GB3 右转完成后,机械手下移。 = 8 * GB3 运行到最低位置后,机械手把工件松开,一直到放松限位开关检测到信号。 = 9 * GB3 工件松开后,机械手开始向上运动。 = 10 * GB3 到达最上端后,机械手开始左转,真到左转限位开关检测到信号,此时机械手已加到初始位置。(4)该系统进行自动连续循环工作。正常停车时,要求机械手回到初始位置时才能停车。急停时,切断所有电
20、源,系统停止运行。重新启动后,由于急停时机械手位置的不确定性,要进行复位工作。3.2机械手移动工件控制系统的PLC选型和资源配置3.2.1PLC选型由于机械手控制系统的输入/输出接点少,要求性价比高,编程简单,维护方便,机身小巧,故选用三菱公司的FX1N-24MR-001型号。市场为3330元。该机有14个输入点,10个输出点,辅助继电器1536点,定时器256点,计数器235点,数据寄存器8000点。3.2.2系统资源分配1.I/O触点分配根据系统控制要求,I/O分配如表3-1所示。表3-1 I/O触点分配表输入设备输入地址输出设备输出地址左转限位开关SL0X000左转电磁阀Y000右转限位
21、开关SL1X001右转电磁阀Y001左移限位开关SL2X002左移电磁阀Y002右移限位开关SL3X003右移电磁阀Y003上移限位开关SL4X004上移电磁阀Y004下移限位开关SL5X005下移电磁阀Y005放松限位开关SL6X006放松电磁阀Y006启动按钮X007夹紧电磁阀Y007停止按扭X010 2.定时器部分这个控制系统夹紧工件需要定时器来控制夹紧程度。时间设为3秒。定时器分配如表3-2所示。表3-2 定时器分配定时器功能T0夹紧工件时定时3s3.2.3硬件电路接线图 硬件电路接线图如图3-3所示。COM0 COM1COM0 COM1X000 Y000X001 Y001X002 Y
22、002X003 Y003X004 COM2X005 Y004X006 Y005X007 Y006X010 Y007SL0SL1SL2SL3SL4SL5SL6startstop电源左转右转左移放松右移上移下移夹紧FX1N-24MR-001 图3-3 硬件电路接线图3.3机械手移动工件控制系统的PLC程序3.3.1编程软件采用三菱公司编程软件FXGP/WIN-C,其界面如图3-4所示。3.3.2程序流程图根据系统控制要求,画出程序流程图。见附件1。3.3.3状态图此程序用步进指令编写比较方便直观。根据流程图。可画出状态图,如图3-5所示。3.3.4梯形图 见附录 3.3.5语句表见附录 图3-4
23、FXGP/WIN-C界面X005Y005Y006S29X001S30Y002S22X003S23X000Y000S0S20X007S21X004Y004Y003M8002初始脉冲启动按钮S24X002S25X005Y005Y007T0X005Y005Y006S29X001S30Y002S22X003S23X000Y000S0S20X007S21X004Y004Y003M8002初始脉冲启动按钮S24X002S25X005Y005Y007T0T0K30Y004S26X004S27S28X003Y003Y001S33X000Y000Y004X004S32X006S31停止按钮按下结束X010S33
24、X000Y000Y004X004S32X006S31停止按钮按下结束X010 图2-5 状态图4.动画制作为了使视觉动态效果逼真突出,选用优秀的三维动画软件3ds max来制作。4.1建立机械手模型机械手的建模比较简单,通过创建标准基本体与扩展基本体即可建立气缸、气爪等。如图4-1,4-2所示。 图4-1 图4-2创建六角螺母时,先创建图形中的多边形。再通过修改修改器列表,选择挤出,完成六边形的拉伸。如图4-3,4-4所示。通过 将创建好的几何体进行装配,再通过复合对象中布尔操作将几何体中的重叠部分切除。如图4-5所示。最终的机械手模型如图4-6所示。4.2制作机械手的动画3d max 基础动
25、画比较简单,通过激活自动关键点按钮,为物体的移动、旋转、缩放等变换参数记录动画。制作机械手的动画,还要用到层次式关系和FK。首先了解什么是层次关系。比如我们要制作人的手臂动画。我们希望这样来控制:对人物的上臂作旋转操作,上臂的运动自动带动了小臂、手腕、手掌、手指等肢体的运动。这种用一个物体的运动可以带动其他肢体运动的动画关系在3ds max 中我们称其为层次关系。在这个动画关系中,上臂的运动决定了小臂的运动,小臂会跟随上臂的运动而运动;那么在3ds max 中上臂称为小臂的父物体,小臂则称为上臂的子物体。 图4-3 附录资料:不需要的可以自行删除C语言编译器的设计与实现 我们设计的编译程序涉及
26、到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1) 词法分析部分(2) 语法分析处理及四元式生成部分 (3) 输出显示部分一词法分析器设计 由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。我们规定输出的单词符号格式为如下的二元式: (单词种别,单词自身的值)#define ACC -2#define syl_if 0#define syl_el
27、se 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 rop 20#def
28、ine lparent 21#define rparent 22#define ident 23#define intconst 24函数说明 读取函数 readline( )、readch( )词法分析包含从源文件读取字符的操作,但频繁的读文件操作会影响程序执行效率,故实际上是从源程序文件” source.dat ”中读取一行到输入缓冲区,而词法分析过程中每次读取一个字符时则是通过执行 readch( )从输入缓冲区获得的;若缓冲区已被读空,则再执行readline( )从 source.dat 中读取下一行至输入缓冲区。扫描函数 scan( ) 扫描函数 scan( )的功能是滤除多余空格
29、并对主要单词进行分析处理,将分析得到的二元式存入二元式结果缓冲区。变量处理 find( )变量处理中首先把以字母开头的字母数字串存到 spelling 数组中,然后进行识别。识别过程是先让它与保留关键字表中的所有关键字进行匹配,若获得成功则说明它为保留关键字,即将其内码值写入二元式结果缓冲区;否则说明其为变量,这时让它与变量名表中的变量进行匹配( 变量匹配函数 find( ) ),如果成功,则说明该变量已存在并在二元式结果缓冲区中标记为此变量( 值填为该变量在变量名表中的位置),否则将该变量登记到变量名表中,再将这个新变量存入二元式缓存数组中。数字识别 number( ) 数字识别将识别出的数
30、字填入二元式结果缓存数组。显示函数 显示函数的功能在屏幕上输出词法分析的结果( 即二元式序列程序),同时给出二元式个数及源程序行数统计。二语法分析器设计 语法分析器的核心是三张 SLR 分析表以及针对这三张 SLR 分析表进行语义加工的语义动作。编译程序中语法分析处理及四元式生成部分主要是以二元式作为输入,并通过 SLR 分析表对语法分析处理过程进行控制,使四元式翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。在处理 if 和 while 语句时,需要进行真值或假值的拉链和返填工作,以便转移目标的正确填入。1. 控制语句的 SLR 分析表1 设计过程如下: 将扩展文法GS S1)S i
31、f 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 S S if e S
32、 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 else S得FOLLOW(
33、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#SL0S2S3S4S511ACC2S63S74S2S3S4S5985S106S2S3S4S5117S2S3S4S5128S139S2S3S4R5S591410R4R4R4111512R2R2R
34、213R3R3R314R615S2S3S4S51616R1R1R1static 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,/*
35、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,/* 11*/ -1
36、, 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, -1;其中,前 9 列
37、为 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 action1107=/* 0
38、 */ 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, -1,/* 9 */
39、 -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 action21611
40、=/* 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,/* 6 */ -1,
41、-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 */ -1, -1,
42、-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 分析器的分析栈加以扩充,使得每个文法符号之后都跟着它的语
43、义值。为了清晰起见,我们把这个栈的每一项看成由三部分组成:状态 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 #90
44、269-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)步的状态。第( 7)步操作后也是如此,
45、当前状态栈为 02647,根据栈顶状态 7 和现行输入符号“ )”查分析表 ACTION7,)=R1,即按第(1)个产生式 EE1+E2进行归约;由于产生式右部有三项,故去掉状态栈栈顶的 647 三项;此时 2 变为新的栈顶状态,再查( 2,E)的下一状态 s:GOTO2,E=6,即将状态 6 和文法符号 E 压栈,最后得到第(8)步的状态。三中间代码生成器设计:布尔表达式 布尔表达式在程序语言中有两个基本作用:一是用作控制语句( 如 if -else 或 while语句)的条件式;二是用于逻辑演算,计算逻辑值。布尔表达式是由布尔算符( &、| 、!)作用于布尔变量( 或常数)或关系表达式而形
46、成的。关系表达式的形式是 E1 rop E2,其中 rop 是关系符( 如或),E1和 E2是算术式。在这里,我们只考虑前面给定文法所产生的布尔表达式:BB &B | B | B | ! B | (B) | i rop i | i遵照我们的约定,布尔算符的优先顺序( 从高到低)为:!、&、|,并假定&和|都服从左结合规则。所有关系符的优先级都是相同的,而且高于任何布尔算符,低于任何算术算符,关系算符不得结合。表达式的真、假出口的确定:考虑表达式 B1 | B2 ,若 B1为真,则立即知道 B 也为真;因此,B1的真出口也就是整个 B 的真出口。若 B1?为假,则 B2必须被计值,B2的第一个四
47、元式就是 B1的假出口。当然,B2的真、假出口也就是整个 B的真、假出口。类似的考虑适用于对 B1 & B2的翻译,我们将 B1 | B2和 B1 & B2 的翻译用下图表示,在自下而上的分析过程中,一个布尔式的真假出口往往不能在产生四元式的同时就填上。我们只好把这种未完成的四元式的地址( 编号)作为 B 的语义值暂存起来,待到整个表达式的四元式产生完毕之后再来回填这个未填入的转移目标。条件语句对条件语句 if e S1 else S2 中的布尔表达式 e,其作用仅在于控制对 S1和 S2的选择。因此,作为转移条件的布尔式e,我们可以赋予它两种“ 出口”:一是“ 真”出T口,出向 S1;一是“
48、 假”出口,出向 S2。于是,e的代码F条件语句可以翻译成如图的一般形式。非终结符 e 具有两项语义值 e _TC 和e_FC,它们分别指出了尚待回填真、S2的代码假出口的四元式串。e 的“ 真”出口只有在往回扫描到if时才能知道,而它图 3-2 条件语句的代码结构 的“ 假”出口则需到处理过 S1并且到达 else 才能明确。这就是说,必须把 e_FC 的值传下去,以便到达相应的 else时才进行回填。另外,当 S1语句执行完时意味着整个 if-else 语句也已执行完毕;因此,在 S1的编码之后应产生一条无条件转移指令。这条转移指令将导致程序控制离开整个 if-else 语句。但是,在完成
49、 S2的翻译之前,这条无条件转移指令的转移目标是不知道的。甚至,在翻译完 S2之后,这条转移指令的转移目标仍无法确定。这种情形是由于语句的嵌套性所引起的。例如下面的语句:if e1 if e2 S1 else S2 else S3 在 S1的代码之后的那条无条件转移指令不仅应跨越 S2而且应跨越 S3。这也就是说,转移目标的确定和语句所处的环境密切相关。条件循环语句条件循环语句 while e S 通常被翻译成图的代码结构。布尔式 e 的“ 真”出口出向 S 代码段的第一个四元式。紧接 S 代码段之后应产生一条转向测试 e 的无条件转移指令。e 的“ 假”出口将导致程序控制离开整个 while
50、 语句。e 的“ 假”出口目标即使在整个 while 语句翻译完之后也未必明确。例如: if e1 while e2 S1 else S2这种情况仍是由于语句的嵌套性引起的。所以,我们只好把它作为语句的语义值 SCHAIN 暂留下来,以便在处理外层语句时再伺机回填。语法翻译实现方法 将上述语法翻译付诸实现过程中,我们仅保留了算术表达式和布尔表达式翻译的文法和语义动作;面对程序语句的翻译,由于改造后含有较多的非终结符且语义动作又相对简单,故仍恢复为改造之前的程序语句文法。由于总体上构造一个 SLR 分析表来实现语法分析及语义加工将使得所构造的 SLR 分析表过大,所以将其分为下面三部分处理:对算
51、术表达式单独处理,即为算术表达式构造一个 SLR 分析表,并将赋值语句A=E 与算术表达式归为一类处理,处理之后的赋值语句仅看作为程序语句文法中的一个终结符 a。对布尔表达式也单独处理,并为其构造一个 SLR 分析表,经 SLR 分析表处理后的布尔表达式看作为程序语句文法中的一个终结符 e。程序语句文法此时变为:S if e S else S | while e S | L | a;L SL | S此时为程序语句构造相应的 SLR 分析表就简单多了。前面的程序语句文法中所添加的非终结符是为了能及时回填有关四元式转移目标而引入的,在取消了这些非终结符后又如何解决及时回填转移目标的问题呢?我们采取
52、的解决方法是增加两个数组 labelmark 和 labeltemp 来分别记录语句嵌套中每一层布尔表达式( 如果有的话)e 的首地址以及每一层else( 如果有的话)之前的四元式地址( 即无条件转出此层 if 语句的四元式)。也即,对程序语句的翻译来说:在处理完布尔表达式 e 后,回填 if 或 while 语句的真值链;在归约完每一个语句 S 之后检查符号栈,看在 S 之前的文法符号是否 if 或 while,若是则回填假值链( 假值入口为语句 S 所对应的四元式序列之后;对 if 语句,此时已在该序列之后加入了一条无条件转移的四元式);在 if 语句中,else 前面要加入一个无条件转移的四元式转向 if 语句末尾;在 while语句尾要有一个无条件转移四元式转向 while 语句开头。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产销售保密协议
- 机动汽车抵押贷款合同
- 场调查服务合同
- 三农技术培训资源库
- 个人手车位买卖合同
- 三农产品市场分析作业指导书
- 纯水设备购销合同
- 混凝土商砼购销合同
- 游戏行业策划人员工作手册
- 小学班级文化建设实施方案
- 开封市第一届职业技能大赛健康照护项目技术文件(国赛)
- 公路电子收费系统安装合同范本
- 医院培训课件:《伤口评估与测量》
- 2021年全国高考物理真题试卷及解析(全国已卷)
- 期末试卷(试题)-2024-2025学年四年级上册数学沪教版
- 《第一单元口语交际:即兴发言》教案-2023-2024学年六年级下册语文统编版
- 综合实践项目 制作水族箱饲养淡水鱼 教学设计-2024-2025学年鲁科版生物六年级上册
- 公转私付款合同模板
- 安徽省2024年高考语文模拟试卷及答案5
- 关于餐饮合同范本
- CHT 4019-2016 城市政务电子地图技术规范(正式版)
评论
0/150
提交评论