编译原理课件:Linux编程与应用课件:第4章 语法分析-自上而下分析4.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《编译原理课件:Linux编程与应用课件:第4章 语法分析-自上而下分析4.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理课件:Linux编程与应用课件:第4章 语法分析-自上而下分析4 编译 原理 课件 Linux 编程 应用 语法分析 自上而下 分析
- 资源描述:
-
1、编译原理第四章第四章 语法分析语法分析自上而下分析自上而下分析第四章第四章 语法分析语法分析自上而下分析自上而下分析n本章主要介绍本章主要介绍语法分析语法分析的处理的处理n要进行语法分析,必须对语言的要进行语法分析,必须对语言的语法结构语法结构进行描述。进行描述。采用采用正规式和有限自动机正规式和有限自动机可以描述和识别语言可以描述和识别语言的的单词符号单词符号;用用上下文无关文法上下文无关文法来描述来描述语法规则语法规则。n上下文无关文法上下文无关文法的定义:的定义: 一个上下文无关文法一个上下文无关文法G G是一个四元式是一个四元式 G=(VG=(VT T,V VN N,S S,P)P),
2、其中,其中V VT T:终结符终结符集合集合( (非空非空) )V VN N:非终结符非终结符集合集合( (非空非空) ),且,且V VT T V VN N= =S S:文法的:文法的开始符号开始符号,S S V VN NP P:产生式产生式集合集合( (有限有限) ),每个产生式形式为每个产生式形式为A A, A A V VN N, ( (V VT T V VN N) )* *开始符开始符S S至少必须在某个产生式的左部出现一次。至少必须在某个产生式的左部出现一次。n例,定义只含例,定义只含+,*的算术表达式的文法的算术表达式的文法 G=, 其其中,中,P由下列产生式组成:由下列产生式组成:
3、E iE E+EE E*EE (E)n如果如果 1 2 n,则我们称这个序,则我们称这个序列是从列是从 1到到 n的一个的一个推导推导。若存在一个从。若存在一个从 1到到 n的推导,则称的推导,则称 1可以可以推导推导出出 n 。n例:对文法例:对文法(1)E (E) (E+E) (i+E) (i+i)n通常,用通常,用 表示:从表示:从 1 1出发,经过出发,经过一步或若干步一步或若干步,可以推出,可以推出 n n。n1n*1 用用 表示:从表示:从 1 1出发,经过出发,经过0 0步或步或若干步若干步,可以推出,可以推出 n n。* 所以所以 : 即即 或或,|)(*TV SGLq定义:假
4、定定义:假定G G是一个文法,是一个文法,S S 是它的开始符号。是它的开始符号。如果如果 ,则,则 称是一个称是一个句型句型。仅含终结符。仅含终结符号的句型是一个号的句型是一个句子句子。文法。文法G G所产生的句子的全所产生的句子的全体是一个体是一个语言语言,将它记为,将它记为 L(G)L(G)。*S第四章第四章 语法分析语法分析自上而下分析自上而下分析n语法分析器的功能语法分析器的功能n自上而下分析面临的问题自上而下分析面临的问题nLL(1)LL(1)分析法分析法n递归下降分析程序构造递归下降分析程序构造n预测分析程序预测分析程序4.1 语法分析器的功能语法分析器的功能n语法分析的任务语法
5、分析的任务是分析一个文法的句子是分析一个文法的句子结构。结构。n语法分析器的功能语法分析器的功能:按照文法的产生式按照文法的产生式( (语言的语法规则语言的语法规则) ),识别输入符号串是,识别输入符号串是否为一个句子。否为一个句子。n这里所说的输入串是指由单词符号(文法的终结符)这里所说的输入串是指由单词符号(文法的终结符)组成的有限序列。组成的有限序列。n对一个文法,当给你一串符号时,怎样知道它是不是对一个文法,当给你一串符号时,怎样知道它是不是该文法的一个句子(程序)呢?该文法的一个句子(程序)呢?n这就要判断,这就要判断,源程序源程序单词符号单词符号取下一单词取下一单词.语法分语法分析
6、树析树词法分词法分析器析器语法分语法分析器析器符号表符号表编译程序编译程序后续部分后续部分n语法分析的方法语法分析的方法:自下而上分析法自下而上分析法(Bottom-up)(Bottom-up)n基本思想:从输入串开始,逐步进行基本思想:从输入串开始,逐步进行“归约归约”,直到文法的开始符号。即从树末端开始,构造直到文法的开始符号。即从树末端开始,构造语法树。语法树。所谓归约所谓归约,是指根据文法的产生式规,是指根据文法的产生式规则,把产生式的右部替换成左部符号。则,把产生式的右部替换成左部符号。n算符优先分析法:算符优先分析法:按照算符的优先关系和结合按照算符的优先关系和结合性质进行语法分析
7、。适合分析表达式。性质进行语法分析。适合分析表达式。nLRLR分析法:分析法:规范归约规范归约n语法分析的方法:语法分析的方法:n基本思想:基本思想:它从文法的开始符号出发,反复它从文法的开始符号出发,反复使用各种产生式,寻找使用各种产生式,寻找 匹配匹配 的的推导推导。n递归下降分析程序:递归下降分析程序:对每一语法变量对每一语法变量( (非终非终结符结符) )构造一个相应的子程序,每个子程序构造一个相应的子程序,每个子程序识别一定的语法单位;通过子程序间的相互识别一定的语法单位;通过子程序间的相互调用实现对输入串的识别。调用实现对输入串的识别。n预测分析程序预测分析程序F优点:直观、简单和
8、宜于手工实现。优点:直观、简单和宜于手工实现。第四章第四章 语法分析语法分析自上而下分析自上而下分析n语法分析器的功能语法分析器的功能n自上而下分析面临的问题自上而下分析面临的问题nLL(1)LL(1)分析法分析法n递归下降分析程序构造递归下降分析程序构造n预测分析程序预测分析程序4.2 自上而下分析面临的问题自上而下分析面临的问题n自上而下就是从文法的开始符号出发,向自上而下就是从文法的开始符号出发,向下下推导推导,推出句子。,推出句子。p对任何输入串,试图用一切可能的办法,对任何输入串,试图用一切可能的办法,从文法开始符号从文法开始符号(根结点根结点)出发,自上而下出发,自上而下地为输入串
9、建立一棵地为输入串建立一棵语法树语法树。p或者说,为输入串寻找一个最左推导。或者说,为输入串寻找一个最左推导。n例例3.4.1 假定有文法假定有文法G(S): (1) SxAy (2) A*|* 分析分析输入串输入串x*y(记为记为 )。Sx*yIPSx*yIPAxySx*yIPAxySx*yIPAxy*Sx*yIPAxy*Sx*yIPAxy*Sx*yIPAxy*(1 1)当某个非终结符有)当某个非终结符有多个产生式候选多个产生式候选时,时,在在分析过程中,当一个非终结符用某一个候选匹分析过程中,当一个非终结符用某一个候选匹配成功时,这种匹配可能是暂时的配成功时,这种匹配可能是暂时的。出错时出
10、错时,不得不不得不“回溯回溯”。(2 2)文法左递归问题:文法左递归问题:一个文法是含有左递归一个文法是含有左递归的,如果存在非终结符的,如果存在非终结符P PPP自上而下分析面临的问题自上而下分析面临的问题左递归左递归例:下面是描述算术表例:下面是描述算术表达式的算法达式的算法 S ES E EE+T|T EE+T|T TT TT* *F|FF|F F(E)|id F(E)|id 含有左递归的文法将使自上而下的分含有左递归的文法将使自上而下的分析陷入无限循环析陷入无限循环。为句子为句子idid* *id+idid+id构造分析树构造分析树 S S E E E + T E + T E + T
11、E + TE + TE + T:第四章第四章 语法分析语法分析自上而下分析自上而下分析n语法分析器的功能语法分析器的功能n自上而下分析面临的问题自上而下分析面临的问题nLL(1)LL(1)分析法分析法n递归下降分析程序构造递归下降分析程序构造n预测分析程序预测分析程序4.3 LL(1)分析法分析法n构造不带回溯的自上而下分析算法构造不带回溯的自上而下分析算法要消除文法的左递归性要消除文法的左递归性克服回溯克服回溯4.3.1 左递归的消除左递归的消除n直接消除见诸于产生式中的左递归:假直接消除见诸于产生式中的左递归:假定关于非终结符定关于非终结符P的规则为的规则为PP | 其中其中 不以不以P开
12、头开头。 我们可以把我们可以把P的规则等价地改写为如下的的规则等价地改写为如下的非直接左递归形式:非直接左递归形式:P P P P | 左递归变右递归PP P n一般而言,假定一般而言,假定P关于的全部产生式是关于的全部产生式是PP 1 | P 2 | | P m | 1 | 2| n其中,每个其中,每个 都不等于都不等于 ,每个,每个 都不以都不以P开头开头 那么,消除那么,消除P的直接左递归性就是把这些规的直接左递归性就是把这些规则改写成:则改写成: P 1P | 2P | | nP P 1P | 2P | | mP | 左递归变右递归4.3.1 左递归的消除左递归的消除n例例 文法文法G
13、(E):EET | TTT*F | FF(E) | i经消去直接左递归后变成:经消去直接左递归后变成: ETE E +TE | TFT T *FT | F(E) | i(4.2)PP 1 | P 2 | | P m | 1 | 2| nP 1P | 2P | | nP P 1P | 2P | | mP | n例如文法例如文法G(S):SQc|cQRb|bRSa|a (4.3)虽没有直接左递归,但虽没有直接左递归,但S、Q、R都是左递归的都是左递归的SQcRbcSabc消除一个文法的一切左递归的条件:消除一个文法的一切左递归的条件:(1)不含以)不含以 为右部的产生式为右部的产生式(但改写后的文
14、法可能但改写后的文法可能含以含以 为右部的产生式为右部的产生式)(2)不含回路)不含回路。PPn消除左递归的算法消除左递归的算法:1. 把文法把文法G的所有非终结符按任一种顺序排列成的所有非终结符按任一种顺序排列成P1,P2,Pn;按此顺序执行;按此顺序执行;2. FOR i:=1 TO n DO BEGIN FOR j:=1 TO i-1 DO 把形如把形如PiPj 的规则改写成的规则改写成 Pi 1 | 2 | k ; (其中其中Pj 1| 2| k是关于是关于Pj的所有规则的所有规则) 消除关于消除关于Pi规则的直接左递归性规则的直接左递归性 END3. 化简由化简由2所得的文法。去除那
15、些从开始符号出发永所得的文法。去除那些从开始符号出发永远无法到达的非终结符的产生规则。远无法到达的非终结符的产生规则。n例例 考虑文法考虑文法G(S)SQc|cQRb|bRSa|an令它的非终结符的排序为令它的非终结符的排序为R、Q、S。n对于对于R,不存在直接左递归。,不存在直接左递归。n把把R代入到代入到Q的有关候选后,把的有关候选后,把Q的规则的规则变为变为 QSab | ab | bn例例 考虑文法考虑文法G(S)SQc|cQRb|bRSa|an令它的非终结符的排序为令它的非终结符的排序为R、Q、S。nQ的规则变为的规则变为 QSab | ab | bn现在的现在的Q不含直接左递归,把
16、它代入到不含直接左递归,把它代入到S的有关候选后,的有关候选后,S变成变成SSabc | abc | bc | cn例例 考虑文法考虑文法G(S)SQc|cQRb|bRSa|anS变成变成SSabc | abc | bc | cn消除消除S的直接左递归后:的直接左递归后:SabcS | bcS | cS S abcS | QSab |ab | bRSa|an例例 考虑文法考虑文法G(S)SQc|cQRb|bRSa|an消除消除S的直接左递归后:的直接左递归后:SabcS | bcS | cS S abcS | QSab |ab | bRSa|an关于关于Q和和R的规则已是多余的,化简为:的规则
17、已是多余的,化简为:SabcS | bcS | cS S abcS | (4.4)n注意,由于对非终结符排序的不同,最注意,由于对非终结符排序的不同,最后所得的文法在形式上可能不一样。但后所得的文法在形式上可能不一样。但不难证明,它们都是等价的。不难证明,它们都是等价的。n例如,若对文法例如,若对文法(4.3)的非终结符排序选的非终结符排序选为为S、Q、R,那么,最后所得的无左递,那么,最后所得的无左递归文法是:归文法是:SQc | cQRb | bRbcaR | caR |a R (4.5)R bca R | n文法文法(4.4)和和(4.5)的等价性是显然的。的等价性是显然的。小结小结n自
18、上而下分析面临的问题自上而下分析面临的问题 文法的左递归性文法的左递归性 回溯回溯n消除文法的左递归消除文法的左递归 直接左递归的消除直接左递归的消除 间接左递归的消除间接左递归的消除4.3.2 消除回溯、提左因子消除回溯、提左因子n为了为了消除回溯消除回溯就必须保证:对文法的任就必须保证:对文法的任何非终结符,当要它去匹配输入串时,何非终结符,当要它去匹配输入串时,能够能够根据它所面临的输入符号根据它所面临的输入符号准确地指准确地指派派它的一个候选它的一个候选去执行任务,并且此候去执行任务,并且此候选的工作结果应是确信无疑的。选的工作结果应是确信无疑的。nA 1 | 2 | | nSa.IP
19、A.n令令G是一个不含左递归的文法,对是一个不含左递归的文法,对G的所的所有非终结符的每个候选有非终结符的每个候选 定义它的终结首定义它的终结首符集符集FIRST( )为:为:.,|=)(*TVaaaFIRST 特别是,若特别是,若 ,则规定,则规定FIRST( )。*如果非终结符如果非终结符A的所有候选首符集两两不相交,的所有候选首符集两两不相交,即即A的任何两个不同候选的任何两个不同候选 i和和 jFIRST( i)FIRST( j) 当要求当要求A匹配输入串时,匹配输入串时,A就能根据它所面临的就能根据它所面临的第一个输入符号第一个输入符号a,准确地指派某一个候选前去,准确地指派某一个候
20、选前去执行任务。这个候选就是那个终结首符集含执行任务。这个候选就是那个终结首符集含a的的 。n思考:思考: nFIRST( i)FIRST( j) 很好处理,但是很好处理,但是如果如果 的终结首符集有共同的部分怎么办?的终结首符集有共同的部分怎么办?nA 1 | 2 | | nn可提取其可提取其公共左因子公共左因子n提取公共左因子提取公共左因子: 假定关于假定关于A的规则是的规则是 A 1 | 2 | | n | 1 | 2 | | m (其中,每个其中,每个 不以不以 开头开头) 那么,可以把这些规则改写成那么,可以把这些规则改写成A A | 1 | 2 | | mA 1 | 2 | | n
21、n经过反复提取左因子,就能够把每个非终经过反复提取左因子,就能够把每个非终结符结符(包括新引进者包括新引进者)的所有候选首符集变的所有候选首符集变成为两两不相交。成为两两不相交。n ETE E +TE | TFT T *FT | F(E) | in i + i4.3.3 LL(1)分析条件分析条件n当一个文法当一个文法不含左不含左递归递归,并且满足每,并且满足每个非终结符的所有个非终结符的所有候选首符集两两不候选首符集两两不相交相交的条件,是不的条件,是不是就一定能进行有是就一定能进行有效的自上而下分析效的自上而下分析了呢?了呢?i + i IPEnG(E): ETE E +TE | TFT
22、T *FT | F(E) | ii + i IPETEnG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTnG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTinG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTinG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTi nG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTi +TEnG(E
23、): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTi +TEnG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTi +TEFTnG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTi +TEFTinG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTi +TEFTinG(E): ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTi +TEFTi nG(E):
24、ETE E +TE | TFT T *FT | F(E) | ii + i IPETEFTi +TEFTi nG(E): ETE E +TE | TFT T *FT | F(E) | in思考:思考:当非终结符当非终结符A面临输入符号面临输入符号a,且,且a不属于不属于A的任意候选的任意候选首符集,首符集,但但A的某个候选首符集包含的某个候选首符集包含 时,是否就一定可以使时,是否就一定可以使A自动匹配(自动匹配( A )呢?)呢?n需要做判断:需要做判断:有当有当a是是允许在文法的某个句型中允许在文法的某个句型中跟在跟在A后面的终结符后面的终结符时,才可能允许时,才可能允许A自动匹配,自动匹
25、配,否则,否则,a在这里的出现就是一个语法错误。在这里的出现就是一个语法错误。i + i IPETEFTi +TEFTi nG(E): ETE E +TE | TFT T *FT | F(E) | iS T+能否用能否用AA 自动匹配,需要判断自动匹配,需要判断当前输入符号当前输入符号是否在是否在紧跟在紧跟在A A后面的终结符集后面的终结符集FOLLOW(A)FOLLOW(A)中。中。n假定假定S是文法是文法G的开始符号,对于的开始符号,对于G的任何的任何非终结符非终结符A,我们定义,我们定义.,.|)(*TVaAaSaAFOLLOWAS*特别是,若特别是,若 ,则规定,则规定 FOLLOW(
展开阅读全文