欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    编译原理课程设计LR0分析表的构造.docx

    • 资源ID:29155307       资源大小:765.83KB        全文页数:31页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理课程设计LR0分析表的构造.docx

    1、编译原理课程设计LR0分析表的构造引 言编译原理是计算机专业的一门重要的专业课程,其中包含大量软件设计思想。通过课程设计,实现一些重要的算法,或设计一个完整的编译程序模型,能够进一步加深理解和掌握所学知识,对提高自己的软件设计水平具有十分重要的意义。语法分析是编译过程的第二阶段,是编译器前端的核心组成部分,在编译系统中起到了至关重要的作用。自底向上的语法分析与自顶向下的语法分析相比,对将要分析的源程序有着更大的分析空间,从而受到了广泛的运用。LR(0)分析是自底向上LR类语法分析的基础,自底向上语法分析方法是一种移进-规约过程,在当前分析的栈顶符号串形成句柄时就采取规约动作,因此最终目标是如何

    2、在分析过程中确定句柄。LR分析法是给出一种能根据当前分析栈中的符号串和向右顺序查看k个符号串就可以唯一地确定分析器动作:是移进还是规约,采用哪条产生式。LR(0)分析器是在分析过程中,不需要向后查看输入串符号,因此它对文法的限制较大。对绝大多数高级语言语法分析器是不适用的,但是它是构造其他LR分析器的基础。LR(0)最终存在的问题和需要解决的问题是在构造LR(0)分析表的时候,在LR(0)项目集规范族中,有移进项目和规约项目、规约项目和规约项目同时存在的现象,形成移进-规约冲突和规约-规约冲突,直接导致语法分析器无法在某一状态进行移进还是规约。为了能够解决这一问题,我们需要再向后查看一个输入字

    3、符(也就是当前字符的FOLLOW集)以确定下一步操作是否能够进行。我班选择的是老师给的LR(1)语法分析构造器的设计,即对任意给定的文法G构造LR(1)项目集规范族,其中要实现CLOSURE(I)、GO(I,X)、FIRST集合等。在此基础上,构造了LR(1)分析表。然后对输入的句子进行语法分析,给出接受或出错报告。程序采用文件输入输出方式。其中包括两个输入文件:文法grammar.txt,以及输入串input.txt;两个输出文件:项目集items.txt和文法的LR(1)分析表action_table.txt。由于语法分析的结果只给出接受或错误报告,比较简单。所以直接在屏幕上输出,也便于用

    4、户查看。 在具体编写程序过程中,对文法操作的各个功能模块独立成为一个子程序,而对具体输入串的分析则放在main()函数中进行。各个变量及函数的意义和用法我将在叙述程序设计的总体方案中详细给出。程序的总体算法思想来自编译原理课程。具体实现由我独立完成。程序用C/C+语言编写。在Microsoft Visual C+ 2005环境下调试通过。摘 要语法分析的主要任务是接收词法分析程序识别出来的单词符由某种号串,判断它们是否语言的文法产生,即判断被识别的符号串是否为某语法部分。 LR分析法是给出一种能根据当前分析栈中的符号串(通常以状态表示)和向右顺序查看输入串的K个(K0))符号就可唯一地确定分析

    5、器的动作是移进还是归约和用哪个产生式归约,因而也就能唯一地确定句柄,所以LR分析过程是一种规范归约过程。 经过分析,我们使用C作为前端开发工具,在分析语法成分时比较方便直观,更便于操作。运行程序的同时不断修正改进程序,直至的到最优源程序。关 键 字语法分析 文法 LR(1)分析 移进 归约AbstractGrammatical analysis of the main tasks was to receive lexical analysis procedure to identify the words from a website, string, and judge whether th

    6、ey have a grammar of the language, that is, judging by the series of symbols to identify whether a grammar part. The LR analytic method is gives one kind to be able to act according to current analyzes in stacks string (usually by condition expression) and examined in turn toward right the input str

    7、ing K (K0) the mark may determine only which production pattern selling and buying of real esgate within the same family analyzers movement is moves to or the selling and buying of real esgate within the same family and uses . Therefore can also determine the handle only, therefore the LR parsing pr

    8、ocess is one kind of standard selling and buying of real esgate within the same family process. After analysis, we use VC + + as a front-end development tool for the analysis of syntax ingredients more convenient visual, more easy to operate. Operational procedures at the same time constantly improv

    9、ing procedures, until the source of optimal.Key WordsGrammatical analysis grammar LR (1) Analysis Moves Selling and buying of real esgate within the same family课程设计任务书1、本课题的目的及意义课程设计实践对学生巩固所学基础专业课程知识、进行编译系统基本技能训练、培养实践动手能力,从而掌握编译系统的基本工作原理、基本方法和基本开发技术,最终达到具有一定的编译系统的实际开发能力有重要意义。通过课程设计,主要达到以下目的:1.帮助学生深入

    10、理解编译原理的有关理论和巩固编译原理相关知识。2. 巩固学生学习的编译原理、程序设计语言、数据结构等课程的基础知识,训练学生分析和解决编译系统的相关问题的能力,提高学生的综合素质。3. 从软件工程的角度来看,编译原理课程设计是一个很好的实例,可以训练学生软件设计的能力以及编码调试能力。2、本课题任务的主要内容本课程设计主要内容包括以下几点:1、根据选定的题目,查阅资料,熟悉相关理论、方法;(1)掌握文献检索方法,以获得编译系统开发技术等相关资料;(2)学习并熟练使用一种4GL开发平台(如VC+、Java、Dephi、PB、VB等);2、分析问题,确定系统逻辑结构;3、确定系统所需模块及模块结构

    11、,并用流程图描述各模块;4、编码及调试程序;5、撰写课程设计说明书。3、提交的成果1、一份符合课程设计说明书撰写规范的课程设计说明书。2、一套系统原型。第1章 概述61.1 项目背景61.2 编写目的71.3 软件定义71.4 开发环境71.5 编译环境简介7 第2章需求分析82.1 问题陈述82.2 需完成的功能82.3 数据流图 92.4 数据字典 10 2.5 E-R图14第3章逻辑设计153.1 系统组织基本工作流程153.2 系统设计框图16第4章总体设计174.1 LR(1) 分析器工作流程图174.2 流程简介174.3 LR(1) 分析思想 194.4 各模块流程图20第5章详

    12、细设计225.1 正规式构造NFA 225.2 将NFA转化为DFA 245.3 把DFA最小化 25第6章 测试26小结 28致谢 29参考文献 30第1章 概述11 项目背景随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对LR(1)文法判定与预测分析器的构造系统,具有比手工运算、构造所无法比拟的优点。例如:检索迅速、查找方便准确性高等。这些优点能够极大地提高判定LR(1)文法的效率,也是我们此次课程设计的目的。因此,开发一套这样的LR(1)文法判定与预测分析器的构造软件成为很有

    13、必要的事情。 编译原理是大学计算机专业的必修课程。而词法分析作为其中的一部分占据着比较重要的比重。词法分析是编译的第一个阶段,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。通过本次课程设计,学生对编译的理解就不只停留在书本的概念上,而是知道怎样把编译理论应用到实际的编译程序设计的实践中。对我们今后的学习和就业都是至关重要的。1.2 编写目的 课程设计实践对学生巩固所学基础专业课程知识、进行编译系统基本技能训练、培养实践动手能力,从而掌握编译系统的基本工作原理、基本方法和基本开发技术,最终达到具有一定的编译系统的实际开发能力有重要意义。通过课程设计,主要达到

    14、以下目的:1.帮助深入理解编译原理的有关理论和巩固编译原理相关知识。2. 巩固学习的编译原理、程序设计语言、数据结构等课程的基础知识,训练分析和解决编译系统的相关问题的能力,提高我们的综合素质。3. 从软件工程的角度来看,编译原理课程设计是一个很好的实例,可以训练我们软件设计的能力以及编码调试能力。通过本次课程设计,明白了分析器的原理、构造方法及其实现。基本掌握了递归这种有用的分析及实现方法,加深了对编译原理这门课程的理解。通过本次课程设计我们还可以为以后的毕业设计做准备,熟悉了做毕业设计的格式、流程、方法。学会了怎样在图书馆查找相关的资料。提高了我的自学能力和自制力,我想做课程设计不仅是要我

    15、们完成课业任务,更重要的是教会了我们学习方法,锻炼我们的意志,学会如何在独立的情况下更好的完成任务。13 软件定义LR分析法指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前看k个输入符号,能确定相对于某产生式左符号的句柄是否已在分析栈的顶部形式,从而就可以确定当前所应采用的分析动作(是移进还是按某一产生式进行归约)。LR(0)分析不需要向前看输入符号就能判断。14 开发环境本系统使用TC开发。适用内存不低于256M配备有Windows2000,Windows2003,WindowsXP系统的计算机第2章 需求分析2.1 问题陈述

    16、编译过程的核心部分是语法分析。他的任务是在词法分析识别单词符号串的基础上,分析并判断程序的的语法结构是否符合语法规则。语言的语法结构是用上下文无关文法描述的。因此语法分析器的工作的本质上就是按文法的产生式,识别输入符号串是否为一个句子。对于一个文法,当给你一串符号是,如何知道它是不是该文法的一个句子,这是这个课程设计所要解决的一个问题。对输入的文法G,在程序终实现CLOSURE(1),GO(I,X),FRIST等的构造,并利用这些功能函数构造出LR(1)项目集族。并且输出结果。在此基础上构造G的LR(1)分析表,并对输入的句子进行语法分析表,给出分析结果。 LR分析法是给出一种能根据当前分析栈

    17、的符号串和向右顺序查看输入串的K个符号就可以唯一地确定分析器的动作是移进还是归约和用哪个产生式归约,因而也就能唯一地确定句柄。LR分析法的归约过程是规范推到的逆过程,所以LR分析过程是一种规范归约过程。2.2 需完成的功能从键盘输入一个文法(要求是上下文无关文法),保存到一个外部文件(或数据库)中。判断是否是LR(1)文法。从键盘接受一个符号串(源程序)或从一个文本文件中接受符号串(源程序),对其进行语法分析,并将分析过程信息和结果(语法树)保存到一个外部文件(或数据库)中。具体的说就是,本课程设计所做的工作是建立一个针对LR(1)文法的编译器,本课程设计将定义好的文法书写的文件或从键盘接受的

    18、符号串作为输入,其中包括语法及语义动作。然后根据给定的文法和LR分析表,构造LR分析器,并输出LR工作过程。根据LR分析器分析过程算法,通过action()和goto()两个函数即可实现算法的功能。本系统的主要功能包括以下几个部分:系统登录导入文法模块计算可归前缀项目规范族和文法判定后继项目求解后继状态生成LR(0)的判定若无错误则构造LR(0)分析表生成action表生成goto表求follow集SLR文法判定计算出LR(1)项目规范族 生成后跟符运算Closure(J)的运算传递后跟符运算生成DFA构造LR(1)分析表设计分析算法由分析算法判断输入符号串是否为该文法的句型生成语法树退出2.

    19、3数据流图 顶层图: 扫描项目集:构造分析表:填写ACTION表和GOTO表:2.4 数据字典2.4.1 数据项数据项名:终结符别名:VT数据类型:CHAR长度:40取值范围:T001-T040数据项名:非终结符别名:VN数据类型:CHAR长度:30取值范围:T001-T030数据项名:文法产生式序号别名:Mi数据类型:INT长度:80取值范围:M001-M080数据项名:项目产生式序号别名:Ij数据类型:INT长度:200取值范围:I001-I2002.4.2数据结构数据结构名:文法产生式说明:用来生成项目集组成:产生式序号,左部,右部数据结构名:项目产生式说明:用来产生移进或归约动作组成:

    20、项目产生式序号,左部,右部,.位置数据结构名:文法说明:用来提供文法的信息组成:终结符,非终结符,开始符,产生式序号,左部,右部2.4.3数据流数据流名:移进信息数据流来源:扫描项目集产生式;数据流去向:构造分析表;数据结构:项目产生式序号,左部,右部,位置数据流名:归约信息数据流来源:扫描项目集产生式;数据流去向:构造分析表;数据结构:项目产生式序号,左部,右部,.位置数据流名:终结符和非终结符数据流来源:文法数据流去向:判断数据流名:核心项目集数据流来源:产生项目集数据流去向:项目集规范族表数据结构:项目产生式序号,左部,右部,.位置数据流名; rj数据流来源:填写ACTION表数据流去向

    21、:分析表数据流名;Si数据流来源:填写ACTION表数据流去向:分析表数据流名:产生式序号数据流来源:文法数据流去向:填写分析表数据流名:项目产生式序号数据流来源:查找移进的下一状态数据流去向:填写分析表2.4.4数据存储数据存储名:项目集规范族表输入的数据流:核心项目集输出的数据流:移进的下一状态序号组成:项目产生式序号,左部,右部,.位置数据存储名:分析表输入的数据流:rj ,Si, i数据结构:终结符,非终结符,项目产生式序号,rj ,Si, i2.4.5处理过程处理过程名:生成项目集输入:文法产生式;输出:项目产生式序号,核心项目集处理:该处理过程主要是用来生成项目集规范族表,以及将文

    22、法产生式转化成项目产生式;处理过程名:判断动作输入:项目产生式输出:移进信息,归约信息处理:该处理过程主要用来判断当前项目产生式的下个动作是移进还是归约处理过程名:查找移进的下一状态输入:移进信息,项目集输出:项目产生式序号i处理:该处理过程用来查找移进的下个产生式的序号处理过程名:填写分析表输入:项目产生式序号i,文法产生式序号j;处理:最终生成分析表处理过程名:判断输入:项目产生式序号i,终结符集和非终结集输出:终结符,非终结符处理:判断移进项目是终结符还是非终结符2.5E-R图文法的E-R图:项目产生式的E-R图:第3章 逻辑设计31系统组织基本工作流程(以总体逻辑结构图表达)32 系统

    23、设计框图第4章 总体设计41 LR(1) 分析器工作流程图图4.1 LR(1)分析器工作流程图4.2 流程简介 所谓LR(1)分析法,就是指如果一个文法的LR(1)分析表中不含多重入口时,(即任何一个LR(1)项目集中无移近规约冲突或规约规约冲突),则该文法为LR(1)文法。实现LR(1)分析的程序又称为LR(1)分析程序或LR(1)分析器。如果一个文法能满足以下特性:无二义性,无左递归,无有害产生式,无多余产生式,无产生式,那么就可以构造LR(1)分析表。当文法满足条件后,先构造出LR(0)项目规范族,然后构造LR(0)分析表,当此分析表中含有移近规约冲突或规约规约冲突时,便计算FIRST和

    24、FOLLOW集合,构造SLR(1)分析表,如果此分析表中还出现移近规约冲突或规约规约冲突时,则运用closure算法,构造LR(1)项目规范族,最后构造LR(1)分析表,利用分析表,构造LR(1)分析器模拟构造器。LR(1)的语法分析程序包含了四个部分,总控程序,LR(1)分析表,先进后出的状态栈,先进先出的扫描队列。本程序也是采用了同样的方法进行语法分析,该程序是采用了C+语言来编写,其逻辑结构图如下:图4.2 各模块调用关系图对一个文法构造了它的LR(1)分析表后就可以在LR分析器的总控程序(驱动程序)控制下对输入串进行分析,即根据输入串的当前符号和分析栈的栈顶状态查找LR(1)分析表应采

    25、取的动作,对状态栈进行相应的操作即移进、归约、接受或报错。具体说明如下:1) 若ACTIONS,a= Sj,a为终结符,j移入状态栈。2) 若ACTIONS,a= rj,a为终结符或#号,则用第j个产生式归约,并将两个栈的指针减去k,其中k为第j个产生式右部的符号串长度,这时当前面临符号为第j个产生式左部的非终结符。3) 若ACTIONS,a=acc,a应为#号,则为接受,表示分析成功。4) 若GOTOS,A=j,A为非终结符,表明前一动作是用关于A的产生式归约的,当前面临非终结符A应移入符号栈,j移入状态栈。对于终结符的GOTOS,a已和 ACTIONS,a重合。5) 若ACTIONS,a=

    26、空白,则转向出错处理。4.3 LR(1) 分析思想 LR(1)分析的基本思想 :LR(1)方法按每个具体的句型设置展望信息。例:如果存在如下的一些句型Aa,Ab,Ac,则FOLLOW(A)=a,b,c处理到句型A,只当输入符号为a时归约;处理到句型A,只当输入符号为b时归约;处理到句型A,只当输入符号为c时归约LR(1)分析 若AaBb属于项目集I时,则Bg也属于I,把FIRST(b)作为用产生式Bg归约的搜索符(用以代替SLR(1)分析中的FOLLOW(B)),并把此搜索符号的集合也放在相应项目的后面,这种处理方法即为LR(1)方法 (1) I的任何项目属closure(I);(2)若A1B

    27、2,aclosure(I),B是一产生式,那么对于FIRST(2a)中的每个终结符b,如果B,b不在closure(I)中,则把它加进去;(3)重复(1)(2),直至closure(I)不再增大。GO函数若I是一个项目集,X是一个文法符号 GO(I, X)= closure(J) 其中 J= 任何形如AX,a的项目A.X,aI LR(I)项目规范族C的构造算法类同LR(0)的,只是 初始时:C= closure(SS,#); LR(1)的优缺点: 优点:LR(1)分析对搜索符的计算方法比较确切,没有无效归约,适应的文法更广 缺点:LR(1)分析表的状态数目庞大 4.4 各模块流程图LR(1)分

    28、析器构造及输入串分析流程: 求项目集规范族:分析表构造流程总控程序流程第5章 详细设计负责模块:DFA生成算法其中包括三个步骤:(1)由正规式构造NFA,(2)把NFA转化为与其等价的DFA,(3)把DFA最小化。 5.1 正规式构造NFAInput : 一个字母表()上的 Regular Experssion rOutput : 一个接受 L(r) 的 NFA NMethod : 把 r 解析成为子表达式(subexpressions),然后使用下面的1),2)规则,为 r 中的基本符号(basic symbols,基本符号就是和中的字符)构建NFA,基本符号符合1),2)关于正规式的定义,注意,假如symbol a 出现多次,那么它每次出现都要构建一个NFA。之后,我们需要通过 r 的语法结构,通过规则3)组合前面构建的NFA,直到得到整个NFA为止。对于中间产生的NFA,它只有一个终态,没有进入开始装状态的边,也没有离开接受状态的边。 规则1 对于空记号,生


    注意事项

    本文(编译原理课程设计LR0分析表的构造.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开