文法和语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P是产生式的集合,是形如α→β的规则的结合, α ∈( VN∪VT )* 且至少包含一个非终结符, β ∈( VN∪VT )* S∈VN 为文法的识别符号或开始符号。 例:文法 G=(VN,VT,P,S),其中VN={S},
VT={0,1} ,P= {S0S1,S 01}
计算机学院
编译原理
例如文法G(A)
• A0R • A 01 • R A1
计算机学院
编译原理
句型、句子和语言(续)
文法规则的递归定义
非终结符的定义中包含 了非终结符自身。 注:使用文法的递归定 义要谨慎,要有递归出 口,否则,可能永远产 生不出句子。
例:字母表A={0,1}
文法: <整数> <数字><整数>|<数字> <数字> 0|1
编译原理
第三讲 文法和语言
计算机学院
编译原理
本章学习目标
形式语言由Chomsky于1956年提出,主要讨论语言和 文法的数学机制以及语言和文法的分类。形式语言 的 形成和发展,对编译原理和技术产生了重要的影响。 本章主要内容是:
文法和语言的形式定义
文法的分类
句型的分析和语法树
计算机学院
尾。
若只对符号串的头部感兴趣,记做z=x…。若只对尾部感兴趣,则记为 z=…x。
计算机学院
编译原理
符号串的运算
连接(乘积)运算
设 x与y是同一个字母表上的两个符号串,把y的各个符号相继写在x的符号 后所得到的符号串称为x与y的连接,记为xy。 例:设在字母表{a,b,c}上有符号串 x=ab与y=cba,则z=xy=abcba。这里 ∣x∣=2, ∣y∣=3, ∣z∣=5。 对于字母表上的任何符号串x,都有εx=xε=x 注:xy!=yx
计算机学院
编译原理
符号串
(1)符号
语言中最基本的不可再分的单位
(2)符号串
符号串是由字母表中的符号所组成的有穷序列。符号串由小写x,y,z表 示
• 例 :某个字母表∑={a,b,c},则建立在∑上的符号串有:a,b,c,ab,aaca
空串是不含任何符号的串,记作ε
(3)符号串的长度
符号串x中所包含的符号的个数称为符号串x的长度,记为|x| 。
• 例:字母表{0,1},则|010110|=6。空串的长度为0。
计算机学院
编译原理
(4)子字符串
设有非空符号串u=xvy,其中x、v、y是符号串,且v≠ε,则称v为符号串u 的子符号串。 例:设字母表Σ={a,b,c,d,+,-,*,/,(,)}上有符号串x=a+b*(c+d) ,则a、a+b*与(c+d)等都是x的子符号串,且其长度分别为∣a∣=1、 ∣a+b*∣=4与∣(c+d)∣=5
注:实质上,句子是句型的特殊情况,句子是由终结符组成, 而句型是由终结符和非终结符组成。
语言
G[S]是一个文法,文法G产生的语言L(G)={x|S=>*x,并且 xVT},即文法的语言是文法所有句子的集合。
计算机学院
编译原理
文法产生的语言
例3.1 例3.2 例3.3 如果L(G1)=L(G2),则称文法G1和G2等价
什么是文法?
描述语言的语法结构的形式规则,严格地定义句子的结构,用 适当条数的规则把语言的全部句子描述出来,是以有穷的集合 刻划无穷的集合的工具。
规则
也叫重写规则、产生式规则,或称为生成式,是形如α→β或α::=β的 (α,β)有序对,其中, α是某个字母表V+中的一个元素,β是V* 中的一个元 素。α称为规则的左部,β称为规则的右部。
ቤተ መጻሕፍቲ ባይዱ
对于任何空集合Φ,都有ΦA=AΦ=A
方幂
类似于符号串的方幂,可以定义符号串集合的方幂,特别地定义 字母表A的方幂为: A0={ε},A1=A,An=An-1A (n>0)
计算机学院
编译原理
字母表的闭包与正闭包的运算
闭包
• 设有字母表A,A的闭包定义如下: A*=A0∪A1 ∪ A2 ∪…∪An∪…,其中,An (n=0,1,2,3,…) 因此字母表A的闭包 A*为字母表上一切有穷长度的符号串所组成的
编译原理
符号和符号串
字母表
是元素的非空有穷集合,字母表中的元素称为符号,因此字母表也称为 符号表。高级语言如C语言的字母表是由字母、数字、特殊符号和一些 专用符号构成。
字母表可以用表示 例:={a,b}, ={0,1}, ={0,1,2,3,4,5,6,7,8,9}, ∑={a,b,c,…z,if,then,else,main,1,2,3,4,…,9,0,=,==,>,<,;(,)}
例:
文法G=(VN,VT,P,S), 其中VN={标识符,字母,数字}, VT={a,b,c…,x,y,z,0,1,…, 9} , P= { <标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a <字母>→b <字母>→c …. <数字>→1 <数字>→2 <数字>→3 …. } S=<标识符>
• (1) v=0S1, w=0011 0S1=>0011
• (2) v=S, w=0S1,直接推导: S=>0S1
• (3) 0S1,w=00S11,直接推导:0S1=>00S11 计算机学院
编译原理
推导长度大于0的推导
如果对于符号串v 与w存在一个直接推导序列
V=W0 W1W2W3…Wn =W(n>0)
用VT表示终结符集合 V= VN U VT
开始符号
表示所定义的语法范畴的非终结符又称为识别符号 开始符号用S表示
计算机学院
编译原理
文法的形式定义(2)
文法
文法G是一个四元组,G=(VN,VT,P,S),其中:
VN、VT分别是非空有限的非终结符号集和终结符号集, VN∩VT=;
则称符号串v推导出w或称w归约到v,记作v +w,称这 个直接推导序列是长度为n的推导。 例: P36
推导长度大于等于0的推导
如果对于符号串v和w,v=>+w或v=w,则记作v *w,称 符号串v广义推导到符号串w,或称w广义归约到v。
计算机学院
编译原理
例:
根据文法,考虑以C语言中的无正负号整数作为识别符号的文法。 <无正负号整数><数字序列> <数字序列><数字序列><数字>|<数字> <数字> 0|1|2|3|4|5|6|7|8|9 VT ={0,1,2,3,4,5,6,7,8,9} VN ={<无正负号整数> , <数字序列>,<数字>} 判断数据2634是否是C语言合法的数据? 给出数据2634的推导。 <无正负号整数> <数字序列><数字序列><数字><数字序列>4 <数字序列><数字>4<数字序列>34<数字序列><数字>34 <数字序列>6342634 由此可见,2634是C 语言的合法数据。中间每一步推导都是直接推 导。可以表示为<无正负号整数>=>+2634
词和直接宾语,我们采用BNF来表示这种句子的构成规则:
计算机学院
编译原理
语法规则:“句子由主语后跟随谓语组成”表示为:
句子 主语 谓语 <句子> ::= <主语> <谓语> <主语> ::= <代词> | <名词> <代词> ::= 我|你|他 <名词> ::= 王明|大学生|工人|英语 <谓语> ::= <动词><直接宾语> <动词> ::= 是|学习 <直接宾语> ::= <代词>|<名词> 文法
(5)符号串的头和尾
如果z=xy是一个符号串,则x是z的头,而y是z的尾。如果y非空,则x是z的 固有头,又称为真前缀;若x非空,则y是z的固有尾,又称为真后缀。
• 例 :假设字母表={a,b,c}上的符号串z=abc,则ε、a、ab、abc都是z的头,且 除abc外都是z的固有头;ε、c、bc、abc都是z 的尾,且除abc外都是z的固有
例: 设某个字母表{a,b,c,d}, 符号串集合A,B
A={a,bc},
B={abc,cd,ab}
计算机学院
编译原理
符号串集合的运算
乘积
两个符号串集合A和B的乘积AB定义为AB={xy∣x∈A ,且y∈B}
• 例: 设A={a,b},B={c,d,e} 则AB={ac,ad,ae,bc,bd,be}
→或::=读作 “定义为”
例: AB读作“A定义为B”,也就是说它是一条关于A的规则( 产生式)。
计算机学院
编译原理
文法的形式定义(1)
非终结符
出现在规则的左部,用<>括起来,表示一定语法概念的词,
用VN表示非终结符集合
终结符
概念上不可再分割的字符串(包括单个字符组成的串)
计算机学院
编译原理
文法产生的语言
推导
推导是从开始符号开始,通过使用产生式的右部取代左部,最终能 产生语言的一个句子的过程。 推导分为三大类:直接推导 、,长度为n(n≥1)的推导+和长度 为n( n≥0)的推导 *。
直接推导
如α→β是文法G=(VN,VT,P,S)的规则(或说是P中的一产生式), γ,δ∈(VN∪VT)*,则称符号串γβδ为符号串γαδ应用产生式α→β所得 到的直接推导。记为γαδγβδ。 例:
集合。
• 注:闭包可以看作由A上符号组成的所有串的集合(包括空串)
正闭包
• 如果不允许包含空串ε,则得到字母表A的正闭包。 • A的正闭包 A+=A1 ∪ A2 ∪…∪An∪…
• 注:正闭包可以看作由A上符号组成的所有串的集合(不包括空串)
语言
• 字母表上按照某种规则形成的某个符号串的集合,所以,语言是该字
计算机学院
编译原理
一般情况下,不用将文法G的四元组显式地表达出来,而只将产生 式写出。 一般来说,第一条产生式的左部是识别符号。 用尖括号括起来的是非终结符,没有的是终结符,或者用大写字母 表示非终结符,小写字母表示终结符。 • G:S0S1 • S 01

• G[S]:S0S1 • S 01
再如:字母表A={0,1} <整数> <数字><整数>
<数字> 0|1
计算机学院
编译原理
文法的分类
乔姆斯基(Chomsky)于1956年建立形式语言的描述以来,把文法 分成四种类型,即0型、1型、2型和3型文法。
符号串的方幂
设x是某个字母表上的符号串,把x自身连接n次,即z=xx…x(n个x),称 为符号串x的n次方幂,记为z=xn。 例: x=ab x3=ababab
计算机学院
编译原理
符号串集合
符号串集合
集合A中一切元素都是某字母表∑上的符号串,则称A是该字母表∑上 的符号串的集合。
字母表上的符号串的集合通常用大写字母来A、B、C、…表示。
描述语言的语法结构的形式规则,严格地定义句子的结构,用适当 条数的规则把语言的全部句子描述出来,是以有穷的集合刻划无穷 的集合的工具。
计算机学院
我是大学生的推导过程: <句子> =><主语><谓语> =><代词><谓语> => 我<谓语> =>我<动词><直接宾语>
=>我是<直接宾语>
=>我是<名词> =>我是大学生
编译原理
文法的直观概念
问题:
当我们表述一种语言时,无非是说明这种语言的句子,如果 语言只含有有穷多个句子,则只需列出句子的有穷集就行了 ,但对于含有无穷句子的语言来讲,如何给出它的有穷表示 ?
解决方法:
以自然语言为例,人们无法列出全部句子,但是人们可以给 出一些规则,用这些规则来说明(或者定义)句子的组成结构 。 比如汉语句子可以是由主语后随谓语而成,构成谓语的是动
母表上正闭包的子集
计算机学院
编译原理
例:设字母表Σ={a,b,c},依次写出长度为1、2、3…的符号串,可 得到 Σ的正闭包
• Σ+ :Σ+={a,b,c,aa,ab,ac,bb,bc,aaa,aab,aac,abb,abc,baa,…} • 在Σ+上添入空串ε即得Σ*。
计算机学院
编译原理
文法和语言的形式定义
计算机学院
编译原理
句型、句子和语言
句型
设G[S]是一个文法,如果符号串x是从开始符号S推导得到的, 即有S=>*x,xV+,则称符号串x是该文法G的一个句型。
句子
G[S]是一个文法,如果符号串x是从开始符号S推导得到的,即 有S=>*x,并且xVT,则称该符号串为该文法的一个句子。
相关文档
最新文档