编译原理第三章语法分析.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《编译原理第三章语法分析.ppt》由会员分享,可在线阅读,更多相关《编译原理第三章语法分析.ppt(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章 语法分析语法分析器的作用语法分析器的作用词法分析器词法分析器语法分析器语法分析器前端其他部分前端其他部分符号表符号表管理器管理器出错出错处理器处理器源程序源程序记号流记号流分析树分析树中间表示中间表示上下文无关文法(上下文无关文法(CFG)定义:上下文无关文法是一个四元组定义:上下文无关文法是一个四元组G=(N,T,P,S)G=(N,T,P,S)N N是非终结符的有限集合;是非终结符的有限集合;T T是终结符的有限集合,且是终结符的有限集合,且NTNT;P P是产生式的有限集合;是产生式的有限集合;S S是非终结符,是文法的开始符号。是非终结符,是文法的开始符号。例:定义上下文无关文法
2、例:定义上下文无关文法G=(N,T,P,S)G=(N,T,P,S)如下:如下:N=E T=+,*,(,),-,id S=EN=E T=+,*,(,),-,id S=EP:EE+EP:EE+E EE*E EE*E E(E)E(E)E-E E-E Eid Eid所有出现在产生式所有出现在产生式左边符号的集合左边符号的集合所有所有不不出现在产生出现在产生式左边符号的集合式左边符号的集合缩写为:缩写为:EE+E|E*E|(E)|-E|id EE+E|E*E|(E)|-E|id形式语言分类形式语言分类定义:若文法定义:若文法G=(N,T,P,S)G=(N,T,P,S)的每个产生式的每个产生式中,均有中,
3、均有 (NT)(NT)*N(NT)N(NT)*,且至少含有一个非终结符,且至少含有一个非终结符,(NT)(NT)*,则称则称G G为为0 0型型文法(短语文法)。文法(短语文法)。1 1型型文法(上下文有关文法):文法(上下文有关文法):G G的任何产生式的任何产生式(S(S除外除外)均满足均满足|(|x|(|x|表示表示x x中文法符号的个数中文法符号的个数);2 2型型文法(上下文无关文法):文法(上下文无关文法):G G的任何产生式形如的任何产生式形如A A,其,其中中ANAN,(NT)(NT)*;3 3型型文法(正规文法、线性文法):文法(正规文法、线性文法):G G的任何产生式形如的
4、任何产生式形如A Aaa或者或者AaB(AaB(或者或者ABaABa),其中其中A,BN,aTA,BN,aT*。正规式与上下文无关文法正规式与上下文无关文法正规式所描述的语言结构均可以用正规式所描述的语言结构均可以用CFGCFG描述,反之不一定。描述,反之不一定。例:正规式例:正规式r=(a|b)*abbr=(a|b)*abb的的CFGCFG描述如下描述如下 AHT AHT H H|aH|bH|aH|bH Tabb Tabb往往采用正规式而不是往往采用正规式而不是CFGCFG描述词法。描述词法。正规式适合描述正规式适合描述线性线性结构;结构;CFGCFG适合描述具有嵌套(层次)性质的适合描述具
5、有嵌套(层次)性质的非线性非线性结构。结构。CFG产生语言的基本方法产生语言的基本方法推导推导定义:将产生式定义:将产生式AA的右部代替文法符号序列的右部代替文法符号序列AA 中的中的A A得到得到的过程,称为的过程,称为AA直接推导直接推导 出出,记作:,记作:AA。11nn为零步或多步推导;为零步或多步推导;11nn为零步推导;为零步推导;任何文法符号序列可以推导出它自身,任何文法符号序列可以推导出它自身,;推导具有传递性,推导具有传递性,,则则*定义:由定义:由CFG GCFG G所产生的语言所产生的语言 L(G)=L(G)=|S|S and T and T*称为称为上下文无上下文无关语
6、言关语言,称为句子。若称为句子。若S S,(NT),(NT)*,则称则称为为G G的一个句型。的一个句型。只含终结符的句型是句子。只含终结符的句型是句子。定义:在推导中,若每次直接推导均替换句型中最左定义:在推导中,若每次直接推导均替换句型中最左边的非终结符,则称为边的非终结符,则称为最左推导最左推导,产生的句型称为,产生的句型称为左句型左句型。最右推导也称为最右推导也称为规范推导规范推导。+*例:例:已知已知G(E),EE+E|E*E|(E)|-E|idG(E),EE+E|E*E|(E)|-E|id id+(id*id)id+(id*id)的推导过程:的推导过程:最左推导:最左推导:E E
7、E+E E+E id+E id+E id+(E)id+(E)id+(E*E)id+(E*E)id+(id*E)id+(id*E)id+(id*id)id+(id*id)最右推导:最右推导:E E E+E E+E E+(E)E+(E)E+(E*E)E+(E*E)E+(E*id)E+(E*id)E+(id*id)E+(id*id)id+(id*id)id+(id*id)定义:定义:设设 是上下文无关文法是上下文无关文法G G的一个句型的一个句型,如果有如果有S S AA,并且并且A A,则称则称是句型是句型 关于非终结符关于非终结符A A的一个短语的一个短语,或称或称是句型是句型 的一个短语。的一
8、个短语。直接短语(简单短语):直接短语(简单短语):A A句柄:一个句型的最左直接短语。句柄:一个句型的最左直接短语。素短语素短语:含有终结符的短语含有终结符的短语,但不存在也具有相同性质的真子串但不存在也具有相同性质的真子串短语:以非终结符为根的子树中所有从左到右排列的叶子;短语:以非终结符为根的子树中所有从左到右排列的叶子;直接短语:只有父子关系的树中所有从左到右排列的叶子(树高为直接短语:只有父子关系的树中所有从左到右排列的叶子(树高为2 2););句柄:最左边父子关系树中所有从左到右排列的叶子(句柄是唯一的)。句柄:最左边父子关系树中所有从左到右排列的叶子(句柄是唯一的)。素短语素短语
9、:子树末端结点组成的符号串含终结符子树末端结点组成的符号串含终结符,且在该子树中不再有包含且在该子树中不再有包含 含有终结符的更小子树含有终结符的更小子树*+短语与语法树短语与语法树例:例:G(E)G(E):EE+T|TEE+T|T TT*F|F TT*F|F F(E)|i F(E)|i句型:句型:i*i+ii*i+i的短语、直接短语、句柄和素短语的短语、直接短语、句柄和素短语 短语:短语:i i1 1*i*i2 2+i+i3 3,i,i1 1*i*i2 2,i,i1 1,i,i2 2,i,i3 3 直接短语:直接短语:i i1 1,i,i2 2,i,i3 3 句柄:句柄:i i1 1 素短语
10、素短语:i:i1 1,i i2 2,i i3 3E E +T T FT *F i3 F i2i1分析树:分析树:根由开始符号标记;根由开始符号标记;每个叶子由一个终结符、非终结符或每个叶子由一个终结符、非终结符或标记;标记;每个内部结点由一个非终结符标记;每个内部结点由一个非终结符标记;若若AX1X2XnAX1X2Xn是一个产生式,则标记为是一个产生式,则标记为A A的内部结的内部结 点从左到右有子结点点从左到右有子结点X1X1,X2X2,XnXn;若若AA,则,则必是叶结点,且它是必是叶结点,且它是A A的唯一子结点。的唯一子结点。例:例:E E E+EE id+EE id+E (E )E
11、id+E (E )E *EE id+E (E )E *E id EE id+E (E )E *E id id语法树:语法树:根与内部结点由表达式中的操作符标记;根与内部结点由表达式中的操作符标记;叶子由表达式中的操作数标记;叶子由表达式中的操作数标记;用于改变运算优先级和结合性的括弧,被隐含在语法树用于改变运算优先级和结合性的括弧,被隐含在语法树的结构中;的结构中;例:例:语法树只反映句型的结构,忽略了推导句型的过程。语法树只反映句型的结构,忽略了推导句型的过程。+id *id id二义性与二义性的消除二义性与二义性的消除定义:若文法定义:若文法G对同一个句子产生不止一棵分析树,对同一个句子产
12、生不止一棵分析树,则称则称G是二义的。是二义的。例:例:id+id*id原因是文法中缺少对文法符号优先级和结合性的规定原因是文法中缺少对文法符号优先级和结合性的规定E id +EE *E id idE E *EE +E id id id自上而下语法分析自上而下语法分析自上而下语法分析法:从文法开始符号出发自上而下语法分析法:从文法开始符号出发,找最左推找最左推导;或从根开始导;或从根开始,构造推导树。构造推导树。1.回溯分析法:回溯分析法:(不确定性不确定性)例:例:SxAy Aaba 输入串为输入串为xay,说明分析过程说明分析过程S x A ySa b x A ySa x A y2.存在的
13、问题存在的问题(1)回溯回溯公共左因子的存在公共左因子的存在 A1|2(2)左递归左递归 AA 或或 AA提取左因子,以避免回溯;提取左因子,以避免回溯;消除左递归,以避免陷入死循环。消除左递归,以避免陷入死循环。消除左递归消除左递归(1)直接左递归的消除直接左递归的消除 AA 改写为:改写为:AA AA一般地一般地 AA1|A2|Am|1|2|n (i,j不以不以A开头)开头)改写为:改写为:A1A|2A.|nA A 1A|2A.|mA|例:消除直接左递归例:消除直接左递归 EE+T|T EE+T|T TT*F|F TT*F|F F(E)|-F|id F(E)|-F|id消除后消除后 ETE
14、 ETE E+TE|E+TE|TFT TFT T*FT|T*FT|F(E)|-F|id F(E)|-F|id(2)间接左递归的消除间接左递归的消除例:例:SQcc QRbb RSaa 按按S,Q,R排列排列,或或R,Q,S排列排列按按S、Q、R排列排列,代入后代入后 按按R、Q、S排列排列,代代入后入后 SQcc RSaa QRbb QSababb R Rbcabcacaa SSabcabc bcc 消除消除R中的直接左递归中的直接左递归 消除消除S中的直接左递中的直接左递归归 R bcaRcaRaR SabcSbcScS R bcaR SabcS 提取左因子提取左因子(回溯回溯)A A1 1
15、|2 2|.|.|n n|改写为:改写为:AA|AA|A A 1 1|2 2|.|.|n n 例:例:SiCtS|iCtSeS|aSiCtS|iCtSeS|a Cb Cb消除左因子:消除左因子:SiCtSS|a SiCtSS|a SeS|SeS|Cb Cb 当一个文法中既有左递归又含左因子时,先消除左递归。当一个文法中既有左递归又含左因子时,先消除左递归。文法文法3.2:ETEETEE+TE|E+TE|TFTTFTT*FT|T*FT|F(E)|iF(E)|i 输入串输入串i*(i+i)i*(i+i)的语法分析的语法分析递归下降程序递归下降程序:void match(token t)if(loo
16、kahead=t)lookahead=nexttoken;else error();void E()T();E();void E()if(lookahead=+)match(+);T();E();void T()F();T();void T()if(lookahead=*)match(*);F();T();递归下降程序递归下降程序:void F()if(lookahead=i)match(i);else if(lookahead=()match();E();if(lookahead=)match();else error();else error();#E#ET#ET#ETF#ETF#ETE#
17、ETET#ETETF#ETET#ETE#ETET#ETETF#ETET#ETE#ET#E#匹配匹配*匹配匹配()匹配匹配i匹配匹配i匹配匹配匹配匹配+匹配匹配i匹配匹配匹配匹配匹配匹配匹配匹配预测分析器预测分析器(LL(1)分析法分析法)构成:下推栈构成:下推栈,预测分析表预测分析表,控制程序控制程序,输入串输入串分析方法:分析方法:初始时初始时,和开始符入栈和开始符入栈,输入指针指向第一个符号输入指针指向第一个符号,然后根据下推栈栈顶符然后根据下推栈栈顶符x和当前输入符和当前输入符a进行工作进行工作:x=a=,成功成功 x=a,匹配匹配 xN,查预测分析表查预测分析表构造预测分析表构造预测分
18、析表1 1FIRSTFIRST集集(1)(1)定义:文法符号序列定义:文法符号序列A A的的FIRSTFIRST集合集合 FIRST(A)FIRST(A)a|Aa|A a.,aT,a.,aT,若若A A,则则FIRST(A)FIRST(A)若若x x是终结符,则是终结符,则FIRST(x)=x;FIRST(x)=x;若若A A是非终结符且是非终结符且AA,则加入,则加入到到FIRST(A);FIRST(A);若若A A是非终结符且是非终结符且AYAY1 1Y Y2 2YYk k,并且并且Y Y1 1Y Yj-1j-1都能推导都能推导出出,则对所有则对所有j(1jk),j(1jk),若若aFIR
19、ST(YaFIRST(Yj j),),加入加入a a到到FIRST(A)FIRST(A)。*例:例:LE;L|LE;L|ETE ETE E+TE|-TE|E+TE|-TE|TFT TFT T*FT|/FT|modFT|T*FT|/FT|modFT|F(E)|id|num F(E)|id|num 非终结符的非终结符的FIRSTFIRST集集 FIRST(F)=(,id FIRST(F)=(,id,numnum FIRST(T)=*,/,mod FIRST(T)=*,/,mod,FIRST(T)=FIRST(F)=(,id FIRST(T)=FIRST(F)=(,id,numnum FIRST(E
20、)=+,-,FIRST(E)=+,-,FIRST(E)=FIRST(T)=(,id FIRST(E)=FIRST(T)=(,id,numnum FIRST(L)=,(,id FIRST(L)=,(,id,numnum1 1FOLLOWFOLLOW集集(1)(1)定义:非终结符定义:非终结符A A的的FOLLOWFOLLOW集合集合 FOLLOW(A)FOLLOW(A)a|Sa|SAa,aT,Aa,aT,若若S SA,A,则则#FOLLOW(A),#FOLLOW(A),其中其中S S为开始符号为开始符号#FOLLOW(S);#FOLLOW(S);ABC:ABC:将将FIRST(C)-FIRST(
21、C)-加入加入FOLLOW(B);FOLLOW(B);ABAB或或ABCABC且且FIRST(C),FIRST(C),则将则将FOLLOW(A)FOLLOW(A)加加入入FOLLOW(B)FOLLOW(B)。*例:例:LE;L|LE;L|ETE ETE E+TE|-TE|E+TE|-TE|TFT TFT T*FT|/FT|modFT|T*FT|/FT|modFT|F(E)|id|num F(E)|id|num 非终结符的非终结符的FOLLOWFOLLOW集集 FOLLOW(L)=#FOLLOW(L)=#FOLLOW(E)=;,)FOLLOW(E)=;,)FOLLOW(E)=;,)FOLLOW(
22、E)=;,)FOLLOW(T)=+,-,;,)FOLLOW(T)=+,-,;,)FOLLOW(T)=+,-,;,)FOLLOW(T)=+,-,;,)FOLLOW(F)=*,/,mod,+,-,;,)FOLLOW(F)=*,/,mod,+,-,;,)构造算法:构造算法:对每个产生式对每个产生式AA对对FIRST(A)FIRST(A)的每个终结符的每个终结符a a,加入,加入到到MA,aMA,a;若若FIRST(A),FIRST(A),则对则对FOLLOW(A)FOLLOW(A)的每个终结符的每个终结符b b(包括(包括#),),加入加入到到MA,bMA,b;MM中其他没有定义的条目均为中其他没有
23、定义的条目均为errorerror。ididnumnum+-*/modmod();#L LE;LE;LE;LE;LE;LE;LE ETETETETETETEEE+TE+TE-TETET TFTFTFTFTFTFTTT*FT*FT/FT/FTmodFTmodFTF Fididnumnum(E)(E)例:例:id+id*id;的分析过程的分析过程步骤步骤下推栈下推栈输入串输入串动作动作查分析表查分析表1 1#L#Lid+id*id;#id+id*id;#pop(L),push(E;L)pop(L),push(E;L)LE;LLE;L2 2#L;E#L;Eid+id*id;#id+id*id;#po
24、p(E),push(TEpop(E),push(TE)ETEETE3 3#L;ET#L;ETid+id*id;#id+id*id;#pop(T),push(FTpop(T),push(FT)TFTTFT4 4#L;ETF#L;ETFid+id*id;#id+id*id;#pop(F),push(id)pop(F),push(id)FidFid5 5#L;ETid#L;ETidid+id*id;#id+id*id;#pop(id),next(ip)pop(id),next(ip)匹配匹配idid6 6#L;ET#L;ET+id*id;#+id*id;#pop(T)pop(T)TT7 7#L;E#
25、L;E+id*id;#+id*id;#pop(E),push(+Tpop(E),push(+TE)E)E+TEE+TE8 8#L;ET+#L;ET+id*id;#+id*id;#pop(+),next(ip)pop(+),next(ip)匹配匹配+9 9#L;ET#L;ETid*id;#id*id;#pop(T),push(FTpop(T),push(FT)TFTTFT1010#L;ETF#L;ETFid*id;#id*id;#pop(F),push(id)pop(F),push(id)FidFid1111#L;ETid#L;ETidid*id;#id*id;#pop(id),next(ip)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 第三 语法分析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内