ch自顶向下语法分析方法实用.pptx
![资源得分’ 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)
《ch自顶向下语法分析方法实用.pptx》由会员分享,可在线阅读,更多相关《ch自顶向下语法分析方法实用.pptx(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 语法分析就是识别由词法分析给出的单词符号序列语法分析就是识别由词法分析给出的单词符号序列是否是给定文法的正确句子是否是给定文法的正确句子(程序程序).).语法分析常用的方法语法分析常用的方法:n自顶向下分析自顶向下分析n自底向上分析自底向上分析 自底向上分析分为自底向上分析分为:算符优先分析算符优先分析LRLR分析分析第五章 自顶向下语法分析第1页/共74页2自顶向下分析(面向目标的分析方法)自顶向下分析(面向目标的分析方法)从文法的开始符号出发企图推导出与输入的单词串完从文法的开始符号出发企图推导出与输入的单词串完全相匹配的句子全相匹配的句子.自顶向下分析方法分为自顶向下分析方法分为:l
2、确定的分析方法对文法有一定的限制。确定的分析方法对文法有一定的限制。l不确定的分析方法回溯的分析方法,一种穷举的不确定的分析方法回溯的分析方法,一种穷举的试探方法。试探方法。第五章 自顶向下语法分析第2页/共74页35.1 确定的自顶向下分析若有文法G1S:S-pA|qB A-cAd|a B-dB|b构造输入串W=pccadd的语法树。确定的自顶向下分析方法是从文法的开始符号确定的自顶向下分析方法是从文法的开始符号出发,如何根据当前的输入符号唯一确定选用出发,如何根据当前的输入符号唯一确定选用哪个产生式替换相应非终结符往下推导,或构哪个产生式替换相应非终结符往下推导,或构造一颗相应的语法树。造
3、一颗相应的语法树。文法的特点:文法的特点:1 1)每个产生式的右部都)每个产生式的右部都由终结符号开始;由终结符号开始;2 2)若两个产生式有相同)若两个产生式有相同的左部,则它们的右部由不同的左部,则它们的右部由不同的终结符开始。的终结符开始。第3页/共74页4 文法文法G2SG2S为:为:S-Ap|BqS-Ap|Bq A-a|cA A-a|cA B-b|dB B-b|dB 给出输入串给出输入串W=ccapW=ccap的推导过的推导过程。程。文法的特点:文法的特点:1 1)产生式的右部不全是由终结符开始;)产生式的右部不全是由终结符开始;2 2)若两个产生式有相同的左部,则它们的右部是由不同
4、)若两个产生式有相同的左部,则它们的右部是由不同的终结符或非终结符开始;的终结符或非终结符开始;3 3)文法中无空产生式。)文法中无空产生式。5.1 确定的自顶向下分析第4页/共74页5文法文法G3SG3S为:为:S-aAS-aA S-d S-d A-bAS A-bAS A-A-给出给出W=abdW=abd的推导过程。的推导过程。5.1 确定的自顶向下分析文法的特点:文法的特点:1 1)文法中有空产生式。)文法中有空产生式。第5页/共74页6【FIRST 集定义定义】设设G=(VN,VT,S,P)是上下文无关文法是上下文无关文法,又设又设 是文法是文法 G 的的任一字符串,定义任一字符串,定义
5、 的首符集的首符集FIRST()=a|a,a VT 若若,FIRST()FIRST()就是从就是从 可推导出的所有首终结符或可能的可推导出的所有首终结符或可能的构成构成的集合。的集合。*5.1 确定的自顶向下分析第6页/共74页7【FOLLOW 集定义定义】假设假设 S 是文法是文法 G 的开始符号,对于的开始符号,对于 G 的任何非终结符的任何非终结符 A,定义非终结符定义非终结符 A 的的后继符号后继符号的集合:的集合:FOLLOW(A)=a|S.Aa.,aVT。若若 S.A,则规定,则规定#FOLLOW(A)。)。FOLLOW(A)是是 G 的所有句型中紧接在的所有句型中紧接在 A 之后
6、出现的终结符或之后出现的终结符或#构成的集合。构成的集合。其中其中#作为输入串的结束符。作为输入串的结束符。*5.1 确定的自顶向下分析第7页/共74页8当文法中含有形如当文法中含有形如:A-A-的产生式时的产生式时,其中其中A VN,V*。若若 和和 不同时推导出空时不同时推导出空时,假定假定 ,则当,则当FIRST()(FIRST()FOLLOW(A)时,对于非终结符时,对于非终结符A的替换仍可唯一确定候选。的替换仍可唯一确定候选。*5.1 确定的自顶向下分析第8页/共74页9【SELECT集定义集定义】假设假设 A 是文法是文法 G 的任一规则,定义规则的任一规则,定义规则 A 的的选选
7、择集合择集合 SELECT 为为:SELECT(A)=其中其中 AVN,(VN VT)*,FIRST()若若 (FIRST()-)FOLLOW(A)若若 =*/*5.1 确定的自顶向下分析第9页/共74页101 1、第一个、第一个 L L 表示从左到右扫描字符串;表示从左到右扫描字符串;2 2、第二个、第二个 L L 表示最左推导;表示最左推导;3 3、1 1 表示每一步只需向前看一个符号。表示每一步只需向前看一个符号。LL(1)文法:一一个个上上下下文文无无关关文文法法 G 是是 LL(1)文文法法,当当且且仅仅当当对对 G 中中每每个个非非终终结结符符 A 的的任任何何两两个个不不同同的的
8、规规则则 A|,满足,满足:SELECT(A)SELECT(A)=其中其中、中至多只有一个能推导出中至多只有一个能推导出 串。串。5.1 确定的自顶向下分析第10页/共74页11例题分析:判断该文法是否LL(1)LL(1)文法?分析输入串分析输入串W Wabab的推导过程。的推导过程。1)S=aAS=abAS=abS2)S=aAS=aS=ab第11页/共74页125.2 LL(1)文法的判别判断判断LL(1)LL(1)文法的步骤文法的步骤:1.1.求出能够推出求出能够推出 的非终结符的非终结符 1)1)初始化初始化 设置一个数组,并初始化为设置一个数组,并初始化为“未定未定”值。值。GS:S-
9、AB|bCA-b|B-aD|C-AD|bD-aS|c第12页/共74页135.2 LL(1)文法的判别 2)2)扫描文法的产生式扫描文法的产生式 a)a)删删除除所所有有右右部部含含有有终终结结符符的的产产生生式式,若若以以某某一一非非终终结结符符为为左左部部的的所所有有产产生生式式都都被被删删除除,则则将将数数组组中中对对应应该该非非终终结结符的标记修改为符的标记修改为“否否”。b)b)若若某某一一非非终终结结符符的的某某一一产产生生式式右右部部为为,则则将将数数组组中中对对应应该该非非终终结结符符的的标标志志置置为为“是是”,并并从从文文法法中中删删除除该该非非终终结符的所有产生式。结符的
10、所有产生式。GS:S-AB|bCA-b|B-aD|C-AD|bD-aS|c第13页/共74页143)3)扫描产生式右部的每一符号扫描产生式右部的每一符号 a)a)若若所所扫扫描描到到的的非非终终结结符符号号在在数数组组中中的的对对应应标标志志是是“是是”,则则删删去去该该非非终终结结符符,若若这这使使得得产产生生式式右右部部为为空空,则则对对产产生生式式左左部部的的非非终终结结符符在在数数组组中中对对应应的的标标志志改改为为“是是”,并删去该非终结符为左部的所有产生式。并删去该非终结符为左部的所有产生式。b)b)若若所所扫扫描描到到的的非非终终结结符符号号在在数数组组中中的的对对应应标标志志是
11、是“否否,则则删删去去该该产产生生式式,若若这这使使得得产产生生式式左左部部非非终终结结符符的的有有关关产产生生式式都都被被删删去去,则则将将数数组组中中该该非非终终结结符符对对应应的的标标志志改改成成”否否“。4)4)重重复复3),3),直直到到扫扫描描完完一一遍遍文文法法的的产产生生式式,数数组组中中非非终终结结符符对应的特征再没有改变为止。对应的特征再没有改变为止。GS:S-AB|bCA-b|B-aD|C-AD|bD-aS|c第14页/共74页152.计算FIRST集 1)1)计算每一文法符号计算每一文法符号X X的的FIRSTFIRST集集-FIRST(X)-FIRST(X)(a)(a
12、)若若X X V VT T,则则FIRST(X)=X;FIRST(X)=X;(b)(b)若若X X V VN N且有产生式且有产生式X-aX-a.,a.,a V VT T,则则a a FIRST(X);FIRST(X);(c)(c)若若X X V VN N且有产生式且有产生式X-X-,则则 FIRST(X);FIRST(X);第一种方法:根据定义计算第一种方法:根据定义计算第15页/共74页162.计算FIRST集(d)若若X,Y1,Yn VN,且且有有产产生生式式X-Y1 Yn.当当 Y1,Yi-1=(其其中中1 i n),则则FIRST(Y1)-,FIRST(Yi-1)-,FIRST(Yi
13、)都包含在都包含在FIRST(X)中中;(e)若若(d)中中所所有有Yi=(i=1,n),则则FIRST(X)=FIRST(Y1)FIRST(Y2)FIRST(Yn)反反复复使使用用(b)-(e)步步直直至至每每个个符符号号的的FIRST集集合合不不再再增增大大为为止。止。*第16页/共74页17计算FIRST集(续)2)求每个符号串的求每个符号串的FIRST集集 a)若符号串若符号串 V*,=X1Xn,当当X1不能不能=,则则 FIRST()=FIRST(X1);b)若对任何若对任何j(1 j i-1,2 i n),FIRST(Xj),FIRST(Xi),则则FIRST()=(FIRST(X
14、j)-)FIRST(Xi);c)当所有当所有FIRST(Xj)都含有都含有 时时,则则 FIRST()=(FIRST(Xj)。*第17页/共74页18GS:S-AB|bC A-b|B-aD|C-AD|b D-aS|c例题分析:求文法中符号与符号串的FIRST集。FIRST(S)=FIRST(A)FIRST(B)b=b,a,FIRST(A)=b=b,FIRST(B)=a=a,FIRST(C)=FIRST(A)-FIRST(D)FIRST(b)=b,a,cFIRST(D)=a c=a,c第18页/共74页19FIRST(AB)=a,b,FIRST(bC)=bFIRST()=FIRST(b)=bFI
15、RST(aD)=aFIRST(b)=bFIRST(aS)=aFIRST(c)=cFIRST(AD)=a,b,cGS:S-AB|bCA-b|B-aD|C-AD|bD-aS|c产生式右部符号串的FIRST集:第19页/共74页20第二种方法:第二种方法:GS:S-AB|bCA-b|B-aD|C-AD|bD-aS|c第20页/共74页213.计算FOLLOW集 对文法中每一对文法中每一A VN计算计算FOLLOW(A)a)设设 S为为 文文 法法 中中 开开 始始 符符 号号,将将“#”加加 入入FOLLOW(S)中。中。b)若若A-B 是是一一个个产产生生式式,则则将将FIRST()的的非空元素加
16、入非空元素加入FOLLOW(B)中中;若若=,则则将将FOLLOW(A)也也加加入入FOLLOW(B)中。中。c)重重复复使使用用(b)直直到到每每个个非非终终结结符符的的FOLLOW集集不再增大为止。不再增大为止。*方法方法1:根据定义计算:根据定义计算第21页/共74页223.计算FOLLOW集因为当有因为当有为什么将FOLLOW(A)FOLLOW(A)加入FOLLOW(B)FOLLOW(B)呢?第22页/共74页23GS:S-AB|bCA-b|B-aD|C-AD|bD-aS|c第23页/共74页24方法方法2:第24页/共74页25FOLLOWGS:S-AB|bCA-b|B-aD|C-A
17、D|bD-aS|c第25页/共74页264.计算计算SELECT集集第26页/共74页27第27页/共74页285.3 5.3 非LL(1)LL(1)文法到LL(1)LL(1)文法的等价变换 在在确确定定的的自自顶顶向向下下分分析析中中,要要求求对对给给定定语语言言的的文文法法必必须须是是LL(1)LL(1)文法文法,然而不一定每个语言都有然而不一定每个语言都有LL(1)LL(1)文法。文法。如如何何对对一一个个语语言言的的非非LL(1)LL(1)文文法法变变换换为为等等价价的的LL(1)LL(1)形形式式?由由LL(1)LL(1)文文法法的的定定义义知知道道,当当文文法法中中含含有有直直接接
18、或或间间接接左左递递归归,或含有左公共因子时或含有左公共因子时,这样的文法肯定不是这样的文法肯定不是LL(1)LL(1)文法。文法。因因此此,首首先先设设法法消消除除文文法法中中的的左左递递归归与与提提取取左左公公共共因因子子对文法进行等价变换。在某些情况下对文法进行等价变换。在某些情况下,使其变换为使其变换为LL(1)LL(1)文法。文法。第28页/共74页29 提取提取左公共因子左公共因子是指当文法中含有形如是指当文法中含有形如:AA 1 1|2 2|.|.|n n|1 1|2 2|.|.|m m 的规则,的规则,可以把它修改成:可以把它修改成:A A A A A A A A|1 1 1
19、1|2 2 2 2|.|.|.|.|m m m m A A A A 1 1 1 1|2 2 2 2|.|.|.|.|n n n n 经过反复提取左公共因子,就能够做到使每个非终结符的所有候选首符经过反复提取左公共因子,就能够做到使每个非终结符的所有候选首符集变成两两不相交。集变成两两不相交。该做法的代价是大量引进非终结符和该做法的代价是大量引进非终结符和-产生式。产生式。1.提取左公共因子第29页/共74页30【例例】文法文法GS:SaAb Ade|d利用提取公共左因子的方法对其进行改写,得到:利用提取公共左因子的方法对其进行改写,得到:SaAbAdAAe|这是一个这是一个 LL(1)文法文法
20、第30页/共74页31【例例】文法文法GS:Sad|Ae AaS|bA对于非终结符对于非终结符 S 的规则,因为有:的规则,因为有:SELECT(Sad)SELECT(SAe)=a a,b 故它不是故它不是一个一个 LL(1)文法。文法。因为非终结符因为非终结符 S 的两个右部的公共左因子是隐式的,因此,的两个右部的公共左因子是隐式的,因此,在提取公共左因子之前,对在提取公共左因子之前,对 S 右部以非终结符右部以非终结符 A 开头的规则开头的规则(两条规则)进行相应替换,得到:(两条规则)进行相应替换,得到:Sad|aSe|bAeAaS|bA对对 S 提取公共左因子得提取公共左因子得SaS|
21、bAeSd|Se AaS|bA第31页/共74页32【例例】文法文法GS:GS:SAe|BdAaAe|bBaBd|b对于非终结符对于非终结符 S 的规则,因为有:的规则,因为有:SELECT(SAe)SELECT(SBd)=a,b a,b 故它不是故它不是一个一个 LL(1)文法。文法。对对 S 规则,用规则,用A,B的两条规则进行相应替换,得到:的两条规则进行相应替换,得到:SaAee|be|aBdd|bdAaAe|bBaBd|b对对 S 提取公共左因子得提取公共左因子得SaS|bS”SAee|Bdd S”e|dAaAe|bBaBd|b它还不是它还不是 LL(1)文法,但无论重复上述步骤多少
22、次都无法改文法,但无论重复上述步骤多少次都无法改写为写为 LL(1)文法。文法。第32页/共74页33可以看到:可以看到:1 1)不一定每个文法的左公共因子都能在有限的步骤内替)不一定每个文法的左公共因子都能在有限的步骤内替换成无左公共因子的文法。换成无左公共因子的文法。2 2)一个文法提取了左公共因子后,只解决了相同左部产)一个文法提取了左公共因子后,只解决了相同左部产生式右部的生式右部的FIRSTFIRST集不相交问题,当改写后的文法不含空集不相交问题,当改写后的文法不含空产生式且无左递归时,则改写后的文法是产生式且无左递归时,则改写后的文法是LLLL(1 1)文法,)文法,若还有空产生式
23、时,还需用若还有空产生式时,还需用LLLL(1 1)文法的判别方式进行)文法的判别方式进行判断才能确定是否为判断才能确定是否为LLLL(1 1)文法。)文法。第33页/共74页34假定文法中含有关于非终结符号假定文法中含有关于非终结符号 A A 的产生式,其形如的产生式,其形如 AA|AA|,其中,其中 不等于不等于 ,不以不以 A A 开头,称该文开头,称该文法为直接左递归或规则左递归文法。法为直接左递归或规则左递归文法。2.消除左递归消除左递归 1)消除直接左递归消除直接左递归产生式产生式 AA|AA|定义的是重复定义的是重复 串且以串且以 开头的串。开头的串。修改的思路是用修改的思路是用
24、右递归代替左递归右递归代替左递归实现句子中某子串的重复。实现句子中某子串的重复。一个文法含有下列形式的产生式一个文法含有下列形式的产生式:a)A-A a)A-A 直接左递归直接左递归 b)A-B,B-A b)A-B,B-A 间接左递归间接左递归称为左递归文法称为左递归文法.第34页/共74页35引进一个新的非终结符,把左递归规则改写成等价的非左递引进一个新的非终结符,把左递归规则改写成等价的非左递归形式:归形式:AA AAAA AA A A A AAA|一般地,对于一般地,对于 A A 的全部产生式(其中每个的全部产生式(其中每个i i不等于不等于 ,每,每个个j j不以不以 A A 开头):
25、开头):AAAA1 1|A|A2 2|.|A|.|Am m|1 1|2 2|.|.|n n可等价地改写成如下非左递归可等价地改写成如下非左递归(右递归右递归)形式:形式:AA1 1A A|2 2A A|.|.|n nA AA A1 1A A|2 2A A|.|.|m mA A|第35页/共74页36【例例】文法文法GE:EE+T|E-T|TTT*F|T/F|FF(E)|id消除非终结符消除非终结符 E,T 的直接左递归,可等价地改写成如下非的直接左递归,可等价地改写成如下非左递归形式:左递归形式:ETEE+TE|-TE|TFTT*FT|/FT|F(E)|id第36页/共74页37【例例】文法文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch 向下 语法分析 方法 实用
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内