计算机程序编译原理 第2章 形式语言概论

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文法举例
例2.6 1型文法G6=(VN ,VT ,P,S),其中VN={S,X,Y,Z}, VT={x , y , z} , P={S→xSYZ|xYZ, xY→xy, yY→yy, yZ→yz, ZY→YZ, zZ→zz} 例2.7 2型文法G7=(VN,VT,P,S),其中VN={S,T},VT={a, b,c, d},P={S→aTd, T→bT|cT|b|c } 例2.8 2型文法G8=(VN,VT,P,B),其中VN={B},VT={(,) }, P={B→(B)|BB|( )} 例2.9 2型文法G9=(VN,VT,P,S),其中VN={S},VT={0,1 }, P={S→0S1, S→01} 例2.10 正规文法G10=(VN,VT,P,A),其中VN={A, B, C, D}, VT={x, y, z },P={A→xB|yC, B→zB|y|yC, C→xD, D→yD|x }
文法和语言的几点说明
(1) 文法中某些非终结符不在任何规则的右部出现,该非 终结符称为不可到达的; (2) 文法中某些非终结符,由它不能推出终结符号串来, 称为不可终止的(无用非终结符); (3)可空终结符,可以用于消除左递归; (4)一个文法,如果它的一个句子有两棵或两棵以上的语法 树,则称该句子具有二义性。如果一个文法含有二义性的 句子,则该文法具有二义性。形如U→U的产生式。会引起 文法的二义性。
推导
定 义 2.3 G= ( VN, VT, P, S ) , α→β 是 文 法 G 的 产 生 式 , γ,δ∈V* , 若 有 v, w 满 足 : v=γαδ, w= γβδ, 则 说 : v (应用规则α→β)直接产生w 或说:w是v的直接推导 或说:w 直接归约到v 记作 v ⇒w。 例 G[S]:S→0S1, S→01 直接推导: 0S1⇒0011 (v=0S1,w=0011,使用规则S→01,γ=0,δ=1) S ⇒0S1 (v=S,w=0S1,使用规则S→0S1,γ=ε,δ= ε ) 0S1⇒00S11 (v=0S1,w=00S11,使用规则S→0S1,γ=0,δ=1) 定义2 定义2.4 v⇒+u 若存在v =α0 =>α1=>…=>αn=u, (n>0) 则称u为u的一个推导,记为v⇒+u。 定义2 定义2.5 v⇒*u 表示v⇒+u 或 v=u
符号串的运算
连接运算。 连接运算。设x, y是两个符号串,则xy称为x与y的连接。如 x=cate, y=nation, 则xy=catenation, 特别地,εα=αε=α,其中 α是任意符号串。 符号串的方幂。设x是符号串,则把x自身连接n次得到符号串z, 符号串的方幂 即z=xx…..xx称为符号串x的方幂,写成z=xn 。 符号串集合的乘积。 符号串集合的乘积。设A, B是两个符号串集合,则AB表示A与B的 乘积,定义为 AB={xy|x∈A, y∈B}。例如,A={ab,c}, B={d, efg}, 则AB={abd,abefg,cd,cefg}。特别地, {ε}A= A {ε}=A, ∅A=A∅=A=∅, 其中∅为空集。ε∉∅,空符号串不属于空集。 符号串集合的方幂。同一符号串集合的乘积。 符号串集合的正闭包。符号串集合A正闭包A+=A1∪A2∪…. 符号串集合的正闭包 ∪An∪….即A+为集合A上所有符号串的集合。 符号串集合的自反闭包。符号串集合A正闭包A*={ε}∪A+=A+∪{ε} 符号串集合的自反闭包 A+=A , S),对于文法G的任意一个句型都存在 一个相应的语法树: 树中每个结点都有一个标记,该标记是VN∪VT中的一个符号; 树的根结点标记是文法的识别符号S; 若树的一个结点至少有一个叶子结点,则该结点的标记一定 是一个非终结符; 若树的一个结点有多个叶结点,该结点的标记为A,这些叶 结点的标记从左到右分别是B1,B2,….,Bn,则 A→B1B2…Bn∈P 文法的句型都可依据其产生式来生成相应的语法树。 文法的句型都可依据其产生式来生成相应的语法树。
化简文法
例:G[S] 1) S→Be 2) B→Ce 3) B→Af 4) A→Ae 5) A→e 6) C→Cf 7) D→f S→Be B→Af A→Ae A→e
问题:一个句型是否对应唯一的一棵语法树? 问题:一个句型是否对应唯一的一棵语法树? Z 例:G[Z]: Z → aZb Z → Z Z → ab a Z b a b a Z a Z b Z b
句型aabb的语法树 句型aabb的语法树 aabb
自上而下分析方法
自上而下分析方法的基本思想是从文法的识别符号出发, 看是否能够推导出待检查的符号串,如果能够推导出这个 符号串,则表明此符号串是该文法的一个句型或句子,否 则便不是。或者说,以文法识别符号作为根结点,看其是 否能够构造一个语法树,而且此语法树的所有叶子结点从 左到右所构成的符号串恰好是待检查的符号串。如果能够 生成这样的语法树,则表明待检查的符号串是该文法的一 个句型或句子,否则便不是。 自上而下分析方法可分为:不确定的自上而下分析方法和 确定的自上而下分析方法两种。不确定的自上而下分析方 法可能需要回溯,因此时间花费多,效率低
上下文无关文法的语法树
例: G[S]: E→E+T|T →E+T|T T→T*F|F → F→(E)|i → E
句型E+(E+T)*i的语法树 的语法树 句型
E + T ( E E + T * ) T F i
叶子结点:树中没有子孙的结点。 叶子结点:树中没有子孙的结点。 从左到右读出推导树的叶子标记,所得的句型为推导树的结果。 从左到右读出推导树的叶子标记,所得的句型为推导树的结果。 也把该推导树称为该句型的语法树。 也把该推导树称为该句型的语法树。
句型、句子和语言
定义2.8 如果符号串x是从识别符号推导出来的,即S⇒* x, 定义 则称x是文法G[S]的句型。开始符号S也是文法G的句型。
定义2.9 如果符号串x是终结符号构成,即S⇒* x,x∈ VT*, 定义 则称x是文法G[S]的句子。
定义2.10 设S是文法G的开始符号,文法G的语言L(G) 定义 ={u|S⇒* u, x∈ VT*},即文法的语言是文法的所有句子构成 的集合。
<标识符>⇒<标识符><数字>⇒<标识符><数字><数字>⇒<字母 ><数字><数字>⇒a<数字><数字>⇒a6<数字>⇒a69
最右推导
定义2.7 在xUy=>xuy直接推导中,若y∈ VT*, U∈ VN, 即U 定义 是符号串xUy中最右非终结符,则称此直接推导为最右直接 推导。若一个推导的每一步直接推导都是最右直接推导,那 么此推导称为最右推导。 最右直接推导又称为规范直接推导,最右推导又称为规范推 导。 例 文法如G12. <标识符>⇒<标识符><数字>⇒<标识符>9⇒<标识符><数字 >9⇒<标识符>69⇒<字母>69⇒a69
第2章 形式语言概论
文法和语言形式化定义 文法的类型 语言和语法树 文法和语言的几点说明 分析方法简介 本章小结
字母表和符号串
字母表是元素的非空有穷集合,用∑表示。字母表中的元 字母表 素称为符号。 例如: 例如:汉语的字母表中包括汉字、数字及标点符号等。 PASCAL语言的字母表是由字母、数字、若干专用符号及 BEGIN、IF之类的保留字组成。 符号的有穷序列称为符号串,如compiler, string等。什么符 符号串, 符号串 号也不包含的符号串称为空符号表,用ε表示。符号串所包 含的符号的个数称为符号串的长度。空符号串的长度为零。
文法分类
0 型 文 法 : 对 任 一 产 生 式 α→β , 都 有 α∈(VN∪VT)+ , β ∈(VN∪VT)* 。 1型文法( 上下有关文法 ) :对任一产生式α→β,都有|β|≥|α|, 型文法( 型文法 上下有关文法) 仅仅 S→ε除外。 2型文法(上下无关文法):对任一产生式α→β,都有α∈VN , 型文法(上下无关文法) 型文法 β ∈(VN∪VT)*。 3型文法(正规文法):任一产生式α→β的形式都为A→aB或 型文法(正规文法) 型文法 A→a,其中A ∈ VN ,B ∈ VN ,a ∈ VT。
自上而下的语法分析
例:文法G:S → cAd A → ab A→ a 识别输入串 w = cabd 是否该文法的句子
S c S A d c a 推导过程: 推导过程:S ⇒ cAd ⇒ cabd S A b d
自下而上分析方法
自下而上分析方法的基本思想是从待检查的符号串出发, 看最终是否能归约(推导的逆过程)到文法的识别符号。 如果能够归约到文法的识别符号,则表明此待检查的符号 串是该文法的一个句型或句子,否则便不是。 从待检查的符号串出发,在其中寻找一个称为句柄的子串, 此句柄如果与文法中某一产生式右部相匹配,那么就用此 产生式左部(一个非终结符)去替换待检查符号串的句柄, 替换之后得一个新符号串,然后,对这个新符号串作同样 的处理。这个过程称为归约过程。
最左推导
定义2.6 在xUy=>xuy直接推导中,若x∈ VT*, U∈ VN, 即U是符 定义 号串xUy中最左非终结符,则称此直接推导为最左直接推导。 若一个推导的每一步直接推导都是最左直接推导,那么此推导 称为最左推导。 例 G12[<标识符>]: <标识符>→<字母>|<标识符><字母>|<标识符><数字> <字母>→a|b|c|…|x|y|z <数字>→0|1|2|3|4|5|6|7|8|9
文法和语言
0型文法产生的语言称为 型语言 型文法产生的语言称为0型语言 型文法产生的语言称为 型文法或上下文有关文法( 1型文法或上下文有关文法( CSG )产生的语 言称为1型语言或上下文有关语言( 或上下文有关语言 言称为1型语言或上下文有关语言(CSL) ) 型文法或上下文无关文法( 2型文法或上下文无关文法( CFG )产生的语 言称为2型语言或上下文无关语言 型语言或上下文无关语言( 言称为 型语言或上下文无关语言( CF L ) 型文法或正则(正规)文法( 3型文法或正则(正规)文法( RG )产生的 语言称为3型语言正则(正规)语言( 型语言正则 语言称为 型语言正则(正规)语言( RL )
文法例子
文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符> 习惯上只将产生式写出。并有如下约定: 1、第一条产生式的左部是开始符号; 2、用尖括号括起的是非终结符,否则为终结符。或者大写字母 表示非终结符,小写字母表示终结符; 3、G可写成G[S],其中S是开始符号;
文法
定义2 定义 2.1 设VN,VT 分别是非空有限的非终结符号集和终结符号 集,V=VN∪VT, VN∩VT=∅,一个产生式是一个序偶对(α,β), 其中α∈ V+, β∈ V*,通常表示为: α->β或α::=β,α称为产生式的左部,β称为产生式的右部。 定义2 定义2.2 文法G是一个四元组,G=(VN, VT, P, S),其中VN,VT 分别是非空有限的非终结符号集和终结符号集,VN∩VT=∅,P 是产生式集,S∈ VN称为文法的识别符号或开始符号。 如果产生式集合中的产生式有共同的左部,如α->β, α->γ, 则可将其简写为: α->β|γ。
产生式树
E E E E + T F ( E E + ) F (f) ( + (a) T * F i E E + T F E ) (e) T * F i E + T F (d) T →E+T|T, 例: G[S]:E→E+T|T T→T*F|F, F→(E)|i →E+T|T → → E E E + T (b) T * F E + T (c) E T * F i T * F i
相关文档
最新文档