SLR(1)文法分析实验报告.doc

SLR(1)文法分析实验报告.doc

ID:56481785

大小:214.00 KB

页数:36页

时间:2020-06-24

SLR(1)文法分析实验报告.doc_第1页
SLR(1)文法分析实验报告.doc_第2页
SLR(1)文法分析实验报告.doc_第3页
SLR(1)文法分析实验报告.doc_第4页
SLR(1)文法分析实验报告.doc_第5页
资源描述:

《SLR(1)文法分析实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《编译原理》课程设计报告—SLR(1)分析的实现学院计算机科学与技术专业计算机科学与技术学号学生姓名指导教师姓名2015年12月26日目录1.设计的目的与内容11.1课程设计的目的11.2设计内容11.3设计要求11.4理论基础12算法的基本思想22.1主要功能函数22.2算法思想3SLR文法构造分析表的主要思想:3解决冲突的方法:3SLR语法分析表的构造方法:43主要功能模块流程图53.1主函数功能流程图54系统测试65结论11附录程序源码清单121.设计的目的与内容1.1课程设计的目的编译原理课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机

2、的结合起来,独立分析和解决实际问题的机会。l进一步巩固和复习编译原理的基础知识。l培养学生结构化程序、模块化程序设计的方法和能力。l提高学生对于编程语言原理的理解能力。l加深学生对于编程语言实现手段的印象。1.2设计内容构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。1.3设计要求1)SLR(1)分析表的生成可以选择编程序生成,也可选择手动生成;2)程序要求要配合适当的错误处理机制;3)要打印句子的文法分析过程。1.4理论基础由于大多数适用的程序设计语言的文法不能满足LR(0)文法的条件

3、,即使是描述一个实数变量说明这样简单的文法也不一定是LR(0)文法。因此对于LR(0)规范族中有冲突的项目集(状态)用向前查看一个符号的办法进行处理,以解决冲突。这种办法将能满足一些文法的需要,因为只对有冲突的状态才向前查看一个符号,以确定做那种动作,因而称这种分析方法为简单的LR(1)分析法,用SLR(1)表示。2算法的基本思想2.1主要功能函数classWF{WF(chars1[],chars2[],intx,inty)WF(conststring&s1,conststring&s2,intx,inty)booloperator<(constWF&a)constbooloperator=

4、=(constWF&a)constvoidprint()};classClosure{voidprint(stringstr)booloperator==(constClosure&a)const};voidmake_item()voiddfs(conststring&x)voidmake_first()voidappend(conststring&str1,conststring&str2)bool_check(constvector&id,conststringstr)voidmake_follow()voidmake_set()voidmake_V()voidmake_cmp

5、(vector&cmp1,inti,charch)voidmake_go()voidmake_table()voidprint(strings1,strings2,strings3,strings4,strings5,strings6,strings7)stringget_steps(intx)stringget_stk(vectorstk)stringget_shift(WF&temp)voidanalyse(stringsrc)2.2算法思想SLR文法构造分析表的主要思想:许多冲突性的动作都可能通过考察有关非终结符的FOLLOW集而获解决。解决冲突的方法:解决冲突的方法是分

6、析所有含A和B的句型,考察集合FOLLOW(A)和FOLLOW(B),如果这两个集合不相交,而且也不包含b,那么当状态I面临输入符号a时,我们可以使用如下策略:若a=b,则移进。若a∈FOLLOW(A),则用产生式A→α进行归约;若a∈FOLLOW(B),则用产生式B→α进行归约;此外,报错*SLR的基本算法:假定LR(0)规范族的一个项目集I中含有m个移进项目A1→α•a1β1,A2→α•a2β2,…,Am→α•amβm;同时含有n个归约项目B1→α•,B2→α•,…,B3→α•,如果集合{a1,…,am},FOLLOW(B1),…,FOLLOW(Bn)两两不相交(包括不得有两个FOLLO

7、W集合有#),则隐含在I中的动作冲突可以通过检查现行输入符号a属于上述n+1个集合中的哪个集合而活的解决:若a是某个ai,i=1,2,…,m,则移进。若a∈FOLLOW(Bi),i=1,2,…,m,则用产生式Bi→α进行归约;此外,报错这种冲突的解决方法叫做SLR(1)解决办法。SLR语法分析表的构造方法:首先把G拓广为G’,对G’构造LR(0)项目集规范族C和活前缀识别自动机的状态转换函数GO。函数ACTI

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。