编译原理课件:Linux编程与应用课件:第5章 语法分析-自下而上分析8.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《编译原理课件:Linux编程与应用课件:第5章 语法分析-自下而上分析8.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理课件:Linux编程与应用课件:第5章 语法分析-自下而上分析8 编译 原理 课件 Linux 编程 应用 语法分析 自下而上 分析
- 资源描述:
-
1、第五章第五章 语法分析语法分析自下而上分析自下而上分析语法分析方法:语法分析方法:n自上而下分析法自上而下分析法(Top-down)(Top-down)n自下而上分析法自下而上分析法(Bottom-up)(Bottom-up)n基本思想基本思想 它从文法的开始符号出发,反复使用各种产生它从文法的开始符号出发,反复使用各种产生式,寻找式,寻找 匹配匹配 的的推导推导。n递归下降分析法递归下降分析法 对每一语法变量对每一语法变量( (非终结符非终结符) )构造一个相应的子构造一个相应的子程序,每个子程序识别一定的语法单位,通过程序,每个子程序识别一定的语法单位,通过子程序间的相互调用实现对输入串的
2、识别。子程序间的相互调用实现对输入串的识别。n预测分析程序预测分析程序F非递归实现非递归实现F优点:直观、简单和宜于手工实现。优点:直观、简单和宜于手工实现。n基本思想基本思想 从输入串开始,逐步进行从输入串开始,逐步进行“归约归约”,直到文,直到文法的开始符号。即从树末端开始,构造语法树。法的开始符号。即从树末端开始,构造语法树。所谓归约,是指根据文法的产生式规则,把产所谓归约,是指根据文法的产生式规则,把产生式的右部替换成左部符号。生式的右部替换成左部符号。n算符优先分析法算符优先分析法 按照算符的优先关系和结合性质进行语法分析。按照算符的优先关系和结合性质进行语法分析。适合分析表达式。适
3、合分析表达式。nLRLR分析法分析法 规范归约规范归约G(E): E i| E+E | E-E | E*E | E/E | (E) i*i+i E*i+i E*E+i E+i E+E Ei+ +* *EiiEEEE第五章第五章 语法分析语法分析自下而上分析自下而上分析n自下而上分析的基本问题自下而上分析的基本问题n算符优选分析算法算符优选分析算法nLRLR分析法分析法一、自下而上分析的基本问题一、自下而上分析的基本问题n采用采用“”思想进行自下而上分析。思想进行自下而上分析。n基本思想基本思想 用一个寄存符号的先进后出用一个寄存符号的先进后出,把输入符号,把输入符号一个一个地移进到栈里,一个一
4、个地移进到栈里,当栈顶形成某个产当栈顶形成某个产生式的候选式生式的候选式时,即把栈顶的这一部分替换时,即把栈顶的这一部分替换成成( (归约归约为为) )该产生式的该产生式的左部符号左部符号。n例:例:设文法设文法G(S): (1) S aAcBe (2) A b (3) A Ab (4) B d试对试对abbcdeabbcde进行进行“移进归约移进归约”分析。分析。a bbcdeba bcdeAa bcdebAa cdeAa cdecAa dedcAa eabbcdeeBcAa S BcAa e步步骤骤: :1 12 23 34 45 56 67 78 89 91 10 0动动作作: : 进进
5、a a进进b b 归归( (2 2) ) 进进b b 归归( (3 3) ) 进进c c进进d d 归归( (4 4) ) 进进e e 归归( (1 1) )e ed dB BB Bb bc cc cc cc cb bA AA AA AA AA AA AA Aa aa aa aa aa aa aa aa aa aS SbdbaceSABA自下而上分析过程:边输入单词符号,边自下而上分析过程:边输入单词符号,边归约。归约。核心问题:识别可归约串核心问题:识别可归约串NNPVPSDETThe teacherVpraisedNNPDETthe studentn定义:令定义:令G G是一个文法,是一个
6、文法,S S是文法的开始符号,假是文法的开始符号,假定定是文法是文法G G的一个句型,如果有的一个句型,如果有 且且 AS*A则则 称是句型称是句型相对于非终结符相对于非终结符A A的的短语短语。特别是,如果有特别是,如果有A A, ,则称则称 是句型是句型相对于规相对于规则则A A 的的直接短语直接短语。一个句型的。一个句型的最左直接短语最左直接短语称为该句型的称为该句型的句柄句柄。n定义:令定义:令G G是一个文法,是一个文法,S S是文法的开始符号,假是文法的开始符号,假定定是文法是文法G G的一个句型,如果有的一个句型,如果有 且且 AS*A则则 称是句型称是句型相对于非终结符相对于非
7、终结符A A的的短语短语。考虑文法考虑文法G(E): E T | E+T T F | T*F F (E) | i和和句型句型i1*i2+i3:E E+T E+F E+i3 T+i3 T*F+i3 T*i2+i3 F*i2+i3 i1*i2+i3 * +E F*i2+i3 F i1 i1*i2+i3 短短 语:语: i1E i1 *F+i3 F i2 i1*i2+i3 短短 语:语: i2E i1*i2+F F i3 i1*i2+i3 短短 语:语: i3E E+ i3 E i1*i2 i1*i2+i3 短短 语:语: i1*i2 E E E i1*i2+i3 i1*i2+i3 短短 语:语:i
8、1*i2+i3 G(E): E T | E+T T F | T*F F (E) | iE E+T E+F E+i3 T+i3 T*F+i3 T*i2+i3 F*i2+i3 i1*i2+i3考虑文法考虑文法G(E): E T | E+T T F | T*F F (E) | i和句型和句型i1*i2+i3:E E+T E+F E+i3 T+i3 T*F+i3 T*i2+i3 F*i2+i3 i1*i2+i3n短语:短语: i1,i2,i3, i1*i2, i1*i2+i3n直接短语:直接短语: i1,i2,i3n句柄:句柄: i1n在一个句型对应的语法在一个句型对应的语法树中:树中:p以某非终结符
9、为根的以某非终结符为根的两代以两代以上的子树的所有末端结点从上的子树的所有末端结点从左到右排列左到右排列就是相对于该非就是相对于该非终结符的一个终结符的一个短语短语p如果如果子树只有两代子树只有两代,则该短,则该短语就是语就是直接短语直接短语。EFFTTTi1+*EFi3i2n可用句柄来对句子进行归约可用句柄来对句子进行归约句型句型 归约规则归约规则abbcde (2) A bbdbaceSABAn可用句柄来对句子进行归约可用句柄来对句子进行归约句型句型 归约规则归约规则abbcde (2) A baAbcde (3) A AbdbaceSABAn可用句柄来对句子进行归约可用句柄来对句子进行归
10、约句型句型 归约规则归约规则abbcde (2) A baAbcde (3) A AbaAcde (4) B ddaceSABn可用句柄来对句子进行归约可用句柄来对句子进行归约句型句型 归约规则归约规则abbcde (2) A baAbcde (3) A AbaAcde (4) B daAcBe (1) S aAcBe SaceSABn定义:假定定义:假定 是文法是文法G的一个句子,我们的一个句子,我们称序列称序列 n, n-1, , 0 是一个是一个规范归约规范归约,如果此序列满足:,如果此序列满足: 1 n= 为为句子句子 2 0为文法的为文法的开始符号开始符号,即,即 0=S 3 对任何
11、对任何i,0 i n, i-1是从是从 i经把经把句柄句柄替换成为替换成为相应产生式左部符号相应产生式左部符号而得到的。而得到的。把上例倒过来写,则得到:把上例倒过来写,则得到:S S aAcBeaAcBe aAcde aAcde aAbcde aAbcde a abbcde bbcde 显然这是一个最右推导。显然这是一个最右推导。规范归约规范归约是是最右推导最右推导的逆过程的逆过程最左归约最左归约 规范推导规范推导由规范推导推出的句型称为由规范推导推出的句型称为规范句型规范句型。bdbaceSABAdbaceSABAdaceSABaceSABS符号栈的使用符号栈的使用n栈栈是语法分析的一种基
12、本数据结构。是语法分析的一种基本数据结构。# #作为栈底符作为栈底符号号n自下而上的语法分析器的工作过程是:自下而上的语法分析器的工作过程是:自左至右把自左至右把输入串的符号一一移进符号栈里,一旦发现栈顶出输入串的符号一一移进符号栈里,一旦发现栈顶出现现可归约串可归约串就归约,这种替换可能出现多次,直至就归约,这种替换可能出现多次,直至栈顶不再出现栈顶不再出现可归约串可归约串为止。然后继续移进符号,为止。然后继续移进符号,重复整个过程,直至栈里只含有重复整个过程,直至栈里只含有#和文法开始符号和文法开始符号、且输入串全被吸收,仅剩下且输入串全被吸收,仅剩下#。这种格局表示分析成。这种格局表示分
13、析成功,否则,就说明输入串有语法错误功,否则,就说明输入串有语法错误符号栈的使用符号栈的使用n例:文法例:文法G(E): E T | E+T T F | T*F F (E) | i输入串为输入串为i1*i2+i3 ,分析步骤为:,分析步骤为:步骤步骤 符号栈符号栈输入串输入串动作动作0 #i1*i2+i3#预备预备1 #i1*i2+i3#进进2 #F*i2+i3#归,用归,用Fi3 #T*i2+i3#归,用归,用TF4 #T*i2+i3#进进nG(E): E T | E+T T F | T*F F (E) | i步骤步骤 符号栈符号栈输入串输入串动作动作4 #T*i2+i3#进进5 #T*i2
14、+i3#进进6 #T*F+i3#归,用归,用Fi7 #T+i3#归,用归,用TT*F8 #E+i3# 归,用归,用ET9 #E+i3# 进进nG(E): E T | E+T T F | T*F F (E) | i步骤步骤 符号栈符号栈输入串输入串动作动作9 #E+ i3#进进10#E+i3#进进11#E+F#归,用归,用Fi12#E+T#归,用归,用TF13#E#归,用归,用EE+T14#E#接受接受nG(E): E T | E+T T F | T*F F (E) | in语法分析的方法:语法分析的方法:自下而上分析法自下而上分析法(Bottom-up)(Bottom-up) 基本思想:从输入
15、串开始,逐步进行基本思想:从输入串开始,逐步进行“归约归约”,直到文法的开始符号。即从树末端开始,构造语直到文法的开始符号。即从树末端开始,构造语法树。所谓法树。所谓 归约归约 ,是指根据文法的产生式规,是指根据文法的产生式规则,把产生式的右部替换成左部符号。则,把产生式的右部替换成左部符号。 回顾回顾归约归约n采用采用“移进归约移进归约”思想进行自下而上分析。思想进行自下而上分析。n基本思想:用一个寄存符号的先进后出基本思想:用一个寄存符号的先进后出栈栈,把输,把输入符号一个一个地移进到栈里,当栈顶形成某个入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成产
16、生式的候选式时,即把栈顶的这一部分替换成( (归约归约为为) )该产生式的左部符号。该产生式的左部符号。规范归约规范归约n定义:令定义:令G G是一个文法,是一个文法,S S是文法的开始符是文法的开始符号,假定号,假定是文法是文法G G的一个句型,如果有的一个句型,如果有 且且 AS*A则则 称是句型称是句型相对于非终结符相对于非终结符A A的的短语短语。特别是,如果有特别是,如果有A A, ,则称则称 是句型是句型相对相对于规则于规则A A 的的直接短语直接短语。一个句型的最左。一个句型的最左直接短语称为该句型的直接短语称为该句型的句柄句柄。n定义:假定定义:假定 是文法是文法G的一个句子,
17、我们的一个句子,我们称序列称序列 n, n-1, , 0 是的一个是的一个规范归约规范归约,如果此序列满足:,如果此序列满足: 1 n= 2 0为文法的开始符号,即为文法的开始符号,即 0=S 3 对任何对任何i,0 i n, i-1是从是从 i经把经把句句柄柄替换成为相应产生式左部符号而得到替换成为相应产生式左部符号而得到的。的。第五章第五章 语法分析语法分析自下而上分析自下而上分析n自下而上分析的基本问题自下而上分析的基本问题n算符优选分析算法算符优选分析算法nLRLR分析法分析法 二、算符优先分析二、算符优先分析n四则运算的优先规则:四则运算的优先规则: 先乘除后加减,同级从左到右先乘除
18、后加减,同级从左到右n考虑二义文法文法考虑二义文法文法G(E):G(E): E i| E+E|E-E|E*E|E/E|(E)n它的句子有几种它的句子有几种不同的规范规约不同的规范规约。n归约即计算表达式的值。归约顺序不同,归约即计算表达式的值。归约顺序不同,则计算的顺序也不同,结果也不一样。则计算的顺序也不同,结果也不一样。n如果规定算符的优先次序如果规定算符的优先次序,并按这种规定,并按这种规定进行归约,则归约过程是进行归约,则归约过程是唯一唯一的。的。例如:句子例如:句子i+i-ii+i-i* *(i+i)(i+i)Ei( () )i* *EiEE+ +EEE-ii+ +EEEG(E):
19、E i| E+E|E-E|E*E|E/E|(E)Ei( () )i* *EiEE+ +EEE-ii+ +EEE返回G(E): E i| E+E|E-E|E*E|E/E|(E)句子句子i+i-i*(i+i)的归约过程是:的归约过程是:(1) i+i-i*(i+i)(2) E+i-i*(i+i)(3) E+E-i*(i+i)(4) E-i*(i+i)(5) E-E*(i+i)(6) E-E*(E+i)(7) E-E*(E+E)(8) E-E*(E)(9) E-E*E(10) E-E(11) EG(E): E i| E+E|E-E|E*E|E/E|(E)句子句子i+i-i*(i+i)的归约过程是:的
20、归约过程是:(1) i+i-i*(i+i)(2) F+i-i*(i+i)(3) T+i-i*(i+i)(4) E+i-i*(i+i)(5) E+F-i*(i+i)(6) E+T-i*(i+i)(7) E-i*(i+i)(8) E-F*(i+i)(9) E-T*(i+i)(10) E-T*(F+i)(11) E-T*(T+i)(12) E-T*(E+i)(13) E-T*(E+F)(14) E-T*(E+T)(15) E-T*(E)(16) E-T*F(17) E-T(18) E无二义文法:无二义文法:G(E): E T |E+T|E-T T F |T*F|T/F F (E)|i G(E): E
21、 i| E+E|E-E|E*E|E/E|(E)n起决定作用的是起决定作用的是相邻的两个算符(终结符)相邻的两个算符(终结符)之间的之间的优先关系优先关系。n所谓所谓算符优先分析法算符优先分析法就是定义就是定义算符(终结符)算符(终结符)之间的某种之间的某种优先关系优先关系,借助于这种关系寻找,借助于这种关系寻找“可归约串可归约串”和进行归约和进行归约。算符优先分析的基本思想算符优先分析的基本思想n定义任何两个可能相继出现的终结符定义任何两个可能相继出现的终结符a a与与b b的的三种优先关系三种优先关系 a b a a b a的优先级的优先级低于低于b b a b a a b a的优先级的优先
22、级等于等于b b a b a a b a的优先级的优先级高于高于b bn注意:与数学上的注意:与数学上的=不同不同 + + (先归约右边的(先归约右边的+) a ba b并不意味着并不意味着b ab a,如,如 ( + 和和 + ( 优先关系优先关系算符优先文法算符优先文法及及优先表优先表构造构造n一个文法,如果它的任一产生式的右部都一个文法,如果它的任一产生式的右部都不含两个相继不含两个相继(并列并列)的非终结符,即不含的非终结符,即不含如下形式的产生式右部:如下形式的产生式右部:QR 则我们称该文法为则我们称该文法为算符文法算符文法。n约定:约定:a、b代表任意终结符;代表任意终结符;P、
23、Q、R代表任意非终结符;代表任意非终结符;代表由终结符和非终结符组成的任意序代表由终结符和非终结符组成的任意序列,包括空字。列,包括空字。n假定假定G是一个不含是一个不含 -产生式的算符文法。产生式的算符文法。对于任何一对终结符对于任何一对终结符a、b,我们说:,我们说:1. a b,当且仅当文法,当且仅当文法G中含有形如中含有形如Pab或或PaQb的产生式;的产生式;2. a b,当且仅当,当且仅当G中含有形如中含有形如PaR的产生式,的产生式, 而而R b或或R Qb;3. a b ,当且仅当,当且仅当G中含有形如中含有形如PRb的产生式,而的产生式,而 R a或或R aQ。n如果一个算符
24、文法如果一个算符文法G中的任何终结符对中的任何终结符对(a,b)至多只满足下述三关系之一:至多只满足下述三关系之一: a b,a b, a b 则称则称G是一个算符优先文法。是一个算符优先文法。G(E): E i| E+E|E-E|E*E|E/E|(E)不是一个算符优先文法不是一个算符优先文法G(E): E T |E+T|E-T T F |T*F|T/F F (E)|i 是一个算符优先文法是一个算符优先文法 n例例:考虑下面的文法考虑下面的文法G(E): (1) EE+T | T (2) TT*F | F (3) FP F | P (4) P(E) | in由规则由规则(4)P(E) ,有,有
25、 ( );n由规则由规则(1)EET和和(2)TT*F, 有有 *;n由由(2) TT*F 和和(3) FP F ,可得,可得* ;n由由(1)EE + T和和E E+T,可得,可得+ +;n由由(3)FP F和和F P F,可得,可得。n由由(4)P(E)和和 EE+TT+TT*F+TF*F+TPF*F+TiF*F+T 有有 ( + ( * ( ( i。n 优先关系表优先关系表+*i()#+*i()#n从算符优先文法从算符优先文法G构造优先关系表的算法构造优先关系表的算法。n通过检查通过检查G的每个产生式的每个候选式,可的每个产生式的每个候选式,可找出所有满足找出所有满足a b的终结符对。的
展开阅读全文