编译原理第4章语法分析课件.ppt
《编译原理第4章语法分析课件.ppt》由会员分享,可在线阅读,更多相关《编译原理第4章语法分析课件.ppt(59页珍藏版)》请在三一办公上搜索。
1、编译原理第四章 语法分析,2022/12/2,1,第四章 语法分析,编译原理第四章 语法分析,2022/12/2,2,第四章 语法分析1、概述一. 语法分析器的功能,编译原理第四章 语法分析,2022/12/2,3,语法分析:在词法分析的基础上,根据语法规则,从单词符号串中识别出各种语法成分,同时进行语法检查,检查各种语法成分在语法结构上的正确性。,编译原理第四章 语法分析,2022/12/2,4,二.语法分析方法,自上向下分析法:从文法的开始符号出发,以给定的符号串为目标,根据文法规则,正向推导出给定符号串的一种方法。自下向上分析法:从给定的符号串出发,反复使用文法中有关产生式的左部去替换当
2、前符号串中的相应子串,逐步归约成文法开始符号的一种方法。自上向下分析法:递归下降、LL(1)分析法自下向上分析法:算符优先、LR分析法,编译原理第四章 语法分析,2022/12/2,5,2、自上而下分析方法一、带回溯的自上而下分析法,基本思想:对任何输入串,试图用一切可能的方法,从文法的开始符号出发,采用最左推导,自上而下为输入串建立一棵语法树。例如:设有文法:SxAyA* | *输入串:x*y看匹配过程,S,A,x,y,S,A,x,y,S,A,x,y,*,*,*,编译原理第四章 语法分析,2022/12/2,6,二、存在的问题以及解决的方法1.左递归:,当文法为左递归时,会使分析程序进入无限
3、循环之中。若文法中有非终结符P=P(文法左递归)输入某输入串w=a1a2an 就有P= P= P 如此循环,不会终止,+,编译原理第四章 语法分析,2022/12/2,7,消除直接左递归,方法一:引进新的非终结符,改写文法规则式。PP | P PP P | (将文法中的左递归结构变成等价的右递归结构)例如:算术表达式文法左递归EE+T | TETETT*F | FE+TE| F(E) | iTFTT*FT | F(E) | i,编译原理第四章 语法分析,2022/12/2,8,一般情况:有多个直接左递归:PP1 | P2 | | Pm | 1 | 2 | | n 其中,每个都不等于,而每个都不
4、以P开头,则上式改写为 P1 P| 2 P | | n P P1 P | 2 P | | m P | 例如:AAc | Aad | bd | e改写为:A bd A | e A A c A | ad A | ,编译原理第四章 语法分析,2022/12/2,9,方法二:采用扩充的BNF表示法改写文法规则式用花括号表示符号串出现0次或多次。即*标识符:Il l | d 或Il l | d 7 即将AA | 改写成A 中括号表示是可供选择的符号串。if B then else 使用圆括号,可以在规则中提因子。UXY|XW|XZUX(Y|W|Z)例如:算术表达式文法左递归EE+T | TET+TTT*
5、F | FTF*FF(E) | i F(E) | i,编译原理第四章 语法分析,2022/12/2,10,消除所有左递归的算法,(1)把文法G的所有非终结符按任一顺序排列成P1 , P2 , Pn ; (2)执行循环语句:for i:=1 to n do将规则 PiPj 改写;改写方法:Pj1 | 2 | n 则 Pi1 | 2 | n 消除关于Pi的直接左递归end(3)化简由(2)得到的文法。,编译原理第四章 语法分析,2022/12/2,11,例如:消除下面文法的左递归。文法:SQc | cQRb | bRSa | a(1)排列:R , Q , S(2)对R :没有直接左递归,不执行内循
6、环 对Q:将R代入Q变为 QSab | ab | b ,也没有直接左递归,不执行内循环。 对S:将Q代入S变为 SSabc | abc | bc | c消除S的直接左递归,得下面文法: Sabc S| bc S | c S Sabc S| (3)Sabc S| bc S | c S QSab | ab | b Sabc S| RSa | a若排列方法不同,得到的文法也可能不同,但等价,编译原理第四章 语法分析,2022/12/2,12,2.回溯问题,问题:如果对同一个非终结符号,有若干个产生式右部 A 1 | 2 | | n , 选择哪一个产生式匹配呢? 匹配不好就产生回溯。回溯使语法分析器的
7、动作不确定。分析:要消除回溯,必须使文法具有一定的特性。例如:ScAdAad | a 输入符号w=cad分析:要求各规则式右部1 | 2 | | n 所推出的终结首符号的集合两两不相交。定义:符号串i 终结首符号的集合:FIRST(i )= | i =a , VT ,*,编译原理第四章 语法分析,2022/12/2,13,条件一:对文法中每一个非终结符A,如有规则: A 1 | 2 | | n 则下面条件成立 FIRST(i ) FIRST(j )= (ij)上例中:FIRST(ab) FIRST(a)=a a=a 改写方法:提取公共左因子A 1 | 2 | | n | 1 | 2 | m则:
8、AA | 1 | 2 | mA 1 | 2 | | n 例如:if E then S1 else S2 | if E then S1 改写为: if E then S1 BB else S2 | ,编译原理第四章 语法分析,2022/12/2,14,问题:若满足条件 FIRST(i ) FIRST(j )= 是否完全避免回溯呢?上例中: ScAdAad | a改写为: ScAdA aA Ad | 输入符号w=cad 匹配d可能失败,差条件定义:非终结符号A的后继符号的集合:FOLLOW(A)=a | S=Aa , VT 当S=A,则规定 # FOLLOW(A) (#为界符)条件二:若i = 时
9、 , FIRST(i ) FOLLOW(A) = 上例中:FIRST(d) FOLLOW(A)=d 产生回溯,*,*,编译原理第四章 语法分析,2022/12/2,15,小结:构造不带回溯的自上而下分析的条件是:1.文法不含左递归2.对文法中每一个非终结符A,如有规则: A 1 | 2 | | n 则下面条件成立 FIRST(i ) FIRST(j )= (ij)3.对文法中每一个非终结符A,若它的某个产生式首符集包含 时 ,则: FIRST(A) FOLLOW(A) = 满足以上条件的文法称为LL(1)文法。对于一个LL(1)文法,可以构造无回溯的自上而下分析。,编译原理第四章 语法分析,2
10、022/12/2,16,FIRST()的求法:(A 是文法G的产生式),若=a ,且a是终结符,则FIRST()=a。若=X,且X是非终结符,且X=b,则把终结符b加入到FIRST()中。若=X1X2Xk,且X1 , X2 , Xk 都是非终结符,而X1X2Xi=,则把 FIRST(Xi+1Xi+2Xk)加入到FIRST()中。,编译原理第四章 语法分析,2022/12/2,17,FOLLOW(A)的求法:(其中A是任一非终结符),若有产生式B Aa ,且a是终结符,则把a加入到FOLLOW(A)中。若有产生式B AX ,且X是非终结符 , 则把FIRST(X)加入到FOLLOW(A)中。若有
11、产生式B A,或B A,但=,则把FOLLOW(B)加入到FOLLOW(A)中。若A是文法的开始符号,则把结束符#加入到FOLLOW(A)中。,编译原理第四章 语法分析,2022/12/2,18,例:已知文法GS:SaSb | PPbPc | bQcQQa | a消除文法左递归后是不是LL(1)文法?解:消除文法左递归得到:SaSb | PPbPc | bQcQaQQaQ| 提取公共左因子后得文法:SaSb | PPbP P Pc | QcQaQQaQ| 计算FIRST和FOLLOW集合:FIRST(S)=a,bFIRST(P)=bFIRST(P)=a,bFIRST(Q)=aFIRST(Q)=
12、a, Follow(S)=b,# Follow(P)=b,c,# Follow(P)=b,c,# Follow(Q)=c Follow(Q)=c 是LL(1)文法,编译原理第四章 语法分析,2022/12/2,19,例:将文法改写成LL(1)文法。SS*aP | aP | *aPP+aP | +a解:消除文法左递归、提取公共左因子得到: SaPS | *aPS S *aPS | P+aP PP | 计算每个非终结符的FIRST和FOLLOW集合:FIRST(S)=a,*Follow(S)=#FIRST(S)=*, Follow(S)=#FIRST(P)=+Follow(P)=*, #FIRST
13、(P)=+, Follow(P)=*,#以上文法是LL(1)文法。,编译原理第四章 语法分析,2022/12/2,20,已知文法:GS:SAB | PQxAxy | mBbCCbC | PpP | Qq如果要保持文法为LL(1)文法,下列哪几个产生式不能加入到该文法中?为什么?(1)SbC(2)AbC(3)B (4)Q,编译原理第四章 语法分析,2022/12/2,21,解:(1) 加入SbC后文法为:SAB | PQx | bCAxy | mBbCCbC | PpP | Qq对S:First(AB) First(PQx) First(bC)=x,m p,q b = 对A:First(xy)
14、First(m) = x m=对C:First(bC) Follow(C) = b #=对P:First(pP) Follow(P) = p q=加入SbC后文法是LL(1)文法。,编译原理第四章 语法分析,2022/12/2,22,(2) 加入AbC后文法为:SAB | PQxAxy | m | bCBbCCbC | PpP | Qq对A:First(xy) First(m) First(bC)=x m b = 对C:first(bC) follow(C)=b b,#=b不是LL(1)文法。,(3) 加入B 后文法为:SAB | PQxAxy | mBbC | CbC | PpP | Qq对
15、B:First(bC) Follow(B)=b # = 是LL(1)文法。,编译原理第四章 语法分析,2022/12/2,23,(4) 加入Q 后文法为:SAB | PQxAxy | mBbCCbC | PpP | Qq | First(S)=x,m,p,qFollow(S)=#First(A)=x,mFollow(A)=bFirst(B)=bFollow(B)=#First(C)=b, Follow(C)=#First(P)=p, Follow(P)=q,xFirst(Q)=q ,Follow(Q)=x对S: First(AB) First(PQx) = x,m p,q,x =x 加入Q 后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 语法分析 课件

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