第二章 前后文无关文法和语言

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

例:无符号整数的文法:
G[<无符号整数>]=(Vn,Vt,P,E) Vn={<无符号整数>,<数字串>, <数字>} Vt = {0,1,2,3,……9}
P = {<无符号整数> → <数字串> ; <数字串> → <数字串> <数字> ; <数字串> → <数字> ; <数字> →0; <数字> →1; ………… <数字> →9;} E = <无符号整数>;
推导方法:从一个要识别的符 号开始推导,即用相应规则的 右部来替代规则的左部,每次 仅用一条规则去进行推导。 <句子> <主语><谓语>
<句子> → <主语><谓语> <主语> → <代词>|<名词> <代词> →你|我|他
<名词> →王民|大学生|工人| 英语
<谓语> → <动词><直接宾语>
2.2 文法和语言的形式定义
从前面的推导看,从<句子>出发,经8步推导得到了一个英语 句子。故前面的推导称为长度为8的推导。 若不关心推导的中间过程,可将从一符号串到另一符号串的 推导用记号
表示, 例如上例中经过 步的推导记为 5 句子 the m onkey 动词 冠词 名词
任何程序语言都有自己的字母表。 1.计算机语言:由符号“0”和“1”组成的字母表: ∑={0,1} 2. Pascal语言字母表:∑={AZ, az, 09, +, -, *, /, <, =, >, :, ‘,”,;,., , (, ), {, }, [, ] } 3. C语言字母表:∑={AZ, az, 09, +, -, *, /, <, =, >,_,&,^, ~ ,\ ,:,‘,”,;,.,?, (, ),{,}, [, ],空格,!,#,% }
形式语言:是一个字母表上按照某种规则构成 的所有的串的集合,它用文法和自动机所描述 的没有语义的语言。(形式语言是数学范畴)
2.2 文法和语言的形式定义
我们从“产生语言”的角度 出发,讨论文法和语言的形式 定义。 产生语言 指制定出有限条 规则,借助它们就能产生出 些语言的句子。 我们以几个英语句子构成的 语言为例进行讨论。并设每 个句子都是“主-谓-宾”结 构。 语法规则见右。其中,每个 用<>括起来的部分是所要定 义语言中的一个语法实体 (称为语法单位、语法结构、 语法范畴、语法变量等)。 “::=”是用于定义语法结构 的符号,其含义(并读作) “定义为”.语法规则也称为 产生式(Production)
3. 由规则推导句子:有了一组规则之后,可以按照 一定的方式用它们去推导或产生句子。 推导方法:从一个要识别的符号开始推导,即用 相应规则的右部来替代规则的左部,每次仅用一条规 则去进行推导。 <句子> <主语><谓语> <主语><谓语> <代词><谓语> …… ……
这种推导一直进行下去,直到所有带< >的符号都由 终结符号替代为止。
< 代词><谓语> <动词> →是|学习 我<谓语> <直接宾语> → <代词>|<名词> 我<动词><直接宾语>
我是<直接宾语>
我是<名词> 我是大学生
例:有一英语句子:The big elephant ate the peanut.
<句子>→<主语><谓语> <主语>→<冠词><形容词><名词>


规则的简化表示
在前面的语法规则定义中,有些语法范畴(如<名 词>、<动词>)有若干条不同的规则来定义它,为 简明起见,我们可以将它们写在同一个左部语法范 畴下,将其定义值用符号‚|”(读作‘或’)隔开。 如<名词>、 <动词>、 <冠词>的定义规则可简记为 <名词>::= monkey | banana <动词>::= eat | has <冠词>::= the | a
文法的定义
V=VN ∪VT 称为文法的字汇表 定义1. 文法G[S]=(VN,VT,P,S) 规则:U → x VN :非终结符号集 U ∈VN, x∈V* VT :终结符号集 P:产源自文库式或规则的集合 S:开始符号(识别符号) S∈VN 非终结符是指在文法的语法范畴,出现在产生式P中,通 常用大写字母或用“<>”括起来的符号串表示,终结符是 指不需要进一步定义的基本符号,通常用小写字母表示
第二章 前后文无关文法和语言
在20世纪50年代,N.Chomsky首先对语言 的描述问题进行了探讨。他提出了一种用来描 述语言的数学系统,并以此定义了四类性质不 同的语言,称为语言(文法)的Chomsky分类。 人们把用一组数学符号和规则来描述语言的方 式称为形式描述,把所用的数学符号和规则称 为形式语言。 目前,形式语言与自动机理论已成为计算机科 学中的一个重要分支。 本章将初步介绍形式语言中的某些基本概念和 知识,重点是与编译技术密切相关的一些术语 和概念,诸如文法、语言、句子、句型、短语、 句柄以及句型分析等。
A1 A A A2 A A3 A
{ε, A*= ? 0x,y, 1 xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……} 2 3
为什么对符号、符号串、符号串集合以及它们 的运算感兴趣? 若A为某语言的基本字符集 A={a,b,……z,0,1,……,9, +,-,×,_/, ( , ), =……} B为单词集 B ={begin, end, if, then,else,for,……,<常量>,……} 则B A* 。 语言的句子是定义在B上的符号串。 若令C为句子集合,则C B * , 程序 C
2.语法规则:又称为产生式。是一个有序对(U, x), 通常写为: U :: x 或U x。表示“由……组成”。 Ux:表示符号U由符号串x组成 <句子>→<主语><谓语> <主语>→<代词>|<名词>
<代词>→你|我|他
<名词>→王民|大学生|工人|英语 <谓语>→<动词><直接宾语> <动词>→是|学习 <直接宾语>→<代词>|<名词>
{ac,ad,bc,bd}
因为εx=xε=x,所以{ε}A={ε}A=A
2.2.1 基本概念和术语(续)
A0 ={ε}, A1=A,A2=AA,A3=AAA,
5. 符号串集合的幂运算:有符号串集合A,定义
…… …… An=An-1A=AAn-1 ,n>0
6.符号串集合的闭包运算:设A是符号串集合,定义 A+= A1 ∪ A2 ∪ A3 ∪……∪ An ∪…… 称为集合A的正闭包。 A*= A0 ∪A+ 称为集合A的闭包。 例:A={x,y} A+=? {x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……}
语法规则及其产生的语言
前面的语法规则可以产生16个不同的句子, 由这16个句子组成的集合,就是该规则所定 义(或所产生)的语言。 应指出,所产生的句子中,有些句子的含义 是荒谬的(如 the banana eat a monkey和 the banana eat the banana等)。然而,若 不考虑语义,则我们就必须承认它们是语法 上合法的句子。
①<句子>::=<主语短语> <动词短语> ②<主语短语>::= the < 名词> ③<动词短语>::=<动词 ><宾语短语> ④<宾语短语>::=<冠词 ><名词> ⑤<名词>::=monkey ⑥<名词>::=banana ⑦<动词>::=eat ⑧<动词>::=has ⑨<冠词>::= the ⑩<冠词>::= a
用语法规则进行推导所得的推导序列
推导步骤 1 2 3 4 5 6 7 8 所用规则 ① ③ ② ④ ⑤ ⑦ ⑩ ⑥ 所得的符号串 <句子> <主语短语><动词短语> <主语短语><动词><宾语短语> the <名词><动词><宾语短语> the <名词><动词><冠词><名词> the monkey<动词><冠词><名词> the monkey eat <冠词><名词> the monkey eat a <名词> the monkey eat a banana
2.2.1 基本概念和术语(续)
3.符号串的联接:若x、y是定义在Σ是上的符 号串,且x=XY,y=YX,则x和y的联接 xy= XYYX也是Σ上的符号串。 注意:一般xy≠yx,而εx=xε 4. 符号串集合的乘积运算:令A、B为符号串集 合,定义AB={ xy |x∈A,y∈B} 5. 例:A={a,b},B={c,d}, AB= ?
2.2.1 基本概念和术语(续)
3。符号串的前(后)缀及子串 设,,,x是符号串,若x= ,则称是x的子串;特别地,当 = (= )时,称 是x的前(后)缀。
(符号串s=banana) 前 缀:,b,ba,ban,bana,banan,banana 后 缀:banana,anana,nana,ana,na,a, 子 串: banana,anana,banan,anan,…, 1.符号串相等:若x、y是集合上的两个符号串,则x=y iff (当且仅当)组成x的每一个符号和组成y的每一个符号依 次相等。 2.符号串的长度:x为符号串,其长度|x|等于组成该符 号串的符号个数。 例: x=STV , |x|=3
2.1 文法及语言的表示
首先,我们确定一个概念:什么是语言? 据统计,目前在世界各地,人们所使用的语言达2700多 种。 Webster的定义:‚为相当大地区的公众所懂得并使用 的‘话’,以及组成这些‘话’的方法的统一体‛ 上述定义对于建立语言的数学理论的目的而言不够精确。 所以,有人又将语言定义为:‚某一字母表上符号串 (句子)的集合‛ 此定义仍需精确化。因为: 1)还应为所定义的句子提供一种结构性的描述(语法规 则); 2)最好能再提供一种手段,以便能准确地判别什么是该语 言中的正确句子(即识别方法、分析方法等)。
2.2 文法和语言的定义
2.2.1 基本概念和术语
1。字母表(符号表、符号集) 由若干元素(符号、字母)组成的有限非 空集合。例:={a,b,c} 2。符号串 用字母表中符号所组成的任何有限序列。
例:a, aa, ac, abc,..
符号串的长度 = 符号串中所含符号的个数
例:aba的长度为3。记为:|aba|=3 空串 不含任何符号的符号串,记为 。显然,| |= 0。 本课约定 用A、B、C、 等表示字母表或符号串集;用a,b,c,S,T,U 等 表示符号;用s,t,u,x,y,z,,,等表示符号串。
<冠词> →the
<形容词>→big
<名词>→elephant
2.2 文法和语言的形式定义
现在,我们讨论如何用上述规则推导出相应语言的全部句子。 推导 从语言最大的一个语法范畴(本例中是<句子>) 开始,反复用语法规则中“::=” 右侧的符号串取代其左侧 符号,直到所得的符号串中不再含有可被替换语法范畴。每 次替换称为一步(直接)推导,并用符号“”表示。例如, 我们首先用规则①进行第一步推导(derivation),就可得到 <主语短语><动词短语>,记为 <句子> <主语短语><动词短语> 所得的符号串<主语短语><动词短语>含有两个语法范畴,可 对其中任一个(例如对<动词短语>)进行新的推导(替换): <句子> <主语短语><动词短语> <主语短语><动词><宾语短语> 重复上述过程,可得到一个推导序列(见下页)。
几点说明: 产生式左边符号构成集合Vn,且 S∈Vn
有些产生式具有相同的左部,可以和在一起
文法的BNF表示
例、<无符号整数> → <数字串> ; <数字串> → <数字串> <数字> | <数字> ; <数字> →0 | 1 | 2 | 3 | …… | 9 给定一个 文法,实际只需给出产生式集合,并指定识别符号 例、 G[<无符号整数>] <无符号整数> → <数字串> ; <数字串> → <数字串> <数字> | <数字> ; <数字> →0 | 1 | 2 | 3 | …… | 9
相关文档
最新文档