收藏 分享(赏)

编译原理—第2章 前后文无关文法和语言.pptx

上传人:tkhy51908 文档编号:9249103 上传时间:2019-07-31 格式:PPTX 页数:79 大小:262.83KB
下载 相关 举报
编译原理—第2章 前后文无关文法和语言.pptx_第1页
第1页 / 共79页
编译原理—第2章 前后文无关文法和语言.pptx_第2页
第2页 / 共79页
编译原理—第2章 前后文无关文法和语言.pptx_第3页
第3页 / 共79页
编译原理—第2章 前后文无关文法和语言.pptx_第4页
第4页 / 共79页
编译原理—第2章 前后文无关文法和语言.pptx_第5页
第5页 / 共79页
点击查看更多>>
资源描述

1、编译原理第2章 前后文无关文法和语言,计算机与软件学院 陆克中 18098923437, ,1,第2章 前后文无关文法和语言,2,本章讨论与编译实现相关的形式语言理论基本概念,主要内容有: 文法及语言的表示 文法和语言的定义 句型的分析 文法的化简和改造 文法和语言的Chomsky分类 文法与语言 一个程序设计语言的确切定义是构造编译程序的重要前提。 文法被用来精确而无歧义地描述语言的构成方式。 文法描述语言的时候不考虑语言的含义。,2.1 文法及语言的表示,3,程序设计语言的定义 语言是一个记号系统 汉语符合汉语语法的句子的全体。 英语符合英语语法的句子的全体。 程序设计语言该语言的程序的全

2、体。 程序设计语言由语法和语义定义: 语法:定义每个程序构成的规则。 语义:定义每个程序的意义。,2.1 文法及语言的表示,4,程序设计语言的定义 语法 定义:是一组规则,用它可以形成和产生一个合适的程序。 描述工具:文法。 作用:定义什么样的符号序列是合法的,与符号的含义无关。 语义 分类: 静态语义:一系列限定规则,确定哪些合乎语法的程序是合适的。 动态语义:表明程序要做什么。 描述工具:指称语义,操作语义等。 作用:检查类型匹配,变量作用域等。,2.1 文法及语言的表示,5,文法的直观概念 如何来描述一种语言? 如果语言是有穷的(只含有有穷多个句子),可以将句子逐一列出来表示。 如果语言

3、是无穷的,要找出语言的有穷表示,有两个途经: 生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造 识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”,要么永远继续下去。 文法是描述语言的语法结构的形式规则。,2.2 文法和语言的定义,6,基本概念和术语 形式语言和编译理论中的最基本概念符号串和符号串集合 基本定义 它们的运算,2.2.1 基本概念和术语,7,字母表 定义:元素的非空有穷集合。 例:=01 ,=ab,c 元素也称为符号,字母表也称符号集。 程序语言的字母表由字母数字和若干专用符号组成

4、。,2.2.1 基本概念和术语,8,符号串 定义:由字母表中的符号组成的任何有穷序列。 例: 0,00,10是字母表=01上的符号串。 a,ab,aaca是=abc上的符号串。 在符号串中,符号是有顺序的,顺序不同,代表不同的符号串,如:ab和ba不同。 不含任何符号的符号串称为空串,用表示。 注意:并不等于空集合。 符号串长度:符号串中含有符号的个数。 如:|abc|=3,|=0。 约定:常用a,b,c,及S,T,U,X,Y,Z等表示符号;用t,u,x,y,z等表示符号串,用A,B,C等给符号串集合命名。,2.2.1 基本概念和术语,9,子串 设有非空符号串u=xvy,则称v为符号串u的子串

5、。 例如:符号串x=a+b*(c+d),则、a、a+b*与(c+d)等都是x的子符号串,且其长度分别为|a|=1、|a+b*|=4、|(c+d)|=5。 前缀和后缀 如果z=xy是一个符号串,则x是z的前缀 ,而y是z的后缀。如果y非空,则x是z的真前缀;如果x非空,则y是z的真后缀。 例:字母表A=a,b,c上的符号串x=abc, 则x的前缀:, a, ab, abc;后缀:, c, bc, abc;真前缀:, a, ab;真后缀:, c, bc。,2.2.1 基本概念和术语,10,符号串的运算 符号串的连接:设x、y是符号串,它们的连接是把y的符号写在 x的符号之后得到的符号串xy。 例:

6、x=ST,y=abu,则xy=STabu 。 显然,x=x=x。 符号串的方幂:把符号串a自身连接n次得到的符号串an=aaaa 例:a1=a,a2=aa,a0=。,2.2.1 基本概念和术语,11,符号串集合 定义:若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。 符号串集合的乘积: 符号串集合A和B的乘积定义为:AB=xy|xA且yB,即AB是由A中的串x和B中的串y连接而成的串xy组成的集合。 例:若集合A=ab,cde,B=0,1,则 AB=ab0,ab1,cde0,cde1。 显然,A=A=A。 符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的方

7、幂,其中i是非负整数。具体定义如下: A0 = A1 =A, A2=AA Ak= AAA(k个),2.2.1 基本概念和术语,12,集合的闭包 闭包 集合的闭包*定义如下:*=0123 例:设有字母表=0,1,则*=012=,0,1,00,01,10,11,000,,即*表示上所有有穷长的串的集合。 正闭包 + = 123称为的正闭包。 +表示上的除外的所有用穷长串的集合。 *= 0+ +=*=*,2.2.1 基本概念和术语,13,例题 定义标识符是由字母开头、后跟字母或数字的任意组合构成,设A=a,b,z,B=0,1,9,将所有标识符的集合用A和B的运算来表示。,2.2.1 基本概念和术语,

8、14,例题 定义标识符是由字母开头、后跟字母或数字的任意组合构成,设A=a,b,z,B=0,1,9,将所有标识符的集合用A和B的运算来表示。A(AB)*,2.2.1 基本概念和术语,15,小结 符号与字母表 符号串 符号串的运算 符号串集合 集合的闭包 字母表的闭包,2.2.2 文法和语言的形式定义,16,“我是大学生”是汉语的一个句子 用表示的汉语句子的构成规则: 句子 主语谓语 主语 代词名词 代词 我你他 名词王明大学生工人英语 谓语动词直接宾语 动词是学习 直接宾语代词名词,2.2.2 文法和语言的形式定义,17,句子“我是大学生”的推导过程如下: 从句子出发,反复把规则中的左边的成分

9、替换成右边的成分 句子 主语谓语代词谓语 我谓语 我动词直接宾语 我是直接宾语 我是名词 我是大学生,2.2.2 文法和语言的形式定义,18,文法介绍 包括四个组成部分: 一组终结符号(不能被替换的符号,单词符号) 一组非终结符号(能够被替换为终结符号或非终结符号,语法单位) 一个开始符号(从这个符号开始替换,最大语法单位程序) 一组产生式(替换规则,把左边的字符串替换为右边的字符串),2.2.2 文法和语言的形式定义,19,关键思路 从文法的开始符号出发 反复使用产生式,对非终结符进行替换(展开) 直到整个字符串中不再包含非终结符 这时,得到了这个文法的一个句子(一个程序) 这个过程称为推导

10、,2.2.2 文法和语言的形式定义,20,文法的形式定义 产生式(规则) 产生式是一个有序对(, ),通常写作(或:=) 文法定义 文法G(Grammar)定义为四元组(VN, VT, P, S) VN (Nonternimal):非终结符集 VT (Terminal):终结符集 P (Production):产生式(规则)集合 S:开始符号或识别符号,2.2.2 文法和语言的形式定义,21,文法的形式定义 说明 V=VNVT,V称为文法G的字母表 P中产生式形如:,其中VN,V* VN、VT和P是非空有穷集 VNVT= S是一个非终结符,且至少要在一条产生式的左部出现 非终结符代表一个语言中

11、的语法成分,如,它是构成程序的一个语法成分,这个符号本身不会在程序中出现,而终结符是组成程序的具体的符号,2.2.2 文法和语言的形式定义,22,文法形式定义上的约定 文法习惯上只将产生式写出,并有如下约定: 第一条产生式的左部是开始符号,或用GS表示S是开始符号 用尖括号括起的是非终结符,否则为终结符。或者大写字母表示非终结符,小写字母表示终结符 G可写成GS,S是开始符号 希腊字母代表由终结符号和非终结符号组成的符号串、 左部相同的产生式A、A可以记为A|,其中“|”是“或”的意思,、分别称为侯选式,2.2.2 文法和语言的形式定义,23,文法形式定义上的约定 例 文法G=(VN, VT,

12、 P, S),其中:VN=S,VT=0, 1,P=S0S1, S01,开始符为SG: S0S1|01GS: S0S1|01,2.2.2 文法和语言的形式定义,24,文法形式定义上的约定 例 文法G=(VN, VT, P, S),VN =标识符, 字母, 数字,VT =a,b,c,x,y,z,0,1,9,P=,a, , z,0,9,S=GS: SA|SA|SDAa|b|zD0|1|9,2.2.2 文法和语言的形式定义,25,直接推导和直接归约 是文法G的产生式,若有v, w满足:v=, w=, 其中, V*,则称v直接推导出w ,也称w直接归约到v ,记作 vw 直接推导就是用产生式的右部替换产

13、生式的左部的过程 直接归约就是用产生式的左部替换产生式的右部的过程 例 文法G: S0S1, S01有直接推导:S0S1 ( S0S1)0S100S11 ( S0S1)00S11000S111 ( S0S1)000S11100001111 ( S01 ),2.2.2 文法和语言的形式定义,26,直接推导序列和广义推导 直接推导序列:若存在v =u0u1.un=w, (n0),则称v+w,v推导出w,或w归约到v(至少有1步推导),这个直接推导序列的长度为n。 广义推导:若有v+w或v=w,则记为v*w,v广义推导出w,w广义规约到v(可以包含0步推导)。 三种推导的比较 直接推导()的长度为1

14、 推导(+)的长度1 广义推导(*)的长度0,2.2.2 文法和语言的形式定义,27,句型和句子 设有文法GS,若符号串是从开始符号推导出来的,即S*,则称是文法G的句型。若仅由终结符组成,即 S*,且VT*,则称是文法G的句子 例 文法GS: S0S1, S01,因为S0S100S11000S11100001111,所以S、0S1、00S11、000S111、00001111都是G的句型,00001111是G的句子 语言的定义 由文法G生成的语言记为L(G),它是文法G的一切句子的集合,即L(G)=w|S*w,且wVT* 例 文法G: S0S1, S01,S0S100S1103S13 0n-

15、1S1n-10n1n,L(G)=0n1n|n1,2.2.2 文法和语言的形式定义,28,文法和语言的关系 文法G生成的每个串都在L(G)中:根据文法,可以通过推导得到该文法相应的语言 例 GE: EE+T|T, TTF|F, F(E)|a,EE+TT+TF+Ta+Ta+TFa+FFa+aFa+aa表示一切能用符号a、+、(、)构成的算术表达式 L(G)中的每个串确实能被G生成:有了语言的要求,也可以为该语言设计文法 例 若语言由0、1符号串组成,串中0和1的个数相同,构造其文法为:G(A): A0B|1CB1|1A|0BBC0|0A|1CC,2.2.2 文法和语言的形式定义,29,推导例题1

16、文法G1:SA, AA|定义了一个什么样的语言?SASAASAAASAA L(G1)=n|n1 L(G1)=以开头后跟一个或多个的串,2.2.2 文法和语言的形式定义,30,推导例题2 文法G2: SAB, AA|, BB|,L(G2)=mn|m, n1,文法G2对句子的推导:S AB S ABAB A AAB A AB A B B B B ,2.2.2 文法和语言的形式定义,31,推导例题3 文法G3: SS|,L(G3)=nn|n1,文法G3对句子的推导:S S SSS SSS SS S,2.2.2 文法和语言的形式定义,32,推导例题4 文法G4: SS|W, WuWv|,L(G4)=n

17、umvmn|m0, n0,文法G3对句子uv的推导:S S SSS SSS SSW SWuWv WuWvuv W,2.2.2 文法和语言的形式定义,33,课堂练习 试分别构造产生下列语言的文法: (1) an+1bn|n0 (2) a2nb3n|n0 (3) a2n+1cmb3n+2|n0, m1 (4) ancmbn|n0, m1andmbn|n0, m0,2.2.2 文法和语言的形式定义,34,课堂练习 试分别构造产生下列语言的文法: (1) an+1bn|n0 an+1bn|n0=anabn|n0 G: SaSb|a (2) a2nb3n|n0 a2nb3n|n0=(aa)n(bbb)n

18、|n0 G: SaaSbbb| (3) a2n+1cmb3n+2|n0,m1 a2n+1cmb3n+2|n0,m1=(aa)nacmbb(bbb)n|n0,m1 G: SaaSbbb|aCbb CcC|c (4) ancmbn|n0,m1andmbn|n0,m0 G: SaSb|C|D CcC|c DdD|,2.2.2 文法和语言的形式定义,35,递归规则:借助于自身来定义的规则,称为递归规则 如 递归规则的存在,使得能用有穷个规则来定义无穷的语言 如果一个规则形如UxUy,则该规则是递归的 如果规则形如UUy,则称左递归的 如果规则形如UxU,则称右递归的 例 ,(左递归)! (右递归),2

19、.2.2 文法和语言的形式定义,36,文法的递归性 定义:对于某文法,存在UVN, 如果U+U.,则称该文法递归于U; 如果U+U,则称该文法左递归于U; 如果U+U,则称该文法右递归于U。 例1 C语言中:+ (文法右递归于) 例2 UVx, VUy|z(都不递归),有U +Uxy,所以该文法是左递归的。 注:描述程序设计语言的文法必定都是递归的。,2.2.2 文法和语言的形式定义,37,文法的等价 若L(G1)=L(G2),则称文法G1和G2是等价的 引理2.1 G=(VN, VT, P, S),AB,B1, B2, Bn是P中的全部B-产生式,又设G1=(VN, VT, P1, S)是这

20、样的方法,其中,P1是从P中删去AB并添加产生式A2, A2, An所组成的集合,则L(G1)=L(G) 例 文法 G1A: A0R A01 RA1G2S: S0S1 S01所定义的语言都是0n1n,两文法等价,2.3 句型的分析,38,任务:句型分析就是识别一个符号串是否为某文法的句型,是某个推导的构造过程。 对于程序设计语言来说,句型分析就是一个识别输入符号串是否为语法上正确的程序的过程。 它是一种推导或语法树的构造过程。对于一个给定的符号串,试图按照文法的规则构造其对应的推导,或语法树。,2.3.1 规范推导与规范规约,39,最左推导和最右推导 对于一个推导序列中的每一步直接推导,都是对

21、最左(最右)非终结符进行替换 规范推导 最右推导也称规范推导 规范规约 规范推导的逆过程称为最左规约,也称规范规约 若用表示规约,设Aa是文法G中的一个规则,则对于xAyxay,有xayxAy。,2.3.1 规范推导与规范规约,40,例1 文法GS: SAB AA0|1B B0|S1,请给出句子101001的最左和最右推导最左推导:SAB1BB10B 10S110AB1101BB11010B1101001最右推导:SABAS1AAB1AA01A1B01A10011B1001101001,2.3.1 规范推导与规范规约,41,例2 文法G: EE+T|T TTF|F F(E)|i,句子i+ii的

22、推导过程如下:最左推导:EE+TT+TF+Ti+Ti+TFi+FFi+iFi+ii最右推导:EE+TE+TFE+TiE+FiE+iiT+iiF+iii+ii,2.3.1 规范推导与规范规约,42,句型的分析算法分类 自上而下分析法 (Top-Down parsing) 自下而上分析法 (Bottom-Up parsing),2.3.1 规范推导与规范规约,43,自上而下的分析方法 定义:从文法的开始符号出发,反复使用文法的产生式,寻找与输入符号串匹配的推导 例 文法G: ScAd Aab Aa,识别输入串w=cabd是否为该文法的句子 推导过程:ScAdcabd 对输入串cabd自上而下构造语

23、法树的另一过程ScAdcad不成功,不成功的原因是选错产生式Aa 自上而下分析的主要问题是选择产生式 假定要被代换的最左非终结符号是B,且有n条规则:BA1|A2|An,那么如何确定用哪个右部去替代B?,2.3.1 规范推导与规范规约,44,自下而上的分析方法 定义:从输入符号串开始,逐步进行归约,直至归约到文法的开始符号 例 文法G: ScAd Aab Aa,识别输入串w=cabd是否为该文法的句子。cabd cAdS 对输入串cabd的两种归约过程:cabdcAd S 归约到开始符cabdcAbd 不能归约到开始符 在自下而上的分析方法中,每一步都是从当前串中选择一个子串加以归约,该子串暂

24、称“可归约串”。 如何确定“可归约串”是自下而上分析的主要问题。,2.3.2 语法树和二义性,45,语法树 作用:直观地描述上下文无关文法的句型推导过程。给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树 定义:语法树是这样的一个语法结构,它的结点由符号组成。根结点对应于识别符号。只有非终结符号对应的结点有子结点。并且,一个结点和它的子结点分别对应于文法中的一个规则的左部和右部 引入语法树的意义:作为识别句子的辅助工具,语法树可以表示句子的结构。这一点对于其后的语义分析有非常重要的意义,2.3.2 语法树和二义性,46,语法树的相关概念 结点:每个树的结点对应于一个符

25、号。结点的名字就是该符号 边:两个结点之间的连线 根结点:没有边进入的结点 分支:某个结点向下射出的边和其结点称为分支。(父子结点,兄弟结点) 子树:语法树的某个结点和它向下射出的部分 末端结点:没有向下射出的边的结点成为末端结点。在相对于句型的语法树中,末端结点可能是非终结符号,2.3.2 语法树和二义性,47,给定文法G,G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树(推导树)。这棵树具有下列特征: 根结点的标记是开始符号S; 每个结点的标记都是V中的一个符号; 若一棵子树的根结点为A,且其所有直接子孙的标记从左向右的排列次序为A1A2AR,那么 AA1A2AR一定是

26、P中的一条规则; 若一标记为A的结点至少有一个除它以外的子孙,则AVN ; 若树的所有叶结点上的标记从左到右排列为字符串w,则w是文法G的句型;若w中仅含终结符号,则w为文法G所产生的句子。,2.3.2 语法树和二义性,48,从推导构造语法树 方法:把识别符号做为根结点,对每一个直接推导画一个分支,分支的名字是直接推导中被替换的非终结符号,直到再无分支可画结束 例 推导SAB AcBd Accddabccdd,S,B,B,d,b,a,A,c,d,c,2.3.2 语法树和二义性,49,语法树的构造过程SABAcBdAccddabccdd,S,S,B,A,S,B,B,d,A,c,S,B,B,d,A

27、,c,d,c,S,B,B,d,b,a,A,c,d,c,(1),(2),(3),(5),(4),2.3.2 语法树和二义性,50,从语法树构造推导 方法:从分支建立直接推导,然后从语法树中剪去之这个分支,直到无分支可剪 语法树表明了在推导过程中使用了哪条规则和使用在哪个非终结符号上,但它并没有表明使用规则的顺序 一棵语法树可能对应不止一种推导,2.3.2 语法树和二义性,51,从语法树构造推导的过程 例 文法GS: SAB AaAb|ab BcBd|cd,存在下面两种可能的归约:(1) abccddAccdd AcBdABS(2) abccddabcBd abBABS,S,B,B,d,b,a,A

28、,c,d,c,(1),(2),(3),(4),2.3.2 语法树和二义性,52,语法树与句型 从左到右读出叶子结点得到的符号串,为文法的句型。也把该语法树称为该句型的语法树 例 文法G: EE+T|T TTF|F F(E)|i,句型T+TF的推导过程与语法树最左推导:EE+TT+TT+TF最右推导:EE+TE+TFT+TF,从语法树中看不出句型中的符号被替代的顺序,2.3.2 语法树和二义性,53,文法的二义性 文法G: EE+E|EE|(E)|i 句子 ii+i 对应的语法树 两个不同的最左推导: 推导1:EE+EEE+EiE+Eii+Eii+i 推导2:EEEiEiE+Eii+Eii+i,

29、2.3.2 语法树和二义性,54,文法的二义性(Ambiguity) 定义:如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的 二义性文法存在某个句子,它有两个不同的最左(右)推导,文法G1: EE+E|EE|(E)|i,文法G2: ET|E+T TF|TF F(E)|i,2.3.2 语法树和二义性,55,为什么要避免文法产生二义性? 二义性的文法将给编译程序的执行带来问题。当编译程序对二义性文法生成的句子结构进行语法分析时,就会产生两种甚至更多种不同的理解。语法结构上的不确定性,必将导致语义处理上的不确定性。因此,希望描述语言的文法是无二义性的。,2.3.2 语法树和二义性,

30、56,如何消除文法的二义性? 方法一:不改变文法中原有的语法规则,仅加进一些语法的非形式规定。 如1 对于文法GE: Ei EE+E EEE E(E),规定运算符优先顺序和结合律,即优先于+,+和服从左结合。 如2 Pascal中二义性的消除是通过约定,如在符合if 语句中,else子句总是属于最近的尚无else子句的那个if语句。 方法二:构造一个等价的无二义性的文法,即把排除二义性的规则合并到原有文法中,改写原有的文法。 如 文法GE: Ei EE+E EEE E(E),将运算符的优先顺序和结合规则加到原有文法中,则可构造无二义性的文法。GE: ET|E+T TF|T*F F(E)|i,2

31、.3.2 语法树和二义性,57,二义性文法的改造 文法的二义性是不可判定的。 文法的二义性性与语言二义性的区别 因为可能有两个不同的文法G1和G2,其中有一个是二义性的,但却有L(G1)=L(G2)。如果产生某上下文无关语言的每个文法都是二义性的,则说明该语言是先天二义性的,即该语言是二义性的。,2.3.3 短语和句柄,58,短语与句柄的定义 设是文法GS中的一个句型,如果有S*A且A+,则称是句型相对于非终结符A的短语 特别的如有A,则称是句型相对于规则A的直接短语 一个句型的最左直接短语称为该句型的句柄 句柄就是“可归约串” 用语法树求短语、句柄 短语:(子)树的末端结点形成的符号串是相对

32、于(子)树根的短语 直接短语:简单子树的末端结点形成的符号串是相对于简单子树根的直接短语 句柄:最左简单子树的末端结点形成的符号串是句柄,2.3.3 短语和句柄,59,用语法树求短语、句柄 例 对于文法GS: SAB AAa|bB Ba|Sb,求句型baSb的全部短语、直接短语和句柄baSb为句型baSb的相对于S的短语ba为句型baSb的相对于A的短语a为句型baSb的相对于B的短语,且为直接短语和句柄Sb为句型baSb的相对于B的短语,且为直接短语,2.3.3 短语和句柄,60,用语法树求短语、句柄 例 文法GE: EE+T|T TTF|F F(E)|i的一个句型是TF+i因为E*T+i

33、且TTF,所以TF是句型相对于T的短语,且是相对于TTF的直接短语因为E*TF+F且Fi,所以i是句型相对于F的短语,且是相对于Fi的直接短语因为E*E且E+TF+i,所以TF+i是句型相对于E的短语TF是最左直接短语,即句柄虽然F+i是句型TF+i的一部分,但不是短语,因为尽管有E+F+i,但是不存在从文法开始符E*TE的推导,2.3.3 短语和句柄,61,用语法树求短语、句柄 从句型的语法树上很容易找出句型的短语,语法树中每棵子树的末端结点构成相对于子树根的短语。 例 文法GE: EE+T|T TTF|F F(E)|i的一个句型是TF+i,语法树见右图五棵子树对应三个短语TF、i、T F+

34、i两棵两层子树对应两个直接短语TF、i位于最左边的两层子树的末端结点构成句柄TF,2.3.3 短语和句柄,62,课堂练习 对于文法G: S(AS) S(b) A(SaA) A(a),试指出句子(b)a(a)(b)的全部短语、直接短语和句柄,2.3.3 短语和句柄,63,课堂练习 对于文法G: S(AS) S(b) A(SaA) A(a),试指出句子(b)a(a)(b)的全部短语、直接短语和句柄短语为:(b)、(a)、(b)a(a)、(b)和(b)a(a)(b),其中(b)、(a)和(b)为直接短语,(b)为句柄,2.4.1 无用符号和无用产生式的删除,64,有用符号的判定 符号XVNVT有用,

35、指X至少出现在一个句子的推导过程中,也即X必须同时满足: 可达:S*X,、V* 可终止: X*w,wVT* 否则X是无用的,包含无用符号的产生式是无用产生式。 目的:删除无用符号和产生式。,2.4.1 无用符号和无用产生式的删除,65,算法2.1:先找可终止的符号和产生式 V=VT Repeat For each AX1X2Xm If Xi, XiV V = V +A Until V不再增大 Return V 例 G: SaS SW SU Ua VbV Vac WaW,2.4.1 无用符号和无用产生式的删除,66,算法2.2:再找可达的符号和产生式 V=S Repeat For each AX

36、1X2Xm If AV V = V +X1 , X2 , , Xm Until V不再增大 Return V 继续上例得到?,2.4.2 -产生式的消除,67,-产生式:右部为的产生式。 思想: 找出可能产生的非终结符(算法2.3)。 将产生式右边,可能产生的非终结符A,分别用和A替换(算法2.4)。 处理S*的特殊情况(算法2.5)。,2.4.2 -产生式的消除,68,算法2.3 W= Repeat For each AX1X2Xm If Xi, XiW W= W+A Until W不再增大 Return W 例 G: SaA ABC BbB CcC B C,得到W=?,2.4.2 -产生式

37、的消除,69,算法2.4 记算法2.3得到的集合Wi为W 对任一AX1X2XmP,产生形如AY1Y2Ym的产生式: 若XiW,取Yi=Xi; 若XiW,分别取Yi=Xi和Yi=代入; 取步骤2产生的、除了A外的所有产生式构成目标产生式集P继续上例,得到的产生式是?,2.4.2 -产生式的消除,70,算法2.5 引入新的S1VNVT为开始符号 令产生式集P=PS1|SP 使用算法2.4消去P中的产生式 最后再添加S1 仅存在S1产生式,且S1不出现在任何产生式的右部 例 G: ScS SAB AaAb BBb A B,得到?,2.4.3 单产生式的消除,71,单产生式 右部仅含一个非终结符的产生

38、式,即形如AB的产生式称为单产生式。 利少害多,要消除。 特别的,AA无意义。 思想 若有AB,使用B可产生的符号串替换B。,2.4.3 单产生式的消除,72,算法2.6 For each Ai W(Ai)=Ai Repeat For each CD If CW(Ai) W(Ai)= W(Ai)+D Until W(Ai)不再增大 构造P=例 G: SAB SA SB AaAb Aab BBb Bb,2.5 文法和语言的Chomsky分类,73,Chomsky对文法中的规则施加不同限制,将文法和语言分为四大类: 0型文法(PSG)0型语言或短语结构语言 1型文法(CSG)1型语言或上下文有关语

39、言 2型文法(CFG)2型语言或上下文无关语言 3型文法(RG)3型语言或正则(正规)语言,2.5 文法和语言的Chomsky分类,74,0型文法 如果对于某文法G,P中每个规则具有下列形式:,其中V+,V*,则该文法G为(Chomsky)0型文法或短语结构文法,缩写为PSG,相应的语言称为0型语言或短语结构语言。 如 GS: S0AB 1B0 BSA|01 A1SB1 A0S0B,L0(GS)= ,2.5 文法和语言的Chomsky分类,75,1型文法(上下文有关) 它是0型文法的特例,对P中的任一产生式,都|,仅仅 S除外,但S不得出现在任何产生式的右部。例 GS: SaSBE SaBE

40、EBBE aBab bBbb bEbe eEee 1型文法产生式的一般形式是 A,,V*,AVN,V,它表示当A的上文为且下文为时可把A替换成,因此称1型文法为上下文有关文法。,2.5 文法和语言的Chomsky分类,76,2型文法(上下文无关文法) 它是1型文法的特例,对任一产生式,都有 VN ,(VNVT)*例 GS: SAB ABS|0 BSA|1 2型文法产生式的一般形式是: A,它表示不管A的上下文如何都可把A替换成,因此被称为上下文无关文法。 通常程序设计语言的文法,可用2型文法来描述,因此我们重点研究2型文法,如C,Pascal。,2.5 文法和语言的Chomsky分类,77,3型文法(正规文法) 它是2型文法的特例,任一产生式的形式都为 AaB或Aa,其中A,BVN,aVT例 GS: S0A|1B|0 A0A|1B|0S B1B|1|0在程序设计语言中,3型文法通常用来描述单词的结构。,2.5 文法和语言的Chomsky分类,78,2.5 文法和语言的Chomsky分类,79,四种文法之间的逐级“包含”关系,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报