编译原理第三章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} + ={a,b,aa,ab,ba,bb,aaa,aab,…}
13
语言
语言:字母表上的一个语言是上的一些符号 串的集合 (上的每个语言是*的一个子集)。 例如: Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} 语言1:集合{ab,aabb,aaabbb,…,anbn,…}或 {w|w∈Σ*且w=anbn,n≥1}为字母表上的一 个语言。 语言2:集合{a,aa,aaa,…}或{w|w∈Σ*且 w=an,n≥1} 为字母表上的一个语言。 语言3:ε是一个语言。 语言4:即 是一个语言。 14
20
文法的定义
文法G定义为四元组(VN,VT,P,S)
VN :非终结符集 VT :终结符集 P:产生式(规则)集合 S:开始符号, S∈VN,S必须要在一条规则 的左部出现。 VN∩VT= φ 。 V=VN∪VT,称为文法G的文法符号集合
21
文法示例1
例3.1 文法G=(VN,VT,P,S) VN = { A }, VT ={ 0, 1 } P={ A→0A1, A→01 } A为文法G的开始符号 习惯上只将产生式写出。并有如下约定: 第一条产生式的左部是开始符号 用尖括号括起的是非终结符,否则为终结符。或 者大写字母表示非终结符,小写字母表示终结符 G可写成G[S],S是开始符号 例: G: A→0A1 或 G[A]: A→0A1 A→01 A→01
4
预备知识 -----文法的直观概念
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词>::=我|你|他 <名词>::=王明|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>
5
预备知识 -----我是大学生
15
语言上的运算2
语言L的闭包记为 L*, L*= L0 L1 L2 ... L0= ε , Ln= L Ln-1= Ln-1 L,n1 语言L的正闭包记为 L+, L+= L1 L2 L3 ... L+= LL*= L*L , L*= L+ ε 例如: L={a,b,…y,z}, M={1,2…8,9 } (LM)={a,b,… y,z,1,2…8,9 } (L1M1)*={a,b,… y,z,1,2…8,9 , aa,1a,…xyz,6789st..} L(LM)*={所有字母打头的字母和数字符号 串}
10
符号串的运算1
符号串的长度:符号串中符号的个数.符号串s的 长度记为|s|。 ε的长度为0 连接:符号串x、y的连接,是把y的符号写在x的 符号之后得到的符号串xy 例如:x=ab,y=cd 则 xy=abcd 有εa=aε= a 方幂:符号串自身连接n次得到的符号串。 例如: (ab)n 定义为 abab…abab,有n个ab。
预备知识 -----语言概述
每种语言具有两个可识别的特性,即语 言的形式和该形式相关联的意义。 语言的实例若在语法上是正确的,其相 关联的意义可以从两个观点来看。
其一是该句子的创立者所想要表示的意义。 其二是接收者所检验到的意义。 这两个意义并非总是一样的,前者称为语言 的语义,后者是其语用意义。幽默、双关语 和谜语就是利用这两方面意义间的差异。
16
语言的描述
如何来描述一种语言?
如果语言是有穷的(只含有有穷多个句子),可 以将句子逐一列出来表示 如果语言是无穷的,找出语言的有穷表示。两个 途经: 生成方式 (文法):语言中的每个句子可以用严 格定义的规则来构造。 识别方式(自动机):用一个过程,当输入的一任 意串属于语言时,该过程经有限次计算后就会停 止并回答“是”,若不属于,要麽能停止并回答 “不是”,(要麽永远继续下去。)
句型
有文法G[S],若S x,则称x是文法G的句型。 有文法G[S] ,若S x,且x∈VT*,则称x是文法G 的句子。
*
*
句子
例如:G[A]: A→0A1, A→01
0A1、00A11、000111是G[A]的句型。 000111是G[A]的句子。
26
文法的示例3
例:G[E]:E→E+T|T T→T*F|F F→(E)|a
22
文法示例2
例3.2 文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>
第三章 文法和语言
本章目的为语言的语法描述寻求工具, 通过该工具,可以:
对源程序给出精确无二义的语法描述。 (严谨、简洁、易读) 根据语言文法的特点来指导语法分析的过 程。 从描述语言的文法可以自动构造出可用的 分析程序。 制导语义翻译。
1
本章主要内容
预备知识 文法和语言的形式定义 文法的类型 上下文无关文法及其语法树 上下文无关文法的句型分析 有关文法实用中的一些说明 有关文法的一些关系
语言上的运算1
设L是(上的)一个语言,M是(上的)一个语 言, 语言L和M的并,交,差,补是一个语言。 例如:L1 ={a,b,…y,z} M1 ={1,2…8,9 } L1M1={a,b,… y,z,1,2…8,9 } 语言L和M的连接是一个语言,记为 LM。 LM={st |s∈L且 t∈M} 例如:L1M1={a1,b1,…y1,z1,a2,b2…a9…z9} 有L ε= εL=L。 L的n次连接Ln= LL...L
2
预备知识 -----语言概述
语言是由句子组成的集合,是由一组记号 所构成的集合。 汉语--所有符合汉语语法的句子的全体 英语--所有符合英语语法的句子的全体 程序设计语言--所有该语言的程序的全体 每个句子构成的规律 研究语言 每个句子的含义 每个句=aa,a0=ε
11
符号串的运算2
符号串集合:若集合A中所有元素都是某字 母表上的符号串,则称A为字母表上的符 号串集合。 两个符号串集合A和B的乘积定义为 AB =xy|xA且yB 例如:集合A=ab,cde B = 0,1 则 AB =ab1,ab0,cde0,cde1
17
文法 数学系统
一个形式数学系统可由下列基本成分来刻 画:一组基本符号,一组形成规则,一组 公理,一组推理规则。
18
文法和语言的形式定义
文法的定义 推导的定义 句型、句子、语言的定义
19
规则的定义
规则(重写规则、产生式或生成式),是 形如α →β 或α ∷=β 的(α ,β )有序对, 且α ∈V+,β ∈V*( V 为某符号表)。 α 称为规则的左部(或生成式的左部)。 β 称为规则的右部(或生成式的右部)。
<句子>⇒<主语><谓语>
他学习英语 王明是大学 王明学习英 英语学习王 ⇒<代词><谓语> 生 语 明 ⇒我<谓语> ⇒我<动词><直接宾语> ⇒我是<直接宾语> ⇒我是大学生
6
预备知识 -----形式语言
如果不考虑语义和语用,即只从语法这一 侧面来看语言,这种意义下的语言称作形 式语言。形式语言抽象地定义为一个数学 系统。 “形式”是指这样的事实:语言的所有规 则只以什麽符号串能出现的方式来陈述。 形式语言理论是对符号串集合的表示法、 结构及其特性的研究。是程序设计语言语 法分析研究的基础。
9
符号和符号串3
对于每个符号串s, s和ε两者都是符号串s的前 缀,后缀和子串。 符号串的固有头(真前缀),固有尾(真后缀): 设s=xy是一个符号串,那么x是s的头,y是s的 尾。如果y非空,则x是s的固有头,同样如果x非 空,则y是s的固有尾。
例如:s=abc 头:ε ,a,ab,abc, 尾:ε ,c,bc,abc 固有头: ε ,a,ab, 固有尾:ε ,c,bc
7
符号和符号串1
符号:可以相互区别的记号(元素)。 字母表():符号(元素)的非空有穷集合。 符号串:由字母表中的符号组成的任何有穷序列称 为该字母表上的符号串。
1.空符号串ε (没有符号的符号串)是上的符号串 2.若x是上的符号串,a是的元素,则xa是上的符号串 3. y是上的符号串,当且仅当它可以由1和2导出。
例如: Σ ={a,b} 则:ε ,a,b,aa,ab,aabba…都是上的符号串
8
符号和符号串2
符号串s的头(前缀):移走符号串s尾部的 零个或多于零个符号得到的符号串. 例如:b是符号串banana的一个前缀. 符号串s的尾(后缀):删去符号串s头部的 零个或多于零个符号得到的符号串. 例如:nana是符号串banana的一个后缀. 符号串s的子串:从s中删去一个头和一个尾 得到的符号串. 例如:ana是符号串banana的一个子串.
推导的定义2
推导
若存在v w0 w1 ... wn=w,(n>0) 则称v推导出w,或w归约到v。记为v w。 推导 * 若有v w,或v=w,则记为v * w。 例如:0A1 00001111 或 0A1 00001111
*
25
文法的句型、句子的定义
EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a 表示一切能用符号a,+,*,(和)构成的算术 表达式。
27
文法的语言
由文法G生成的语言记为L(G),它是文法G 的一切句子的集合: L(G)={x|S x,其中S为文法的开始 符号,且x ∈VT*}
30
文法和语言的掌握要求
已知语言描述,写出文法
例:若语言由0、1符号串组成,串中0和1的个数相同, 构造其文法。 A → 0B|1C B → 1|1A|0BB C → 0|0A|1CC 例:G[E]:E→E+T|T T→T*F|F F→(E)|a
31
已知文法,写出语言描述
文法的等价
若L(G1)=L(G2),则称文法G1和G2是 等价的。 例如: 文法G1[A]:A→0R 与 G2[A]:A→0A1 等价 A→01 A→01 R→A1
文法3.3的语言
S a S BE a aBEBE aabEBE aabBEE aabbEE aabbeE aabbee
( S→aSBE) ( S→aBE ) ( aB→ab ) ( EB→BE ) ( bB→bb ) ( bE→be ) ( eE→ee )
G生成的每个串都在L(G)中 L(G)中的每个串确实能被G生成
12
符号串的运算3
{ } ...... * * 2 3 { } ......
* 2
使用 *表示上的一切符号串(包括ε)组成 的集合。Σ*称为Σ的闭包。 上的除ε外的所有符号串组成的集合记为+ 。 +称为Σ的正闭包。
*
例如:G[A]: A→0A1, A→01 L(G)={0n1n|n≥1}
28
文法的示例4
例3.3 文法G[S]: (1)S→aSBE (2)S→aBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→ee
L(G)={ anbnen | n≥1 }
推导的定义1
直接推导“”
α→β是文法G的产生式,若有v,w满足: v=γαδ,w= γβδ, 其中γ∈V*,δ∈V* 则称v直接推导到w,记作 v w 或w直接归约到v
例:G: A→0A1, A→01 A 0A1 00A11 000A111 00001111
24