《自上而下语法分析》PPT课件.ppt
《《自上而下语法分析》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《自上而下语法分析》PPT课件.ppt(56页珍藏版)》请在三一办公上搜索。
1、第五章自上而下语法分析,语法分析是继词法分析之后编译过程的第2阶段。它的主要任务是对词法分析的输出结果单词序列进行分析,识别合法的语法单位。语法分析最常用的方法有:优先方法、递归下降法、LL方法和LR方法。所谓自上而下分析是指从树的根结点开始,为给定的输入串构造一棵语法树。本章中,我们通过讨论一个一般的非确定的自上而下分析器来讨论上下无关语言的自上而下分析器的设计。,5.1 非确定的下推自动机,下面所要构造的非确定的自上而下分析器属于一般的下推自动机(PDA)类。所谓一个下推或栈自动机(Stack Automaton),非形式地说,应包含:一个输入符号串;一个读头,它从左至右移动,每次读进一个
2、输入符号;一个有穷状态自动机,用于控制整个系统的操作;一个后进先出下推栈,,下推自动机的非空移动:,5.1.1 PDA形式定义,形式上说,一个PDA是一个七元组:(Q,H,q0,Z0,F)Q 是状态的有穷集,它的每个元素称为一个状态;是有穷的字母表,它的每个元素是一个输入符号;H 是有穷的下推栈字符表,它的每个元素称为一个栈符号。q0Q 是该PDA的初态;Z0H 是下推栈的初始符号;F Q 是一个终态集(或接收状态集);它的每个元素称为终态;(可空)。,5.1.1 PDA形式定义,是描述PDA动作与状态变化的。PDA的动作可用定义式来表示为:(q,a,z)=(p1,h1),(p2,h2)(pn
3、,hn)它的含义为:在控制器当前状态为q,下推栈顶符号为z,输入符号为a的情况下,把控制器的状态改为pi,用hi 替换栈顶的z,并让读头右移一格。,5.1.2 PDA的 构形和移动,PDA的一个构形是一个三元组:(q,w,h)其中,qQ;w*是尚待扫描的输入串,包括读头当前所指的符号;hH*是栈的内容。PDA的一次移动可看作是从一种构形变换成另一种构形的一种方式。反过来,构形又为定义PDA的移动提供了一种更简单的手段。我们称(q,ax,Zh)(p,x,hh)是一次可能的移动,当且仅当(p,h)(q,a,Z)。常用+表示由一次或多次移动组成的序列。用*表示由零次或多次移动组成的序列。注意“零”次
4、移动并不改变当前的构形。,5.1.2 PDA的 构形和移动,PDA M 所识别的语言L(M)可表示为:L(M)=*(P0,,Z0)*(P,)(空栈接收)或者L(M)=*(P0,,Z0)*(P,h)pF(终态接收),例5.1 考虑下表定义的两状态PDA,其的两个状态分别是p和Q,(p,a,Z)=(p1,h1),(p2,h2),输入符号是0和1,栈符号是R,B和G。该PDA识别由符号0和1组成的所有回文(Palindrome)。,这个自动机是非确定的,因为在行3和行6包含了可供选择的移动;也因为无输入符号(如在行7)时照样可进行移动,而且此时存在相应的选择。该PDA的开始状态时p,初始栈内容时R。
5、它停止于空栈。用该PDA识别输入串001100,其识别过程如下:,(p,001100,R)(p,01100,BR)由行1 或(Q,001100,)由行7(阻塞)(p,01100,BR)(p,1100,BBR)由行3a或(Q,1100,R)由行3b(Q,1100,R)(Q,1100,)由行10(阻塞)(p,1100,BBR)(p,100,GBBR)由行5(p,100,GBBR)(p,00,GGBBR)由行6a,或(Q,00,BBR)由行6b(p,00,GGBBR)(p,0,BGGBBR)由行4(p,0,BGGBBR)(p,BBGGBBR)由行3a(阻塞)或(Q,GGBBR)由行3b(阻塞)(Q,
6、00,BBR)(Q,0,BR)由行8(Q,0,BR)(Q,R)由行8(Q,R)(Q,)由行10(接收),5.1.3 上下文无关语言与PDA,联系PDA和上下文无关语言的一个重要定理是:定理5.1 对每一个上下文无关语言L,存在一个恰好识别L的非确定的PDA M,反之亦然。这个定理在编译系统中的实际重要性在于:现有的大多数高级程序设计语言都可用上下文无关文法描述。因此定理5.1隐含了:识别这个语言的机械识别器必是PDA。,5.1.3 上下文无关语言与PDA,定理5.1包含两方面含义:给定一个上下文无关语言,存在一个识别它的PDA M;反过来,给定一个PDA M,可以根据它构造出一个等价的上下文无
7、关文法。前者对编译程序的构造很有吸引力,但后者则不然。,算法5.1 从CFG到NDPDA给定 CFG G=(N,P,S)可以构造 一个相应的非确定的PDA M:M=(Q,H,q0,Z0,F)它只有一个状态q和下面的转换规则:对P中每一个形如Aw的产生式,(q,A)包含(q,w);对每个a,(p,a,a)包含(q,)且Q=q=H=Nq0=qZ0=SF为终态集(可空)。这个PDA停止于空栈。,例5.2 考虑文法S0S1|c该文法描述语言0*c1*,其中0的个数和1的个数相等。转换规则是:1.(q,0,0)=(q,)2.(q,1,1)=(q,)3.(q,c,c)=(q,)4.(q,S)=(q,0S1
8、),(q,c)(其中可与任何合法输入符号匹配)其中规则1、2、3根据前面的规则构造,4根据规则 构造。,使用例5.2分析句子,给定输入串00c11,所构造的PDA用下面的移动序列来接收它(注意,我们可从构形中省掉状态,因为它总是相同的):(q,00c11,S)4a(q,00c11,0S1)1(q,0c11,S1)4a(q,0c11,0S11)1(q,c11,S11)4b(q,c11,c11)3(q,11,11)2(q,1,1)2(q,)(接收),输入串,栈和句型,由算法5.1构造的非确定的PDA的一个有趣特性是由下面的定理表示出来的。定理5.2 令(q,y,h)是某个文法G相关的NDPDA的任
9、意构形,其中输入串是xy,如果(q,xy,S)*(q,y,h)那么xh是G的一个最左句型,换言之,S*xh(S是G的开始符号)。上述定理反过来也成立:给定G中的任何句型xh,如果x是一个终结符串,而且h中至多最左符号是终结符,那么,(q,y,h)是该NDPDA的一个构形,而且(q,xy,S)*(q,y,h),5.2 消除左递归方法 5.2.1 文法的左递归性,文法的左递归性属文法递归性的一种,在一文法中,所有形如 AxAy x,y(N)*,AN称为递归产生式(或自嵌入产生式)。若其中x=,则有AAy称之为直接左递归产生式。,5.2.1 文法的左递归性,若其中y=,则有AxA称之为直接右递归产生
10、式。若一文法中至少含有一条递归产生式,或在用该文法推导符号串的过程中,存在AA或AA或AA形式的推导,则称该文法是(直接)递归的。,非确定的自顶向下分析存在的问题,非确定的自上而下的分析法:对任何输入串W试图用一切可能的办法,从文法的开始符号出发,自上而下地为它建立一棵语法树。或者说,为输入串寻找一个最左推导,如果试探成功,则W为相应文法的句子,否则W就不是文法的句子。这种分析过程本质上是一种穷举试探过程,反复使用不同的规则,谋求匹配输入串的过程。,回溯现象 侯选式:我们把文法中每个非终结符A的右部(可能有多个)称为A的侯选式。当某非终结符对应多个侯选式时,如果其中有几个侯选式的右部左端第一个
11、符号相同,那么就会使得语法分析程序无法根据当前的输入符号准确地决定选用哪个侯选式来替换A,只能采用试探的办法,任选某个侯选式去试探一次。如果不能导致最终地匹配,只得再换另一个侯选式去试探,这就造成了回溯现象。所以这种带回溯的自顶向下分析法,实际上是采用了一种穷尽一切可能选择的试探法。,回溯现象:在回溯之前,编译程序实际已经做了大量薄记工作,包括语义翻译工作在内。在回溯时,要清除这些内容,然后开始重新薄记,这就降低了分析效率。左递归现象:回溯使语法分析器的动作不稳定,左递归会使分析程序进入到无穷的循环之中,这些问题都和描述语言的文法有直接关系。,5.2.2 用扩展的BNF表示法消除左递归,在前面
12、,文法的产生式都是采用巴科斯范式(BNF)描述的,它使得文法更严谨、简洁和清晰。为了消除文法的左递归,需对巴科斯范式进行扩展,增加以下元符号:花括号:表示符号串x出现零次或多次。:n表示符号串x能重复出现的最大次数,m表示符号串x能重复出现的最小次数。方括号 方括号用来表示可选项。x=x或,表示符号串x可出现一次或不出现。可以用来定义某些高级语言中的“条件语句”。圆括号()利用圆括号可提出一个非终结符的多个产生式右部的公共因子。例如,Axy|xw|xz 可写成 Ax(y|w|z),利用下面的两条规则,可把包含直接左递归的产生式转换成用扩展BNF表示法表示的产生式。提公因子每当一条产生式中有公因
13、子可提的时候,就把它提出来,若原产生式是 Ax|xy则可写成 Ax(y|),这里把当作最后一个候选式。若 Ax|y|z|Av是一组产生式,且它只有一个直接左递归的右部位于最后,则可把这组产生式变换成如下形式:A(x|y|z)v也就是说,使用上述规则,可把产生式改写成相对于某个非终结符而言,至多只含一个直接左递归的右部;然后,利用上述规则消除这个直接左递归。,5.2.3 直接改写文法,设产生式 U Uxy此产生式称为直接左递归形式。其中,x和y是两个符号串,y的首字符不是U。产生式为直接左递归形式,可直接改写为一个等价的非直接左递归形式 U yU U xU其中U是新引进的非终结符号。显然,这种形
14、式与原形式是等价的,即从A推出的符号串是相同的。,直接左递归更一般的形式 U Ux1Ux2Uxmy1y2yn其中,xi(i=1,2,m)yi(i=1,2,n),yj的头字符都不是U,xi 都不是,则有 U y1U y2UynU U x1U x2UxmU,消除左递归举例。例如:有文法:SSa 可改写为:SbS Sb SaS|表达式文法:消除左递归后:EE+T|T ETE E+TE|TT*F|F TFT T*FT|F(E)|i F(E)|i,消除间接左递归 1重新改写文法 2先将间接左递归变为直接左递归,然后再按上述方法消除。例(1)AaB 用(1)(2)去替换(3)中的A可得:(2)ABb(1)
15、BaBc(3)BAc(2)BBbc(4)Bd(3)Bd 消除左递归后可得:B(d|aBc)B BbcB|最终文法为:(1)AaB(2)ABb(3)B(d|aBc)B(4)BbcB|,5.2.4 消除所有左递归的算法,若一个文法不含形如A+A的推导,也不含有以为右部的产生式,那么,执行下面的算法将保证消除该文法中的所有左递归:将文法G的所有非终结符整理成某一顺序U1,U2,Un。for i:=1 to n do begin for j:=1 to i1 do begin把产生式Ui Uj替换成 Ui 12m(其中Uj 12m 是该文法中关于Uj的所有产生式)end;消除Ui产生式中的直接左递归
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自上而下语法分析 自上而下 语法分析 PPT 课件
链接地址:https://www.31ppt.com/p-5643106.html