计算机网络课程设计交换式和虚拟局域网_第1页
计算机网络课程设计交换式和虚拟局域网_第2页
计算机网络课程设计交换式和虚拟局域网_第3页
计算机网络课程设计交换式和虚拟局域网_第4页
计算机网络课程设计交换式和虚拟局域网_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、PAGE 1课程设计报告课程名称: 计算机网络 设计题目: 交换式和虚拟局域网配置与实现 院 别: 计算机与信息工程学院 专 业: 网络工程 组 别: 第二组 起止日期: 2011年12月24日-2012年01月 08日指导教师: 计算机与信息工程学院二一 二年制课程设计任务书课程设计题目交换式和虚拟局域网配置与实现组长学号班级院别计算机与信息工程学院专业网络工程组员指导教师课程设计目的交换式和虚拟局域网配置与实现课程设计所需环境Windows XP操作系统+Cisco Packet Tracer仿真软件课程设计任务要求(1)实现交换式以太网组网;(2)以太网络交换机配置;(3)VLAN的划分

2、与配置。课程设计工作进度计划序号起止日期工 作 内 容分工情况12011-12-242012-01-04画出交换式以太网组网拓扑结构图;划分VLAN22011-12-242012-01-04配置三层交换机32011-12-242012-01-04配置二层交换机42011-12-242012-01-04配置PC机,设计测试52011-01-052011-01-08撰写设计报告以及PPT指导教师签字: 年 月 日教研室审核意见:教研室主任签字: 年 月 日目 录 TOC o 1-3 h z u HYPERLINK l _Toc344991060 引言 PAGEREF _Toc344991060 h

3、 1 HYPERLINK l _Toc344991061 第一章 需求分析 PAGEREF _Toc344991061 h 1 HYPERLINK l _Toc344991062 1.1 课程设计题目 PAGEREF _Toc344991062 h 1 HYPERLINK l _Toc344991063 1.2课程设计任务及要求 PAGEREF _Toc344991063 h 1 HYPERLINK l _Toc344991064 1.3课程设计思想 PAGEREF _Toc344991064 h 1 HYPERLINK l _Toc344991065 1.4软硬件运行环境及开发工具 PAGE

4、REF _Toc344991065 h 2 HYPERLINK l _Toc344991066 第二章 概要设计 PAGEREF _Toc344991066 h 2 HYPERLINK l _Toc344991067 2.1流程图 PAGEREF _Toc344991067 h 2 HYPERLINK l _Toc344991068 2.2 拓扑图简单说明 PAGEREF _Toc344991068 h 3 HYPERLINK l _Toc344991069 第三章 详细设计 PAGEREF _Toc344991069 h 3 HYPERLINK l _Toc344991070 3.1 三层交

5、换机的功能和配置 PAGEREF _Toc344991070 h 3 HYPERLINK l _Toc344991071 3.1.1 三层交换机的功能 PAGEREF _Toc344991071 h 3 HYPERLINK l _Toc344991072 3.2 二层交换机的功能和配置 PAGEREF _Toc344991072 h 5 HYPERLINK l _Toc344991073 3.2.1 二层交换机的功能简介 PAGEREF _Toc344991073 h 5 HYPERLINK l _Toc344991074 3.2.2 Switch0配置信息 PAGEREF _Toc34499

6、1074 h 5 HYPERLINK l _Toc344991075 3.2.3 switch1配置信息 PAGEREF _Toc344991075 h 6 HYPERLINK l _Toc344991076 3.2.4 switch2配置信息 PAGEREF _Toc344991076 h 6 HYPERLINK l _Toc344991077 3.2.5 PC机的配置 PAGEREF _Toc344991077 h 7 HYPERLINK l _Toc344991078 第四章 调试与操作说明 PAGEREF _Toc344991078 h 7 HYPERLINK l _Toc344991

7、079 4.1 同一VLAN之间的主机通信 PAGEREF _Toc344991079 h 7 HYPERLINK l _Toc344991080 4.2 不同VLAN之间的主机通信 PAGEREF _Toc344991080 h 9 HYPERLINK l _Toc344991081 第五章 程序设计总结与体会 PAGEREF _Toc344991081 h 11 HYPERLINK l _Toc344991082 第六章 致谢 PAGEREF _Toc344991082 h 12 HYPERLINK l _Toc344991083 参考文献 PAGEREF _Toc344991083 h

8、12滁州学院本科课程设计PAGE 12交换式和虚拟局域网配置与实现引言在日新月异的网络时代,信息技术的迅猛发展和广泛、深入地应用,推动了各行各业的技术进步,带来了新技术革命的蓬勃发展,也向教育提出了严峻挑战,推动着一次新的教育革命。教育如何迎接信息技术发展的挑战,正是我们必须认真思考和探索试验的事情。教育的迅速发展对教学手段和教育管理体系的要求越来越高,运用计算机多媒体和网络技术来促进教育的全面改革已势在必行,局域网涉及到各个单位、各个领域。现在,信息化已成为发展的潮流,局域网的建设成为信息化建设的焦点。此次应用交换机完成网络拓扑图的构建和对VLAN的划分和配置,综合运用本专业所学课程的理论课

9、程知识应用到实际实践中从而提高我们的独立工作能力,掌握应用交换机的基本配置与VLAN的划分和配置。第一章 需求分析1.1 课程设计题目通过使用二层交换机、三层交换机和PC机构建一个简单以太网拓扑图,并对以太网进行VLAN的划分,完成二层和三层交换机的配置使其可以通信。1.2课程设计任务及要求要求如下:(1)实现交换式以太网组网;(2)以太网络交换机配置;(3)VLAN的划分与配置;(4)画出交换式以太网组网拓扑结构图;(5)交换机配置信息;(6)测试结果。1.3课程设计思想2台三层交换机,7台二层交换机和19台PC机。共划分4个VLAN,其中一台交换机是一个VLAN或一台交换机内有2个VLAN

10、,在没有配置之前不同VLAN之间不能通信,通过配置使各个VLAN之间和以相互通信,如图1-1所示。图1-1 服务器管理仿真图1.4软硬件运行环境及开发工具 (1) 实验设备:设备二层交换机三层交换机PC机双绞线直通线数量7219若干若干 (2) 操作系统:Windows XP;(3) 仿真环境:Cisco Packet Tracer 第二章 概要设计2.1流程图分别对三层交换机,二层交换机和PC进行配置。配置流程如图2-1所示。图2-1 配置流程图 2.2 拓扑图简单说明在图1-1中,与交换机switch0直连的四台PC机及与switch3直连的PC10和PC11机同在VLAN10中,与swi

11、tch1直连的四台PC机在VLAN20中,与switch2直连的PC8,PC9和与switch3直连的两台PC机及与switch5直连的PC19同在VLAN30中,与switch4和switch6直连的以及与switch5直连的PC18同在VLAN40中,同时,switch0和switch1及switch2级联,switch5与switch6级联。第三章 详细设计3.1 三层交换机的功能和配置3.1.1 三层交换机的功能三层 HYPERLINK /List_7.html t _blank 交换机主要应用于组网中,这是我们都知道的,其有很重要的地位,第三层 HYPERLINK /List_7.h

12、tml t _blank 交换机功能的设备是一个带有第三层 HYPERLINK /List_6.html t _blank 路由功能的第二层交换机,但它是二者的有机结合,并不是简单的把路由器设备的硬件及软件简单地叠加在局域网交换机上,为了能够让所有的基站(交换机)都能够知道,网间通信(三层交换机)的地点,三层交换机中的VTP技术可以实现此功能,即像感冒病毒一样,将三层交换机的VLAN号传播给各个交换机,使各个基站都拥有所有的VLAN的信息,达到能够通信的功能。Multilayer Switch0配置:SwitchenableSwitch#conf tSwitch(config)#hostnam

13、e lay3Lay3(config)#ip routing/允许网间漫游Lay3(config)#vtp mode server /产生感冒病毒Lay3(config)#vtp domain test /名字为“test”Lay3(config)#int f0/1Lay3(config-if)# switchport trunk encapsulation dot1q /生成Trunk链路802.1qLay3(config-if)# switchport mode trunk/生成Trunk链路Lay3(config)#vlan 10Lay3(config)#vlan 20Lay3(confi

14、g)#vlan 30Lay3(config)#vlan 40Lay3(config)#int vlan 10Lay3(config-if)#ip add 54 /VLAN10标志Lay3(config-if)#no shut /激活标志Lay3(config)#int vlan 20Lay3(config-if)#ip add 54 /VLAN20标志Lay3(config-if)#no shut Lay3(config)#int vlan 30Lay3(config-if)#ip add 54 Lay3(config-if)#no shut Lay3(config)#int vlan 40L

15、ay3(config-if)#ip add 54 Lay3(config-if)#no shutLay3(config)#Z查看1:VLAN配置信息Lay3#sh vlanVLAN Name Status Ports 中间省略10 VLAN0010 active 20 VLAN0020 active 30 VLAN0030 active40 VLAN0040 active查看2:路由信息Lay3#sh ip route /查看是否允许漫游Gateway of last resort is not setC /24 is directly connected, Vlan10 C /24 is d

16、irectly connected, Vlan20 C /24 is directly connected, Vlan30C /24 is directly connected, Vlan40Multilayer Switch1配置同Multilayer Switch0配置。3.2 二层交换机的功能和配置3.2.1 二层交换机的功能简介交换机提供了大量可供线缆连接的端口,这样可以采用星型拓扑布线,当它转发帧时,交换机会重新产生一个不失真的方形电信号,交换机在每个端口上都使用相同的转发或过滤逻辑, 像网桥那样,交换机将局域网分为多个冲突域,每个冲突域都是有独立的宽带,因此大大提高了局域网的带宽,

17、 除了具有网桥、集线器和中继器的功能以外,交换机还提供了更先进的功能,如虚拟局域网(VLAN)和更高的性能。3.2.2 Switch0配置信息SwitchenSwitch#conf tSwitch0(config)#vtp mode client /允许VTP感冒病毒Switch0 (config)#vtp domain testSwitch0 (config)#int f0/1Switch0 (config-if)#switchport mode trunk /可以走多个vlan信息/漫游链路Switch0 (config)#int f0/2 Switch0 (config-if)#swit

18、chport access vlan 10 /接口f0/2加入VLAN10中Switch0 (config-if)#int f0/3Switch0 (config-if)#switchport access vlan 10Switch0 (config)#int f0/5Switch0 (config-if)#switchport access vlan 10Switch0 (config)#int f0/6Switch0 (config-if)#switchport access vlan 10 Switch0 (config-if)#Z /Ctrl+Z组合键Switch0#查看VLAN配置

19、信息:Switch0#sh vlanVLAN Name Status Ports 中间省略10 VLAN0010 active Fa0/2 Fa0/3 Fa0/5 Fa0/63.2.3 switch1配置信息SwitchenSwitch#conf tSwitch1 (config)#vtp mode client /允许VTP感冒病毒Switch1 (config)#vtp domain testSwitch1 (config)#int f0/1Switch1 (config-if)#switchport mode trunk /可以走多个vlan信息/漫游链路Switch1 (config)

20、#int f0/2 Switch1 (config-if)#switchport access vlan 20 /接口f0/2加入VLAN10中Switch1 (config-if)#int f0/3Switch1 (config-if)#switchport access vlan 20Switch1 (config)#int f0/4Switch1 (config-if)#switchport access vlan 20Switch1 (config)#int f0/5Switch1 (config-if)#switchport access vlan 20 Switch1 (confi

21、g-if)#Z /Ctrl+Z组合键Switch1#查看VLAN配置信息:Switch1#sh vlanVLAN Name Status Ports 中间省略20 VLAN0010 active Fa0/2 Fa0/3 Fa0/4 Fa0/53.2.4 switch2配置信息SwitchenSwitch#conf tswitch2 (config)#vtp mode client /允许VTP感冒病毒switch2 (config)#vtp domain testswitch2 (config)#int f0/1switch2 (config-if)#switchport mode trunk

22、 /可以走多个vlan信息/漫游链路switch2 (config)#int f0/4 switch2 (config-if)#switchport access vlan 10 /接口f0/2加入VLAN10中switch2 (config-if)#int f0/5switch2 (config-if)#switchport access vlan 10switch2 (config)#int f0/2switch2 (config-if)#switchport access vlan 30switch2 (config)#int f0/3switch2 (config-if)#switch

23、port access vlan 30 switch2 (config-if)#Z /Ctrl+Z组合键switch2#查看VLAN配置信息:switch2#sh vlanVLAN Name Status Ports 中间省略10 VLAN0010 active Fa0/4 Fa0/530 VLAN0010 active Fa0/2 Fa0/3其中,交换机Switch3、switch4和switch6配置过程同switch0配置过程;交换机switch5配置过程同switch2配置过程,因此此处便不再给出Switch3、switch4、switch6和switch5的配置过程和配置信息。3.2

24、.5 PC机的配置(1)由拓扑图信息可以得到,主机PC0、PC1、PC12、PC5和PC10、PC11同在VLAN10内,因此此6台PC机的网关同为:54,掩码为:,IP地址为53中的任意6个,由此可完成对主机进行IP和网关的配置信息;(2)由拓扑图信息可以得到,PC2、PC3、PC6和PC7同在VLAN20内,因此此4台PC的网关同为:54,掩码为:,IP地址为53中的任意6个,由此可完成对主机IP和网关的配置信息;(3)由拓扑图信息可以得到,主机PC4、PC13和 PC8、PC9及PC19同在VLAN30内,因此此5台PC的网关同为:54,掩码为:,IP地址为53内的任意5个,由此可完成对

25、此5台主机的IP和网关的配置信息;(4)由拓扑图信息可以得到,主机PC14、PC15、PC16和PC18同在VLAN40内,因此此4台主机的网关同为:54,掩码为:,IP地址可为53中的任意4个,由此可完成对此4台主机的IP和网关的配置信息。第四章 调试与操作说明4.1 同一VLAN之间的主机通信(1)在PC0单击打开如下图4.1.1所示界面。图4.1.1 物理配置界面(2)单击“Desktop”,进入如下图4.1.2所示的界面。图4.1.2 Desktop界面(3)单击“Command Prompt”计入命令提示符界面,并输ping ,结果为可以通信,如下图4.1.3所示。图4.1.3 测试

26、信息对于VLAN20、VLAN30和VLAN40的同一VLAN之间的测试步骤均如上,此处为了简化便不再给出。4.2 不同VLAN之间的主机通信(1)在PC11单击打开如下图4.2.1所示界面。图4.2.1 物理配置界面(2)单击“Desktop”,进入如下图4.2.2所示的界面。图4.2.2 Desktop界面(3)单击“Command Prompt”计入命令提示符界面,并输ping ,结果为可以通信,如下图4.2.3所示。图4.2.3 测试信息此处给出的为VLAN10中的PC11 ping VLAN30中的PC19的示例,对于余下的不同VLAN之间的测试步骤均如上所示,此处为了简化便不再给出

27、。第五章 程序设计总结与体会在这两周的程序设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,该设计通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在程序设计上,通过该设计学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。与队友的合作更是一件快乐的事情,只有彼此都付出,彼此都努力维护才能将作品做的更加完美。而团队合作也是当今社会最提倡的。通过这次交换式和虚拟局域网配置与实现的课程设计,本组成员在多方面都有所提高。通过这次对以太网中的交换机的配置及

28、对虚拟局域网的划分,综合运用本学期所学的理论知识应用到实际实践中从而提高学生的独立工作能力。第六章 致谢在此感谢我们的赵国柱老师,在课程设计上给予我们指导、提供给我们的支持和帮助,这是我们能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我们能够把以太网的拓扑图和配置信息做得更加完善。在此期间,我们不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我们组要感谢帮助过我们的同学,他们也为我们解决了不少不太明白的设计商的难题,同时也感谢学院为我们提供良好的做课程设计的环境。参考文献1 Todd Lammle.CCNA学习指南.电子工业出版社,2008.6

29、 2 谢希仁.计算机网络M.北京:电子工业出版社,2005.评语: 评阅教师签名: 年 月 日成 绩 附录资料:不需要的可以自行删除C语言编译器的设计与实现 我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1) 词法分析部分(2) 语法分析处理及四元式生成部分 (3) 输出显示部分一词法分析器设计 由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入

30、源程序,输出单词符号。我们规定输出的单词符号格式为如下的二元式: (单词种别,单词自身的值)#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#define EO 13#define plus 14#define time

31、s 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 ”中读取一行到输入缓冲区,而词法分析过程中每次读取一个字符时则是通过执行 readch( )从输入缓冲

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

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

34、。在处理 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 S if e S else SS while e S S L S a ;

35、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 e S else S S if e S else SS while e S

36、 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) = 所以可以用方法解决以上冲突,最后我们得到的分析表如下:ACTIONGOTO ifElsewhilea;e#SL0S2S

37、3S4S511ACC2S63S74S2S3S4S5985S106S2S3S4S5117S2S3S4S5128S139S2S3S4R5S591410R4R4R4111512R2R2R213R3R3R314R615S2S3S4S51616R1R1R1static 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 */

38、-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, -1, -1, -1, -1, -1,/* 9 */ 2, -1, 3,

39、 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, -1, -1, -1, -1, -1,/* 15*/ 2, -1, 3

40、, 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)E i (过程略)ACTIONGOTOI+*()#E0S3S211S4S5

41、ACC2S3S263R4R4R4R44S3S275S3S286S4S5S97R1R5R1R18R2R2R2R29R3R3R3R3static 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, -1, 2, -1, -1, 8,/* 6 */ -1, 4, 5,

42、-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()!&|#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S4S56786R4S9S10R47S1S4S514788S1S4S5157

43、89R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static 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,102,102,102, -1, -1, -1,/* 4 */ 1, -1

44、, 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, -1, -1,/*10 */ 107, -1,107, -1,107,

45、 -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, -1, -1, -1;LR 分析表控制语义加工的实现:当扫描 LR 分析

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

47、) * 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,即按第(4)个产生式 En 来进行归约;由于产生式右部仅含一项,故去掉状态栈栈顶

48、“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)步的状态。三中间代码生成器设计:布尔表达式 布尔表达式在程序语言中有两个基本作用:一是

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

50、真、假出口的确定:考虑表达式 B1 | B2 ,若 B1为真,则立即知道 B 也为真;因此,B1的真出口也就是整个 B 的真出口。若 B1?为假,则 B2必须被计值,B2的第一个四元式就是 B1的假出口。当然,B2的真、假出口也就是整个 B的真、假出口。类似的考虑适用于对 B1 & B2的翻译,我们将 B1 | B2和 B1 & B2 的翻译用下图表示,在自下而上的分析过程中,一个布尔式的真假出口往往不能在产生四元式的同时就填上。我们只好把这种未完成的四元式的地址( 编号)作为 B 的语义值暂存起来,待到整个表达式的四元式产生完毕之后再来回填这个未填入的转移目标。条件语句对条件语句 if e

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

52、1语句执行完时意味着整个 if-else 语句也已执行完毕;因此,在 S1的编码之后应产生一条无条件转移指令。这条转移指令将导致程序控制离开整个 if-else 语句。但是,在完成 S2的翻译之前,这条无条件转移指令的转移目标是不知道的。甚至,在翻译完 S2之后,这条转移指令的转移目标仍无法确定。这种情形是由于语句的嵌套性所引起的。例如下面的语句:if e1 if e2 S1 else S2 else S3 在 S1的代码之后的那条无条件转移指令不仅应跨越 S2而且应跨越 S3。这也就是说,转移目标的确定和语句所处的环境密切相关。条件循环语句条件循环语句 while e S 通常被翻译成图的代

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

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

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

温馨提示

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

评论

0/150

提交评论