编译原理自底向上的语法分析.ppt

上传人:博****1 文档编号:569924560 上传时间:2024-07-31 格式:PPT 页数:20 大小:576.50KB
返回 下载 相关 举报
编译原理自底向上的语法分析.ppt_第1页
第1页 / 共20页
编译原理自底向上的语法分析.ppt_第2页
第2页 / 共20页
编译原理自底向上的语法分析.ppt_第3页
第3页 / 共20页
编译原理自底向上的语法分析.ppt_第4页
第4页 / 共20页
编译原理自底向上的语法分析.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《编译原理自底向上的语法分析.ppt》由会员分享,可在线阅读,更多相关《编译原理自底向上的语法分析.ppt(20页珍藏版)》请在金锄头文库上搜索。

1、语法分析部分知识关系图语法分析部分知识关系图开发语法分析程序开发语法分析程序语法定义语法定义基于基于上下文无关文法上下文无关文法使用使用实现实现自顶向下自顶向下自底向上自底向上第五章第五章 自底向上的语法分析自底向上的语法分析l5.1 自底向上的语法分析方法概述自底向上的语法分析方法概述l5.2 LR(0)分析的有限自动机分析的有限自动机l5.3 LR(0) 分析分析l5.4 SLR(1) 分析分析l5.5 LR(1) 分析分析l5.6 LALR(1) 分析分析l5.7 LALR(1) 语法分析器的自动生成器语法分析器的自动生成器 (YACC)5.1 自底向上语法分析概述自底向上语法分析概述l

2、自顶向下语法分析回顾自顶向下语法分析回顾l自底向上语法分析的例子自底向上语法分析的例子l自底向上语法分析的主要思想自底向上语法分析的主要思想l自底向上语法分析的关键问题自底向上语法分析的关键问题l一些相关概念一些相关概念自顶向下分析例自顶向下分析例P:(1) Z aBeA(2) A Bc (3) B d(4) B bB (5) B a b e c自顶向下分析过程是从自顶向下分析过程是从文法开始符文法开始符出发,为所给出发,为所给输入串输入串构造构造最左推导最左推导的过程。的过程。句型句型输入输入动作动作Z Zabecabec推导推导(1)(1)abecabeca aB BeAeA匹配匹配(a)

3、(a)becbecB BeAeA推导推导(4)(4)becbecb bB BeAeA匹配匹配(b)(b)ececB BeAeA推导推导(5)(5)ecece eA A匹配匹配(e)(e)c cA A推导推导(2)(2)c cB Bc c推导推导(5)(5)匹配匹配(c)(c)c c c c成功成功自底向上语法分析的例子P:(1)Z ABb(2)(2) A a (3) A b(4) B b(5) B c(6) B bBa b c b输入输入符号栈符号栈动作动作abcbabcb移入移入a abcbbcb归约归约(2)(2)A Abcbbcb移入移入AbAbcbcb移入移入AbAbc cb b归约归

4、约(5)(5)AbAbB Bb b归约归约(6)(6)ABABb b移入移入归约归约(1)(1)ABbABbZ Z成功成功自底向上分析过程是从所给自底向上分析过程是从所给输入串输入串出发,对其进行出发,对其进行最左归约最左归约的过程。的过程。自底向上归约的过程也是自底向上构建语法树的过程自底向上归约的过程也是自底向上构建语法树的过程自底向上归约的过程也是自底向上构建语法树的过程自底向上归约的过程也是自底向上构建语法树的过程a b c bBBZ归归约约过过程程Z rm ABb rm AbBb rm Abcb rm abcbA abcb- Abcb- AbBb- ABb- Z自底向上分析中归约过自

5、底向上分析中归约过 程的逆过程就是该句子程的逆过程就是该句子的最右推导的最右推导;5.1 自底向上语法分析方法概述l主要思想主要思想:从输入串出发从输入串出发;尽可能地找到尽可能地找到可归约子串可归约子串并将其归约成一个非终极符并将其归约成一个非终极符;直到归约成文法的开始符或发现语法错误直到归约成文法的开始符或发现语法错误;l分析动作分析动作:移入移入(shift),归约归约(reduce)l包含以下方法包含以下方法: LR 类的方法类的方法; 简单优先法简单优先法; 算符优先法算符优先法l关键问题关键问题:什么时候进行归约,按照哪条产生式进行归约什么时候进行归约,按照哪条产生式进行归约;一

6、些相关概念l短语短语一个句型形如一个句型形如, 如果存在一个句型如果存在一个句型 A ,而且而且 A+ , 则称则称 为句型为句型的的短语短语;例如句型例如句型AbBb,则,则bB,AbBb是它的短语,因为是它的短语,因为l存在句型存在句型ABb,ABb AbBb, = A, = b;l存在句型存在句型Z,Z ABb AbBb , = , = ;l简单短语简单短语一个句型形如一个句型形如, 如果存在一个句型如果存在一个句型 A ,而且而且 A , 则称则称 为句型为句型的的简单短语简单短语;例如句型例如句型AbBb,bB是它的简单短语,是它的简单短语,AbBb不是不是它的简单短语它的简单短语(

7、1) Z ABb(2) A a(3) A b(4) B d(5) B c(6) B bB一些相关概念l句柄句柄:一个句型的简单短语可能有多个,称一个句型的简单短语可能有多个,称最最左简单短语左简单短语为为句柄句柄(handler);例如:句型例如:句型abBb,简单短语有两个:,简单短语有两个:a,bBlZ ABb aBb abBb最左简单短语最左简单短语a是句柄是句柄l句柄的唯一性句柄的唯一性: 如果一个如果一个CFG无二义性无二义性,则它的任意一个句型都则它的任意一个句型都有唯一的句柄有唯一的句柄;短语、简单短语、句柄的例子P:(1) E T(2) E E + T(3) T F(4) T

8、T * F(5) F (E)(6) F i(7) F n句型句型: T+ (E+T)*i简单短语简单短语: T, E+T, i句柄句柄: T通过为所给句型建立语法分析树,可以很容易地识别出该句通过为所给句型建立语法分析树,可以很容易地识别出该句型的所有短语、简单短语和句柄。型的所有短语、简单短语和句柄。句型的一个推导句型的一个推导: (该句型没有最右推导该句型没有最右推导)E E + T E + T*FE+T*i E+F*i E+(E)*i E+(E+T)*i T+(E+T)*i短语短语: T +(E+T)*i, T, E+T, i, (E+T),(E+T)*i由语法分析树识别短语、简单短语和

9、句柄EE+TTT*FF( E )E+ Ti 语法分析树语法分析树的叶子节点构成的叶子节点构成句型句型: T+ (E+T)*i每棵每棵子树子树的叶子节点构成的叶子节点构成短语短语:T+ (E+T)*i 、T、(E+T)*i、(E+T)、E+T、i每棵每棵简单子树简单子树(只有一层的子树只有一层的子树)的叶子节的叶子节点构成点构成简单短语简单短语:T、E+T、i最左简单子树最左简单子树的叶子节点构成的叶子节点构成句柄句柄: T一些相关概念l自顶向下的语法分析方法中曾介绍过:自顶向下的语法分析方法中曾介绍过:l推导:对句型中的非终极符用产生式右部替换推导:对句型中的非终极符用产生式右部替换l规范推导

10、:一个句型的最右推导称为该句型的规范推导:一个句型的最右推导称为该句型的规范推导规范推导;l规范句型规范句型(右句型右句型):从开始符通过规范推导得:从开始符通过规范推导得到的句型到的句型;推导的逆过程称为归约规范推导的逆过程称为规范归约(最左归约)规范归约过程中产生的句型仍是规范句型规范归约的过程也是对规范句型的最左简单短语(句柄)进行归约的过程一些相关概念 Z ABb 规范前缀为规范前缀为 AB, ABd Z + Acb 规范前缀为规范前缀为 A, Ac, Acbl规范前缀规范前缀:一个规范句型的一个前缀称为一个规范句型的一个前缀称为规范前缀规范前缀, 如如果该前缀后面的符号串不包含非终极

11、符果该前缀后面的符号串不包含非终极符;规范句型规范句型规范前缀规范前缀 或者终极符串或者终极符串一些相关概念 Z ABb 规范前缀为规范前缀为 AB, ABb 规范活前缀规范活前缀: AB(不包含简单短语不包含简单短语) , ABb(包含一个简单短语且在最后包含一个简单短语且在最后) l规范活前缀规范活前缀:满足如下条件之一的规范前缀称为规范满足如下条件之一的规范前缀称为规范活前缀活前缀:该规范前缀不包含简单短语该规范前缀不包含简单短语;该规范前缀只包含一个简单短语该规范前缀只包含一个简单短语,而且是在该规范前缀的而且是在该规范前缀的最后最后(这个简单短语就是句柄这个简单短语就是句柄); Z

12、+ abcb 规范前缀为规范前缀为 a, ab, abc, abcb规范活前缀规范活前缀: a (包含一个简单短语且在最后包含一个简单短语且在最后) abc是不是规范活前缀?是不是规范活前缀? (不是,包含两个简单短语不是,包含两个简单短语a和和c)自底向上语法分析的例子P:(1)Z ABb(2)(2) A a(3) A b(4) B b(5) B c(6) B bBa b c b输入输入符号栈符号栈动作动作abcbabcb移入移入a abcbbcb归约归约(2)(2)A Abcbbcb移入移入AbAbcbcb移入移入AbcAbcb b归约归约(5)(5)AbBAbBb b归约归约(6)(6)

13、ABABb b移入移入归约归约(1)(1)ABbABbZ Z成功成功自底向上分析过程是从所给自底向上分析过程是从所给输入串输入串出发,对其进行出发,对其进行最左归约最左归约的过程。的过程。规范活前缀规范活前缀 或者或者终极符串终极符串规范句型一些相关概念l规范活前缀规范活前缀决定决定分析动作分析动作移入移入:规范活前缀不包含简单短语规范活前缀不包含简单短语; ; 移入型规范活前缀移入型规范活前缀归约归约:规范活前缀只包含一个简单短语规范活前缀只包含一个简单短语, ,而且是在该规范而且是在该规范活前缀的最后活前缀的最后; ; 可归约规范活前缀可归约规范活前缀 :归约规范活前缀:归约规范活前缀 Z

14、 ABb 规范前缀为规范前缀为 AB, ABb 规范活前缀规范活前缀: AB(不包含简单短语不包含简单短语) - 移入型规范活前移入型规范活前缀缀 ABb(包含一个简单短语包含一个简单短语) - 归约规范活前归约规范活前缀缀自底向上分析知识关系图规范归约规范归约推导推导(*)最右推导最右推导句型句型(S *) 短语短语(A + )简单短语简单短语(A )句柄句柄(最左最左)规范推导规范推导规范句型规范句型(S rm*)特特例例特特例例规范前缀规范前缀规范活前缀规范活前缀包含包含0或或1个个归约规范活前缀归约规范活前缀应用应用互互逆逆最右包最右包含含1个个自底向上自底向上分析分析5.1 自底向上

15、语法分析方法概述lLR 方法方法主要思想主要思想lL表示从表示从左至右读入输入串左至右读入输入串;lR表示构造一个最右推导的逆过程,即每表示构造一个最右推导的逆过程,即每次找到句柄次找到句柄 (归约规范活前缀归约规范活前缀)来进行归约来进行归约;l归约直到得到归约直到得到开始符开始符或报告语法错误或报告语法错误;关键问题关键问题: 对于一个对于一个CFG, 如何判定归约规范活如何判定归约规范活前缀前缀?l构造一个判定归约规范活前缀的自动机构造一个判定归约规范活前缀的自动机 - LR自动机自动机l由由LR自动机构造自动机构造LR分析表指导分析表指导LR分析分析LR 分析机制分析栈分析栈输入输入#aLR驱动程序驱动程序: - shift(移入移入) :移入型规范活前缀移入型规范活前缀 - reduce(归约归约):可归约规范活前缀可归约规范活前缀 LR分析表分析表规范规范活前活前缀缀5.1 自底向上语法分析方法概述lLR 方法方法不同的不同的 LR 方法方法lLR(0)lSLR(1)lLR(1)lLALR(1)不同的不同的LR方法对方法对CFG的要求不一样的要求不一样, 能够分析能够分析的的CFG多少也不一样多少也不一样, LR(0) SLR(1) LALR(1) LR(1)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号