编译原理自上而下语法分析.ppt
《编译原理自上而下语法分析.ppt》由会员分享,可在线阅读,更多相关《编译原理自上而下语法分析.ppt(48页珍藏版)》请在三一办公上搜索。
1、第四章 自上向下语法分析,语法分析的任务本章要点:自上而下语法分析的思想LL(1)方法递归下降分析预测分析,基本思想,主旨 对任何输入串,试图用一切可能,从文法的开始符号出发,自上而下地为输入串建立一棵语法树,或者为输入串寻找一个最左推导。本质上是一种试探过程,要解决的基本问题,例:GS:SxAy A*|*考虑输入串x*y 对于特定的非终结符号,使用哪个产生式来替换?,带回溯的自上而下语法分析存在的困难和缺点,文法的递归性虚假匹配错误的位置难以确定效率低,代价高,无回溯的自上向下分析技术,先决条件:无左递归 既没有直接左递归,也没有间接左递归。无回溯性对于任一非终结符号U的产生式右部x1|x2
2、|xn,各xi的首终结符号两两不相交。,文法的左递归性,定义:文法的左递归性是指文法具有以下形式的直接左递归:U Ux|y 或间接左递归:U=+Ux,具有左递归性的文法举例,E E+T|TT T*F|FF(E)|i,消除文法的直接左递归,PP1|Pn|1|m改写为:P 1P|mP P 1P|nP|,例子,消除左递归前EE+T|TTT*F|FF(E)|i,消除左递归后ET E E+TE|TFT T*FT|F(E)|i,间接左递归举例,SQc|cQRb|bRSa|a 以上文法不含直接左递归,但S,Q,R都是左递归的,因为:S=Qc=Rbc=SabcQ=Rb=Sab=QabcR=Sa=Qca=Rbc
3、a,消除文法的左递归,前提:如果一个文法不含回路(形如P+P的推导),也不含以 为右部的产生式,那么可以通过执行消除文法左递归的算法消除文法的一切左递归(改写后的文法可能含有以 为右部的产生式)。,消除文法的一切左递归的算法,1、把文法的所有非终结符按任一顺序排序2、FOR i=1 TO n DO(1)FOR j=1 TO i-1 DO 把形如PiPj的规则改写成 Pi1|k 其中Pj1|k是关于Pj的所有规则(2)消除关于规则的直接左递归3、化简由2所得的文法,例子,ABcdBCe|fCAb|c,消除回溯的基本思想,必须保证对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符
4、号,指派它的一个候选(右部)去执行任务,并且此候选的工作结果应是确定无疑的:即要么匹配成功,要么不可能获得匹配。,消除回溯对文法的要求,1、首先,文法不得含有左递归;2、设文法G不含左递归,对G的所有非终结符的每个候选 定义其终结首符集FIRST()为 FIRST()=a|=*a,aVT 特别是,若=*,则规定 FIRST()。如果非终结符A的所有候选首符集两两不相交,那么,当要求A匹配输入串时,A就能根据它所面临的第一个输入符号a,准确地指派某一个候选去执行任务。这个候选就是那个终结首符集含a的。,消除回溯方法:提取公共左因子,假设关于A的产生式是 A1|2|n|n+1 那么,可以将其改写为
5、 A A|n+1 A 1|2|n 经过反复提取左因子,就能够把每个非终结符(包括新引进者)的多有候选首符集变成为两两不相交。代价:引入大量新的非终结符和空产生式。,GS:S Bx B x|考虑输入串xFOLLOW(U)=b|S=*xUby,bVT,x,y(VNVT)*;特别地,#FOLLOW(S)。,LL(1)分析条件,文法不含左递归设U是文法G的任一个非终结符,其产生式为 Ux1|x2|xn 如果 FIRST(xi)FIRST(xj)=(ij,i,j=1,2,n)当 FIRST(xi)时,有 FIRST(xi)FOLLOW(U)=则文法G为LL(1)文法。,LL(1)方法,基本思想:从S出发
6、,生成句子的最左推导。选择合适产生式:从左到右扫描源程序,每次通过向前查看1个字符,选择合适的产生式。适用范围:仅对LL(1)文法适用。,FIRST()和FOLLOW(U),定义:1、FIRST()=a|=*a,aVT,(VNVT)*;特别地,如果=*,那么,我们规定 FIRST()。2、FOLLOW(U)=b|S=*xUby,bVT,x,y(VNVT)*;特别地,#FOLLOW(S)。直观地讲:FIRST(u)包含了u对应的字的所有可能的首终结符号。FOLLOW(U)表示了句型中可能紧跟再U后面的终结符号。,FIRST()构造算法,对于X(VNVT),FIRST(X)的构造1:若XVT,则F
7、IRST(X)=X2:若XVN,且有产生式Xa,a VT,则a FIRST(X);如果X,那么 FIRST(X)。3:若有产生式X Y,Y VN,则FIRST(Y)FIRST(X);如果有产生式XY1Y2YK,其中Y1,Y2,Yi1 VN且Y1Y2Yi1=*,则FIRST(Yi)FIRST(X);若Y1Y2YK=*,则 FIRST(X)。,FIRST()构造算法(续),设(VNVT)*,=X1X2Xn,FIRST()的构造1:若=,则FIRST()=2:若,则FIRST(X1)FIRST()。3:若X1X2。Xi1=*,则FIRST(Xi)FIRST();若X1X2Xn=*,则 FIRST()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 自上而下 语法分析

链接地址:https://www.31ppt.com/p-6599845.html