【精品】【考研计算机专业课】天津大学 编译原理讲义 自上而下3.2-3.4精品ppt课件.ppt
《【精品】【考研计算机专业课】天津大学 编译原理讲义 自上而下3.2-3.4精品ppt课件.ppt》由会员分享,可在线阅读,更多相关《【精品】【考研计算机专业课】天津大学 编译原理讲义 自上而下3.2-3.4精品ppt课件.ppt(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【考研计算机专业课】天津大学 编译原理讲义 自上而下3.2-3.43.2自上而下分析自上而下分析自上而下分析方法自上而下分析方法:是从文法的根符号开始,自顶向下的是从文法的根符号开始,自顶向下的进行句型推导,推导的每一步都谋求进行句型推导,推导的每一步都谋求“匹配匹配”输入串的现输入串的现行输入符号。行输入符号。设现行输入符号是设现行输入符号是“a”“a”,当前分析的句型是,当前分析的句型是xAy,AVN,x,yVT,设设A有两个候选式,即有两个候选式,即A1 1|2 2,若有,若有1 1aa和和2 2bb,且,且abab。此时,则确定侯选式。此时,则确定侯选式1 1和输入串和输入串“相匹配相
2、匹配”。若句型的每一步都和输入串的现行输入符号若句型的每一步都和输入串的现行输入符号“相匹配相匹配”,且句型的所有符号都是终极符,则确定所给输入串是给定且句型的所有符号都是终极符,则确定所给输入串是给定文法的文法的句子句子。例例:文法文法G=(S,A,x,y,z,G=(S,A,x,y,z,*,SxAy,Sz,A,SxAy,Sz,A*,A,A*,S),S)输入串为输入串为x x*y y,采用自采用自上上向下的分析方法向下的分析方法:(1)根符号根符号S S有两个侯选式有两个侯选式“xAy”“xAy”和和“z”“z”,显然,显然,侯选式侯选式“xAy”“xAy”与输入串与输入串“x“x*y”y”相
3、匹配相匹配,故作句故作句型推导型推导:S:SxAyxAy。SxAy(2)当前句型当前句型“xAy”中中A也有两个侯选式也有两个侯选式“*”和和“*”,首先选用,首先选用“*”对句型进行推导,则得对句型进行推导,则得 Sx*y,但第三个符号,但第三个符号“*”与输入串第三个符号与输入串第三个符号“y”“y”不相匹配。不相匹配。*(3)推导回溯到句型推导回溯到句型“xAy”,非终极符,非终极符A选第二选第二个侯选式个侯选式“*”进行推导,即进行推导,即:SxAyx*y,推,推导的结果与输入串全部相匹,且都是终极符,从导的结果与输入串全部相匹,且都是终极符,从而判定输入串而判定输入串“x*y”是所给
4、文法的句子。是所给文法的句子。*自顶向下分析存在的问题自顶向下分析存在的问题2.回溯问题回溯问题:对某个非终结符,当有多条规则时,需采用逐个选对某个非终结符,当有多条规则时,需采用逐个选择的方法,若不能匹配需要回溯。择的方法,若不能匹配需要回溯。3.当最终报告分析不成功时,我们难于知道输入串中出错的确切当最终报告分析不成功时,我们难于知道输入串中出错的确切位置。位置。总之总之:由于带回溯的自上而下分析实际上采用了一种穷尽一切可由于带回溯的自上而下分析实际上采用了一种穷尽一切可能的能的试探法试探法,因此,效率很低,代价极高。严重的低效使得这种,因此,效率很低,代价极高。严重的低效使得这种分析方法
5、只具有理论价值。分析方法只具有理论价值。1.左递归问题左递归问题:一个文法是含有左递归的,如果存在非终结符一个文法是含有左递归的,如果存在非终结符P(PP)含有左递归的文法将使上述的自上而下的分析过程陷入含有左递归的文法将使上述的自上而下的分析过程陷入无限循环。即,当试图用无限循环。即,当试图用P去匹配输入串时,我们会发现,在没去匹配输入串时,我们会发现,在没有吃进任何输入符的情况下,又得重新要求有吃进任何输入符的情况下,又得重新要求P去进行新的匹配。去进行新的匹配。+1.左递归的消除左递归的消除(1)直接左递归直接左递归的消除的消除设文法的产生式设文法的产生式PP|P|PPP P P PP|
6、消除左递归变为消除左递归变为EE+T|TTT*F|FF(E)|iF(E)|i例例,设文法,设文法消除直接左消除直接左递归后变为递归后变为ETEE+TE|TFTT*FT|F(E)|iF(E)|i消除关于消除关于Ai规则的直接左递归;规则的直接左递归;把行如把行如AiAj的规则改成的规则改成Ai1|2|k其中其中Aj1|2|k是关于是关于Aj的所有规则;的所有规则;for(j=1;j=i-1;j+)for(i=1;i=n;i+)化简所得的文法(去掉无用产生式)化简所得的文法(去掉无用产生式)首先给文法首先给文法VN中的符号一个排序中的符号一个排序:A1,A2,An例例,文法,文法G:SQc|cQR
7、b|bRSa|aSa|a设文法的非终极符若按设文法的非终极符若按R、Q、S排序排序执行算法得执行算法得iv消除直接左递归得消除直接左递归得SabcS|bcS|cSSabcS|SabcS|bcS|cSSabcS|QSab|ab|bRSa|a化简化简SabcS|bcS|cSSabcS|iiiSSabc|abc|bc|ciiQSab|ab|biRSa|a消除左递归算法与非终极符排序方法无关。消除左递归算法与非终极符排序方法无关。文法的非终极符若按文法的非终极符若按S、Q、R排序排序执行算法得执行算法得iv消除直接左递归得消除直接左递归得RbcaR|caR|aRRbcaR|SQc|cQRb|bRbca
8、R|caR|aRRbcaR|例例,文法,文法G:SQc|cQRb|bRSa|aSa|aiSQc|ciiQRb|biiiRQca|ca|aRbca|b|bca|ca|a若文法含有回路,上述消除左递归的算法无法解决。若文法含有回路,上述消除左递归的算法无法解决。例例,如下文法,如下文法:SQ|cQR|bRS|a|aSaS|bS|cSSS|iRS|aiiQR|biiiSQ|cS|a|b|b|civ消除直接左递归得消除直接左递归得SaS|bS|cS SS|S|a|a|b2.提取左公因子提取左公因子,消除回溯,消除回溯为了消除回溯就必须保证为了消除回溯就必须保证:(1)对文法的任意非终结符,当要它去匹配
9、输入串对文法的任意非终结符,当要它去匹配输入串时,能够根据它所面临的输入符号准确的指派它的时,能够根据它所面临的输入符号准确的指派它的一个候选去执行任务,并且此候选的工作结果应是一个候选去执行任务,并且此候选的工作结果应是确信无疑的。确信无疑的。(2)若此候选获得成功匹配,那么,这种匹配决不若此候选获得成功匹配,那么,这种匹配决不是虚假的;若此候选无法完成匹配任务,则任何其是虚假的;若此候选无法完成匹配任务,则任何其他候选也肯定无法完成。他候选也肯定无法完成。不带回溯的文法具有如下性质不带回溯的文法具有如下性质:首先对文法的所有非终结符的每个首先对文法的所有非终结符的每个候选候选定义一个定义一
10、个集合集合FIRST(),终结首符集终结首符集。FIRST()=a|a,aVT*我们可以考虑一下,如果非终结符我们可以考虑一下,如果非终结符A的所有候选首符集的所有候选首符集两两不相交,即两两不相交,即A的任何两个不同候选的任何两个不同候选A1 1和和A2 2FIRST(1 1)FIRST(2 2)=那么,当要求那么,当要求A匹配输入串时,匹配输入串时,A就能根据它所面临的第就能根据它所面临的第一个输入符号,准确的指派某一个候选前去执行任务。一个输入符号,准确的指派某一个候选前去执行任务。a a1 1,b,b1 1,c,c1 1FIRST(1 1),a a2 2,b,b2 2,c,c2 2FI
11、RST(2 2)实际中,文法候选的终结首符集并不是两两不相交的。实际中,文法候选的终结首符集并不是两两不相交的。例例,SifBthenS1elseS2|ifBthenS1提取公共左因子提取公共左因子A1|2|n改写成改写成:AAAAA1|2|n3.3递归下降分析器递归下降分析器在不含在不含左递归左递归且每个非终结符的所有且每个非终结符的所有候选终结首符候选终结首符集都两两不相交集都两两不相交的条件下,我们就可能构造一个不的条件下,我们就可能构造一个不带回溯的自上而下分析程序,这个分析程序是由一带回溯的自上而下分析程序,这个分析程序是由一组组递归过程递归过程组成的,每个过程对应文法的一个非终组成
12、的,每个过程对应文法的一个非终结符。这样的一个分析程序称为结符。这样的一个分析程序称为递归下降分析器递归下降分析器。EE+T|TTT*F|FF(E)|i例例,消除左递归消除左递归提取左公因子提取左公因子ETEE+TE|TFTT*FT|F(E)|i程序结构示意图程序结构示意图:递归下降分析器递归下降分析器voidE(void)T();E();voidE(void)T();E();if(sym=+)advance();sym存放当前读来的输入符号;存放当前读来的输入符号;advance()advance()将读输入符将读输入符指针下移一个字符位置,且读出指针所指的字符,存指针下移一个字符位置,且读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 考研计算机专业课 【精品】【考研计算机专业课】天津大学 编译原理讲义 自上而下3.2-3.4精品ppt课件
限制150内