复习—编译原理第4章课件.ppt
《复习—编译原理第4章课件.ppt》由会员分享,可在线阅读,更多相关《复习—编译原理第4章课件.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理1计算机学院计算机学院编 译 原 理 Compiler Principles任课教师:郑丽萍任课教师:郑丽萍2014201420152015第第第第2 2学期学期学期学期计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理2n句型分析:句型分析:就是识别一个符号串是否为某文法的句型,就是识别一个符号串是否为某文法的句型,是某个是某个推导(归约)推导(归约)推导(归约)推导(归约)的构造过程。的构造过程。n分析程序分析程序(识别程序识别程序):在语言的编译实现中,完成句型在语言的编译实现中,完成句型分析的
2、程序。分析的程序。n从左到右的分析算法:从左到右的分析算法:总是从总是从左左到到右右地识别输入符号地识别输入符号串,首先识别符号串中的串,首先识别符号串中的最左最左符号,进而符号,进而依次识别右边依次识别右边的的一个符号,直到分析结束。一个符号,直到分析结束。语法分析的方法语法分析的方法一、基本概念一、基本概念计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理3q自上而下分析法自上而下分析法从从文法的开始符号文法的开始符号出发出发,反复使用文法的,反复使用文法的产生式产生式,为,为待识别句子建立一个待识别句子建立一个最左推导最左推导,以寻找与,以寻找与输入符号串输入符号串
3、匹配匹配的的推导推导推导推导。q自下而上分析法自下而上分析法从从输入符号串输入符号串开始开始,逐步进行逐步进行归约归约,从,从叶子节点叶子节点,由,由底上向上底上向上逐步建立一棵完整的语法树,直至逐步建立一棵完整的语法树,直至归约归约归约归约到文法的到文法的开始符号(树根)。开始符号(树根)。二、语法分析的两种方法二、语法分析的两种方法计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理4自顶向下分析方法的基本缺点自顶向下分析方法的基本缺点自顶向下分析方法的基本缺点自顶向下分析方法的基本缺点不能处理具有左递归性的文法不能处理具有左递归性的文法不能处理具有左递归性的文法不能处
4、理具有左递归性的文法文法文法文法文法GG,存在,存在,存在,存在UUV VN N,ifU=U,ifU=U,则则则则GG为左递归文法为左递归文法为左递归文法为左递归文法+一、左递归文法一、左递归文法 左递归文法左递归文法左递归文法左递归文法 回溯问题回溯问题回溯问题回溯问题一般方法面临问题及解决一般方法面临问题及解决计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理5要实行自顶向下分析,必须要消除文法的左递归,不要实行自顶向下分析,必须要消除文法的左递归,不要实行自顶向下分析,必须要消除文法的左递归,不要实行自顶向下分析,必须要消除文法的左递归,不仅消除仅消除仅消除仅消除直
5、接左递归直接左递归直接左递归直接左递归,而且消除,而且消除,而且消除,而且消除间接左递归间接左递归间接左递归间接左递归。直接左递归直接左递归 若若 P P|、V*且且不以不以P开头开头 串的特点串的特点.间接左递归间接左递归 若若 P=P 例如:例如:SAa ASb|b *如果文法具有如果文法具有如果文法具有如果文法具有间接左递归间接左递归间接左递归间接左递归,则也将发生上述问题。,则也将发生上述问题。,则也将发生上述问题。,则也将发生上述问题。计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理6二、回溯问题二、回溯问题1 1什么是回溯什么是回溯什么是回溯什么是回溯?分析
6、工作要部分地或全部地退回去重做叫回溯。分析工作要部分地或全部地退回去重做叫回溯。严重的效率低,只有在理论上的意义而无实际意义严重的效率低,只有在理论上的意义而无实际意义。U:=U:=a a 1 1|a a 2 2|a a 3 32 2造成回溯的条件造成回溯的条件造成回溯的条件造成回溯的条件?3 3回溯带来的问题回溯带来的问题回溯带来的问题回溯带来的问题?文法中,对于某个非终结符号的规则其右部有多个选择,文法中,对于某个非终结符号的规则其右部有多个选择,并根据所面临的输入符号不能准确并根据所面临的输入符号不能准确的确定所要选择时,就可能的确定所要选择时,就可能出现回溯。出现回溯。计算机学院计算机
7、学院计算机学院计算机学院2023/1/4编译原理编译原理71)1)语法分析要重做语法分析要重做语法分析要重做语法分析要重做2)2)语法处理工作要推倒重来语法处理工作要推倒重来语法处理工作要推倒重来语法处理工作要推倒重来因此自顶向下的一般分析方法因此自顶向下的一般分析方法因此自顶向下的一般分析方法因此自顶向下的一般分析方法不能处理左递归不能处理左递归不能处理左递归不能处理左递归、复、复、复、复杂的杂的杂的杂的回溯技术回溯技术回溯技术回溯技术、回溯导致语义工作推倒重来、难以报告出、回溯导致语义工作推倒重来、难以报告出、回溯导致语义工作推倒重来、难以报告出、回溯导致语义工作推倒重来、难以报告出错的确
8、切位置、效率低。错的确切位置、效率低。错的确切位置、效率低。错的确切位置、效率低。欲采用此方法,必须:欲采用此方法,必须:欲采用此方法,必须:欲采用此方法,必须:1 1、消除左递归;、消除左递归;、消除左递归;、消除左递归;2 2、消除回溯、消除回溯、消除回溯、消除回溯4 4效率低的原因效率低的原因效率低的原因效率低的原因计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理8消除文法的左递归产生式消除文法的左递归产生式方法:方法:改写产生式,使产生式不含左递归。改写产生式,使产生式不含左递归。改写产生式,使产生式不含左递归。改写产生式,使产生式不含左递归。n法一:PP|产生
9、式的符号串为产生式的符号串为.引入一元语言符引入一元语言符号号,x表示表示x可出现任意次。可出现任意次。则:则:PP|改写为改写为P例例1:SAcAAa|b改为:改为:SAcAba一、消除直接左递归一、消除直接左递归例例2:EE+T|TTT*F|F消除左递归:消除左递归:ET+TTF*F计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理9n法二:对左递归对左递归 AA|的非终结符的非终结符A,引入一个新的非终,引入一个新的非终结符结符A,使得:,使得:AA|等价写成:等价写成:一般地:若一般地:若其中其中ii均不以均不以A A打头,则:打头,则:AAAA|计算机学院计算机
10、学院计算机学院计算机学院2023/1/4编译原理编译原理10i)i)已知已知已知已知 Uxy|xw|xzUxy|xw|xz解:解:解:解:Ux(y|w|z)Ux(y|w|z)得:得:得:得:UxUUxUUy|w|zUy|w|zii)ii)已知已知已知已知 Ux|xyUx|xy解:解:解:解:Ux(y|)Ux(y|)n法二步骤总结使用使用使用使用提因子法,提因子法,提因子法,提因子法,不仅有助于消除直接左递归。而且有不仅有助于消除直接左递归。而且有不仅有助于消除直接左递归。而且有不仅有助于消除直接左递归。而且有助于压缩文件的长度,使我们更加有效的分析句子。助于压缩文件的长度,使我们更加有效的分析
11、句子。助于压缩文件的长度,使我们更加有效的分析句子。助于压缩文件的长度,使我们更加有效的分析句子。Step1:提因子:提因子计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理11若:若:若:若:PPPP|则可改写为:则可改写为:则可改写为:则可改写为:PP PPPP P|P|例例EE+T|TTT*F|FF(E)|id消除左递归后文法消除左递归后文法 ETE E +TE|TFT T *F T|F(E)|id注意:注意:此方法只能消除出现在此方法只能消除出现在产生式的全部产生式的全部直接左递归直接左递归,不,不能消除经两步或多步推导所出能消除经两步或多步推导所出现的一切现的一
12、切间接左递归。间接左递归。Step1:将左递归规则改为右递归:将左递归规则改为右递归计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理12二、消除间接左递归二、消除间接左递归n1 间接左递归产生原因n产生式右边产生式右边首符号为非终结首符号为非终结符符;n(存在回路存在回路)前面非终结符引用前面非终结符引用后面非终结符,后面非终结后面非终结符,后面非终结符引用前面非终结符。符引用前面非终结符。例例1:SAc|c(1)ABb|b(2)BSa|a(3)对例对例1:lBSa|a带入带入(2),得,得ASab|ab|bl带入带入S产生式,得产生式,得SSabc|abc|bc|cl
13、对对对对S S消除直接左递归得:消除直接左递归得:消除直接左递归得:消除直接左递归得:S(abc|bc|c)SSabcS|n 2 消除方法n找出找出所有所有引用引用前面非终结符前面非终结符的的产生式进行代换,即先变换成产生式进行代换,即先变换成直直接左递归接左递归。计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理13一、消除回溯的途径 改写文法对具有多个候选式右部对具有多个候选式右部对具有多个候选式右部对具有多个候选式右部反复反复反复反复提取左因子,使其具有不同首符号提取左因子,使其具有不同首符号提取左因子,使其具有不同首符号提取左因子,使其具有不同首符号例例1UxV|
14、xWU,V,WVn,xVt改写为:改写为:Ux(V|W)更清楚表示更清楚表示UxZZV|W注意:注意:要进一步检查要进一步检查要进一步检查要进一步检查V V和和和和WW的首符号集是否相交,若相交,的首符号集是否相交,若相交,的首符号集是否相交,若相交,的首符号集是否相交,若相交,则要再次提取左因子。则要再次提取左因子。则要再次提取左因子。则要再次提取左因子。回溯的消除及回溯的消除及LL(1)LL(1)文法文法计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理14一般的,一般的,一般的,一般的,对于有公共左因子的文法对于有公共左因子的文法Aa 1|a 2|a k|,其中,其
15、中 不以不以a a开头,开头,aaV V。提左因子:提左因子:判断判断adeSaAadAade例:例:Ad|de|f改为:改为:AdA|f A|e A A a aA A|A A 1 1|2 2|k k若若 1 2 k还有某些候选式有相同首符号,则依次提取,还有某些候选式有相同首符号,则依次提取,直到每个候选式的首符号不同为止。直到每个候选式的首符号不同为止。注意:注意:注意:注意:提取公因子会引入大量非终结符和提取公因子会引入大量非终结符和产生式。产生式。回溯的消除及回溯的消除及LL(1)LL(1)文法文法计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理15n 1 定义
16、FIRST(X)=a|aFIRST(X)=a|aV VT T且且且且XXa a ,X X,V V*特别的:特别的:X X ,则则FIRST(X)FIRST(X)n对文法对文法G的所有非终结符的的所有非终结符的每个候选式每个候选式X其其首符号集首符号集为为FIRST(X)。n对对A的任何两个不同的选择的任何两个不同的选择 i和和 j,希望有,希望有FIRST(i)FIRST(j)=此时,当要求此时,当要求A匹配输入串时,匹配输入串时,A就可根据所面临第一个输入就可根据所面临第一个输入符号符号a,准确指派某个候选式推导,该候选式即为,准确指派某个候选式推导,该候选式即为aFIRST(X)的的X候选
17、式。候选式。二、FIRST集*回溯的消除及回溯的消除及LL(1)LL(1)文法文法计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理16n 2 FIRST(X)构造方法n1).若若X V,则,则FIRST(X)=X;n2).若若X VN,且有,且有Xa,则,则a FIRST(X);a可为可为;n3).若有若有XY1Y2YK,Yi V VN N(1iK),则,则(FIRST(Y1)FIRST(X);若若 FIRST(Y1),则,则(FIRST(Y2)FIRST(X);同样,若同样,若 FIRST(Yj)(1j A 且且aFRIST(),V*,V*l若若S=uA,且且=,则,
18、则#FOLLOW(A)三、FOLLOW集对文法对文法G的所有的所有含有含有含有含有 产生式产生式产生式产生式的的非终结符非终结符非终结符非终结符A A定义它的定义它的FOLLOW(A)。对含有对含有的的A的所有候选式的所有候选式 i,希望有,希望有FIRST(FIRST(i i )FOLLOW(AFOLLOW(A )=)=*计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理18l1).文法的开始符号文法的开始符号S,置,置#FOLLOW(S);当当AVN为句型的尾符号时,则为句型的尾符号时,则#FOLLOW(A)l2).对于对于BA,则,则(FIRST()FOLLOW(A
19、);l3).对于对于BA,或,或BA而而 FIRST(),则把则把FOLLOW(B)加至)加至FOLLOW(A)中。)中。l反复使用反复使用2、3步,直到每个非终结符的步,直到每个非终结符的FOLLOW集不再集不再增大为止。增大为止。n 2 FOLLOW(A)构造方法计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理19 四、LL(1)文法2 2、若、若、若、若=,=,则则则则FIRST(FIRST()FOLLOW(FOLLOW(A A)=)=*定理:定理:文法文法文法文法GG是是是是LL(1)LL(1)文法的文法的文法的文法的充分必要条件充分必要条件充分必要条件充分必要
20、条件是:对于是:对于是:对于是:对于GG的的的的 每一个非终结符每一个非终结符每一个非终结符每一个非终结符A A的任意两条规则的任意两条规则的任意两条规则的任意两条规则A A|,下列条件成立:下列条件成立:下列条件成立:下列条件成立:1 1、FIRST(FIRST()FIRST(FIRST()=)=计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理201 LL(1)含义:L:从左至右顺序扫描输入串;从左至右顺序扫描输入串;L:按最左推导方式;按最左推导方式;1:每一次推导均向前查看一个输入符号准确指派产生式。每一次推导均向前查看一个输入符号准确指派产生式。2 LL(1)文
21、法性质:没有公共左因子;没有公共左因子;无二义性;无二义性;不含左递归。不含左递归。对对LL(1)文法,可构造一个无回溯自顶向下语法分析程序,方法为:文法,可构造一个无回溯自顶向下语法分析程序,方法为:q预测分析法(LL(1)分析法)计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理21LL(1)分析方法是一种比递归子程序法更有效的自顶向下分析分析方法是一种比递归子程序法更有效的自顶向下分析方法。方法。LL(1)分析使用一个下推栈而不是递归调用来完成分析。分析使用一个下推栈而不是递归调用来完成分析。名称中第一个名称中第一个L表示自左向右顺序扫描输入符号串,第二个表示自左向
22、右顺序扫描输入符号串,第二个L表示分析过程产生一个句子的最左推导。表示分析过程产生一个句子的最左推导。括号中的括号中的1表示每进行一步推导,只需要向前查看一个输入符表示每进行一步推导,只需要向前查看一个输入符号,便能确定当前所应选用的规则。号,便能确定当前所应选用的规则。预测分析法预测分析法计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理22LL(1)分析器由一个总控程序(表驱动程序)、一张分析表(预分析器由一个总控程序(表驱动程序)、一张分析表(预测分析表、测分析表、LL(1)分析表)和一个分析栈组成。分析表)和一个分析栈组成。输入符号串:分析栈a1a2an#XZS#
23、LL(1)总控程序分析表输出流栈中存放文法的栈中存放文法的符号串,栈底符符号串,栈底符号是号是#待分析串,从待分析串,从左到右扫描左到右扫描是一个两维数组是一个两维数组MA,a,A是非是非终结符,终结符,a是终是终结符或结符或#LL(1)LL(1)分析的基本方法分析的基本方法计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理23输入符号串输入符号串:指要分析的输入符号串,它以右界符指要分析的输入符号串,它以右界符#作为结尾。作为结尾。分析栈:用来存放一系列文法符号。分析开始时,先将分析栈:用来存放一系列文法符号。分析开始时,先将#入栈,入栈,然后再将文法的开始符号入栈。然
24、后再将文法的开始符号入栈。输出流:分析过程中使用的产生式序列。输出流:分析过程中使用的产生式序列。总控程序:分析器对输入串的分析靠总控程序完成总控程序:分析器对输入串的分析靠总控程序完成.根据分析栈根据分析栈的栈顶符号的栈顶符号X和当前的输入符号和当前的输入符号a,总控程序按照分析表的指示,总控程序按照分析表的指示来决定分析器的动作。工作过程如下:来决定分析器的动作。工作过程如下:计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理24第一步第一步 初始化初始化:分析开始时,首先将符号分析开始时,首先将符号#及文法的开始符号及文法的开始符号S S依次置于分析栈的底部,并把各
25、指示器调整至起始位置,如图依次置于分析栈的底部,并把各指示器调整至起始位置,如图1 1所示。然后,反复执行第二步的操作。所示。然后,反复执行第二步的操作。输入符号串:输入符号串:a1a2an#分析栈:分析栈:S#图图1 1 分析开始时状况分析开始时状况 第二步第二步 假设分析的某一步,分析栈及余留的符号串如图假设分析的某一步,分析栈及余留的符号串如图2 2:a iai+1 an#X1X2Xm-1Xm 图图2 2 分析进行中的状况分析进行中的状况 计算机学院计算机学院计算机学院计算机学院2023/1/4编译原理编译原理25(1)(1)若若X X m mVV n n,则查分析表的,则查分析表的X
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复习 编译 原理 课件
限制150内