编译原理自上而下语法分析.ppt





《编译原理自上而下语法分析.ppt》由会员分享,可在线阅读,更多相关《编译原理自上而下语法分析.ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 编译原理编译原理编译原理编译原理 第四章第四章 自上向下语法分析自上向下语法分析vv语法分析的任务语法分析的任务vv本章要点:本章要点:自上而下语法分析的思想自上而下语法分析的思想LL(1)方法)方法递归下降分析递归下降分析预测分析预测分析 编译原理编译原理编译原理编译原理 基本思想基本思想vv主旨主旨 对任何输入串,试图用一切可能,从文法的对任何输入串,试图用一切可能,从文法的开始符号出发,自上而下地为输入串建立一开始符号出发,自上而下地为输入串建立一棵语法树,或者为输入串寻找一个最左推导。棵语法树,或者为输入串寻找一个最左推导。vv本质上是一种试探过程本质上是一种试探过程 编译原理编译原
2、理编译原理编译原理 要解决的基本问题要解决的基本问题 例:例:GS:SxAy A*|*考虑输入串考虑输入串x*y 对于特定的非终结符号,使用哪个产生式来对于特定的非终结符号,使用哪个产生式来替换?替换?编译原理编译原理编译原理编译原理 带回溯的自上而下语法分析带回溯的自上而下语法分析存在的困难和缺点存在的困难和缺点vv文法的递归性文法的递归性vv虚假匹配虚假匹配vv错误的位置难以确定错误的位置难以确定vv效率低,代价高效率低,代价高 编译原理编译原理编译原理编译原理 无回溯的自上向下分析技术无回溯的自上向下分析技术vv先决条件:先决条件:无左递归无左递归 既没有直接左递归,也没有间接左递归。既
3、没有直接左递归,也没有间接左递归。既没有直接左递归,也没有间接左递归。既没有直接左递归,也没有间接左递归。无回溯性无回溯性对于任一非终结符号对于任一非终结符号对于任一非终结符号对于任一非终结符号U U的产生式右部的产生式右部的产生式右部的产生式右部x x1 1|x|x2 2|x|xn n,各,各,各,各x xi i的首终结符号两两不相交。的首终结符号两两不相交。的首终结符号两两不相交。的首终结符号两两不相交。编译原理编译原理编译原理编译原理 文法的左递归性文法的左递归性vv定义:定义:文法的左递归性是指文法具有以下形式的直文法的左递归性是指文法具有以下形式的直接左递归:接左递归:U Ux|y
4、或间接左递归:或间接左递归:U=+Ux 编译原理编译原理编译原理编译原理 具有左递归性的文法举例具有左递归性的文法举例vvE E+T|TvvT T*F|FvvF(E)|i 编译原理编译原理编译原理编译原理 消除文法的直接左递归消除文法的直接左递归 PP1|Pn|1|m改写为:改写为:P 1P|mP P 1P|nP|编译原理编译原理编译原理编译原理 例子例子消除左递归前消除左递归前EE+T|TTT*F|FF(E)|i消除左递归后消除左递归后l lET E l lE+TE|l lTFT l lT*FT|l lF(E)|i 编译原理编译原理编译原理编译原理 间接左递归举例间接左递归举例SQc|cQR
5、b|bRSa|a 以上文法不含直接左递归,但以上文法不含直接左递归,但S,Q,R都是左递归的,因为:都是左递归的,因为:S=QcQc=RbcRbc=SabcSabcQ Q=RbRb=SabSab=QabcQabcR=SaSa=QcaQca=RbcaRbca 编译原理编译原理编译原理编译原理 消除文法的左递归消除文法的左递归前提:如果一个文法不含回路(形如前提:如果一个文法不含回路(形如P+P的推导),也不含以的推导),也不含以 为右部的产生式,为右部的产生式,那么可以通过执行消除文法左递归的算那么可以通过执行消除文法左递归的算法消除文法的一切左递归(改写后的文法消除文法的一切左递归(改写后的文
6、法可能含有以法可能含有以 为右部的产生式)。为右部的产生式)。编译原理编译原理编译原理编译原理 消除文法的一切左递归的算法消除文法的一切左递归的算法1 1、把文法的所有非终结符按任一顺序排序、把文法的所有非终结符按任一顺序排序、把文法的所有非终结符按任一顺序排序、把文法的所有非终结符按任一顺序排序2 2、FOR i=1 TO n DOFOR i=1 TO n DO (1)FOR j=1 TO i-1 DO (1)FOR j=1 TO i-1 DO 把形如把形如把形如把形如P Pi iPPj j 的规则改写成的规则改写成的规则改写成的规则改写成 P Pi i1 1|k k 其中其中其中其中P P
7、j j1 1|k k是关于是关于是关于是关于P Pj j的所有规则的所有规则的所有规则的所有规则 (2)(2)消除关于规则的直接左递归消除关于规则的直接左递归消除关于规则的直接左递归消除关于规则的直接左递归3 3、化简由、化简由、化简由、化简由2 2所得的文法所得的文法所得的文法所得的文法 编译原理编译原理编译原理编译原理 例子例子vvABcdvvBCe|fvvCAb|c 编译原理编译原理编译原理编译原理 消除回溯的基本思想消除回溯的基本思想 必须保证对文法的任何非终结符,当要它去必须保证对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符匹配输入串时,能够根据它所面临的输入符
8、号,指派它的一个候选(右部)去执行任务,号,指派它的一个候选(右部)去执行任务,并且此候选的工作结果应是确定无疑的:即并且此候选的工作结果应是确定无疑的:即要么匹配成功,要么不可能获得匹配。要么匹配成功,要么不可能获得匹配。编译原理编译原理编译原理编译原理 消除回溯对文法的要求消除回溯对文法的要求1 1、首先,文法不得含有左递归;、首先,文法不得含有左递归;、首先,文法不得含有左递归;、首先,文法不得含有左递归;2 2、设文法、设文法、设文法、设文法GG不含左递归,对不含左递归,对不含左递归,对不含左递归,对GG的所有非终结符的每个的所有非终结符的每个的所有非终结符的每个的所有非终结符的每个候
9、选候选候选候选 定义其终结首符集定义其终结首符集定义其终结首符集定义其终结首符集FIRST()FIRST()为为为为 FIRST()=a|=FIRST()=a|=*a,a*a,aV VT T 特别是,若特别是,若特别是,若特别是,若=*,则规定,则规定,则规定,则规定 FIRST()FIRST()。如果。如果。如果。如果非终结符非终结符非终结符非终结符A A的所有候选首符集两两不相交,那么,的所有候选首符集两两不相交,那么,的所有候选首符集两两不相交,那么,的所有候选首符集两两不相交,那么,当要求当要求当要求当要求A A匹配输入串时,匹配输入串时,匹配输入串时,匹配输入串时,A A就能根据它所
10、面临的第一就能根据它所面临的第一就能根据它所面临的第一就能根据它所面临的第一个输入符号个输入符号个输入符号个输入符号a a,准确地指派某一个候选去执行任务。,准确地指派某一个候选去执行任务。,准确地指派某一个候选去执行任务。,准确地指派某一个候选去执行任务。这个候选就是那个终结首符集含这个候选就是那个终结首符集含这个候选就是那个终结首符集含这个候选就是那个终结首符集含a a的的的的。编译原理编译原理编译原理编译原理 消除回溯方法:提取公共左因子消除回溯方法:提取公共左因子vv假设关于假设关于假设关于假设关于A A的产生式是的产生式是的产生式是的产生式是 A A1 1|2 2|n n|n+1n+
11、1 那么,可以将其改写为那么,可以将其改写为那么,可以将其改写为那么,可以将其改写为 A A|A A|n+1n+1 A A 1 1|2 2|n n vv经过反复提取左因子,就能够把每个非终结符经过反复提取左因子,就能够把每个非终结符经过反复提取左因子,就能够把每个非终结符经过反复提取左因子,就能够把每个非终结符(包括新引进者)的多有候选首符集变成为两两(包括新引进者)的多有候选首符集变成为两两(包括新引进者)的多有候选首符集变成为两两(包括新引进者)的多有候选首符集变成为两两不相交。不相交。不相交。不相交。vv代价:引入大量新的非终结符和空产生式。代价:引入大量新的非终结符和空产生式。代价:引
12、入大量新的非终结符和空产生式。代价:引入大量新的非终结符和空产生式。编译原理编译原理编译原理编译原理 vvGS:S Bx B x|考虑输入串考虑输入串xvvFOLLOW(U)=b|S=*xUby,bVT,x,y(VNVT)*;特别地,;特别地,#FOLLOW(S)。编译原理编译原理编译原理编译原理 LL(1)分析条件分析条件vv文法不含左递归文法不含左递归vv设设U是文法是文法G的任一个非终结符,其产生式的任一个非终结符,其产生式为为 Ux1 1|x2 2|xn n 如果如果 FIRST(xi i)FIRST(xj j)=(ij,i,j=1,2,n)(ij,i,j=1,2,n)vv当当 FIR
13、ST(xi i)时,有时,有 FIRST(xi i)FOLLOW(U)=则文法则文法G为为LL(1)文法。文法。编译原理编译原理编译原理编译原理 LL(1)方法方法vv基本思想:从基本思想:从S出发,生成句子的最左推导。出发,生成句子的最左推导。vv选择合适产生式:从左到右扫描源程序,每选择合适产生式:从左到右扫描源程序,每次通过向前查看次通过向前查看1个字符,选择合适的产生式。个字符,选择合适的产生式。vv适用范围:仅对适用范围:仅对LL(1)文法适用。文法适用。编译原理编译原理编译原理编译原理 FIRST()和和FOLLOW(U)vv定义:定义:定义:定义:1 1、FIRST()=a|=F
14、IRST()=a|=*a,a*a,aV VT T,(V VN NV VT T)*)*;特别地,;特别地,;特别地,;特别地,如果如果如果如果 =*=*,那么,我们规定,那么,我们规定,那么,我们规定,那么,我们规定 FIRST()FIRST()。2 2、FOLLOW(U)=b|S=FOLLOW(U)=b|S=*xUby,b*xUby,bV VT T,x,y,x,y(V VN NV VT T)*)*;特别地,;特别地,;特别地,;特别地,#FOLLOW(S)FOLLOW(S)。vv直观地讲:直观地讲:直观地讲:直观地讲:FIRST(u)FIRST(u)包含了包含了包含了包含了u u对应的字的所有
15、可能的首终结符号。对应的字的所有可能的首终结符号。对应的字的所有可能的首终结符号。对应的字的所有可能的首终结符号。FOLLOW(U)FOLLOW(U)表示了句型中可能紧跟再表示了句型中可能紧跟再表示了句型中可能紧跟再表示了句型中可能紧跟再U U后面的终结符号。后面的终结符号。后面的终结符号。后面的终结符号。编译原理编译原理编译原理编译原理 FIRST()构造算法构造算法vv对于对于对于对于X X(V(VN NV VT T),FIRST(X),FIRST(X)的构造的构造的构造的构造1 1:若:若:若:若X X V VT T,则,则,则,则FIRST(X)=XFIRST(X)=X2 2:若若若若
16、X X V VN N,且有产生式,且有产生式,且有产生式,且有产生式Xa,a Xa,a V VT T,则,则,则,则a a FIRST(X)FIRST(X);如果;如果;如果;如果X X ,那么,那么,那么,那么 FIRST(X)FIRST(X)。3 3:若若若若有产生式有产生式有产生式有产生式X Y,Y X Y,Y V VN N,则则则则FIRST(Y)FIRST(Y)FIRST(X);FIRST(X);如果有产生式如果有产生式如果有产生式如果有产生式XXY Y1 1Y Y2 2YYK K,其中其中其中其中Y Y1 1,Y Y2 2,Y Yi i1 1 V VN N且且且且Y Y1 1Y Y
17、2 2YYi i1 1=*,则则则则FIRST(YFIRST(Yi i)FIRST(X)FIRST(X);若若若若Y Y1 1Y Y2 2YYK K=*,则,则,则,则 FIRST(X)FIRST(X)。编译原理编译原理编译原理编译原理 FIRST()构造算法构造算法(续续)vv设设(VNVT)*,=X1X2Xn,FIRST()的构造的构造1 1:若:若:若:若 =,则,则,则,则FIRST(FIRST()=)=2 2:若若若若 ,则,则,则,则FIRST(FIRST(X X1 1)FIRST(FIRST()。3 3:若若若若X X1 1X X2 2。X Xi i1 1=*,则则则则FIRST
18、(XFIRST(Xi i)FIRST(FIRST();若若若若X X1 1X X2 2XXn n=*,则则则则 FIRST(FIRST()。编译原理编译原理编译原理编译原理 FOLLOW(U)的构造算法的构造算法 1、#FOLLOW(S)2、如果有产生式、如果有产生式AxUy,那么,那么FIRST(y)FOLLOW(U)。3、如果有产生式、如果有产生式AxU或则或则 AxUy且且y=*,那么,那么FOLLOW(A)FOLLOW(U)。vv注意:步骤注意:步骤3需要重复执行,直到没有哪个需要重复执行,直到没有哪个非终结符号的非终结符号的FOLLOW集合增长为止。集合增长为止。编译原理编译原理编译
19、原理编译原理 FIRST的例子的例子vv文法文法文法文法GE:GE:ETEETEE+TE|E+TE|TFTTFTT*FT|T*FT|F(E)|iF(E)|ivvFIRST(F)=(FIRST(F)=(,i i vvFIRST(T)=FIRST(F)=(FIRST(T)=FIRST(F)=(,i i vvFIRST(E)=+FIRST(E)=+,FIRST(T)=*,FIRST(T)=*,编译原理编译原理编译原理编译原理 FOLLOW例子例子vv文法文法文法文法GE:GE:ETEETEE+TE|E+TE|TFTTFTT*FT|T*FT|F(E)|iF(E)|ivvFOLLOW(E)=#,)FOL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 自上而下 语法分析

限制150内