编译原理张晶版 第四章 自上而下语法分析.ppt

编译原理张晶版 第四章 自上而下语法分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理张晶版 第四章 自上而下语法分析

第四章 自上而下 语法分析;第四章 自上而下语法分析 引言;4、语法分析的方式 1)自上而下语法分析 反复使用不同产生式进行推导以谋求与输入符号串相匹配 2)自下而上语法分析 对输入符号串寻找不同产生式进行归约直到文法开始符号 注:这里所说的输入符号串指词法分析所识别的单词;第二节 自上而下分析法的一般问题 二、一般方法;第二节 自上而下分析法的一般问题 三、不带回溯的自上而下分析算法;第二节 自上而下分析法的一般问题 三、不带回溯的自上而下分析算法;例1:文法G: (1) E E+T|T (2) T T*F|F (3) F (E)|I 消除左递归;例2:文法G:P PaPb| BaP 转化为:P BaPP’ ,P’ aPbP’|e 注:只有最左边的P参加变换;4、消除回溯 1)产生回溯的原因 进行推导时,若产生式存在多个候选式,选择哪个候选式进行推导存在不确定性。 2)消除回溯的基本原则 对文法的任何非终结符,若能根据当前读头下的符号,准确的选择一个候选式进行推导,那么回溯可以消除。 注:之所以会产生回溯是因为在推导匹配过程中存在虚假匹配。;4、消除回溯 3)消除回溯的方法 预测与提左因子 4)预测 根据读头下符号选择候选式,使其第一个符号与读头下符号相同,或该候选式可推导出的第一符号与读头下符号相同,这相当于向前看了一个符号,所以称为预测。 注:使用了预测之后,选择候选式不再是盲目的了,所以也就无需回溯;7)提取公共左因子 将某产生式 A δb1| δb2|……| δbn| δ 改写为 A δA’ A’ b1|b2|……..|bn|e 注:1)通过反复提取左因子,就能把所有非终结符的所有候选首符集变为两两不相交 2)反复提取左因子也有一定代价,因为在提取过程中会大量引入非终结符和e 产生式,增加语法分析的复杂性。;1、求串a的终结首符集First(a) a) 定义 假定a是文法G的一个符号串,a∈V*,则 First(a)={a|a a….,a∈VT} 注:1).若a e,那么e∈ First(a) 2). First(a)集合是a的所有可能推导出的开头终结符或 e所组成的集合 b) 算法 设a=X1X2…..Xn,其中Xi ∈(VN∪VT), 1≤i≤n,为了求a的 首符集, 分两步:首先求Xi的首符集,然后再求a的首符集;1、求串a的终结首符集First(a) b).算法 1)求出文法中每个文法符号的首符集 (1) 若x∈VT,则First(x)={x}; (2) 若X∈VN,且有产生式X a……,则将a加到First(X)中,若X e,则e也加入到First(X) ;1、求串a的终结首符集First(a) b).算法 1)求出文法中每个文法符号的首符集 (3) 若X Y1Y2…Yk,其中Yj∈(VN∪VT), 1≤j≤k,则按如下算法求First(X) j=0;First(X)={};//初始化 REPEAT j=j+1; FIRST(X)=FIRST(X) ∪(FIRST(Yj)-{e}) UNTIL e∈FIRST(Yj)或j=k IF (j=k 且e∈FIRST(Yk)) THEN FIRST(X)=FIRST(X) ∪{e};1、求串a的终结首符集First(a) b).算法 2) 求First(a) 设 a=X1X2….Xn,其中Xi ∈(VN∪VT), 1≤i≤n,则按如下算法求First(a) i=0; First(a)={};//初始化 REPEAT i=i+1; FIRST(a)=FIRST(a) ∪(FIRST(Xi)-{e}) UNTIL e∈FIRST(Xi)或 i=n IF (i=n 且e∈FIRST(Xn)) THEN FIRST(a)=FIRST(a) ∪{e} ;第三节 预测分析程序与LL(1)文法 二、求串a的终结首符集和非终结符A的随符集;2.求非终结符A的随符集Follow(A) a)定义 假定S是文法G的开始符号,对于G的任何非终结符A 定义 Follow(A)={a|S …..Aa…

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档