编译原理第二章文法和语言
编译原理 第02章_文法和语言的基本知识

2.3.2 语言的形式定义
S→01 | 0S1
S 0S100S11…0n-1S1n-10n1n * 即S0n1n
可见,此文法定义的语言为 L(G[S])={ 0n1n | n≥1}
2.3.2 语言的形式定义
例4 设有文法G[S]:S→0S | 1S |ε 该文法所定义的语言是什么?
由该文法所确定的语言为 L(G[S])={ε, 0, 1, 00, 01, 10, 11, …} ={ x | x∈{0,1}* }
2.3.1 文法的形式定义
2. 文法
规则的非空有穷集合,通常表示 成四元组 G={VN,VT, P, S } VN是规则中非终结符号的集合。 VT是规则中终结符号的集合。
P 是文法规则的集合。
2.3.1 文法的形式定义
S 是一个非终结符号,称为文法 的开始符号或文法的识别符号,它至 少要在一条规则中作为左部出现。由 它开始,识别出我们所定义的语言。 由文法定义可知,文法是对语言 结构的定义和描述,文法四大要素中 关键是规则的集合。
2.3.2 语言的形式定义
广义推导
* 0n表示从0出发,经0步或若干步, 可推导出n。 * 意味着 + 或者 = 。 也就是说0 n 0 n 0 n
对上例 E→E+T | T T→T*F | F F→(E) | i *E * i+i*i 我们有: E E
2.3.2 语言的形式定义
4. 句型和句子
设有文法G[S](S是文法G的开始符号) * 如果S x, x ∈(V ∪V )* 则称符号串x
N T
为文法G[S]的句型。 * x, x ∈V * 则称符号串x为文法 如果S T G[S]的句子。
2.3.2 语言的形式定义
编译原理 文法和语言

文法与语言的对应关系
文法描述语言的语 法
文法的主要作用是描述语言的 语法结构,即规定什么样的句 子是合法的。因此,文法与语 言之间存在一种对应关系,即 文法规则定义了语言的语法规 则。
语言反映文法的特 性
语言作为文法规则的体现,反 映了文法的一些特性。例如, 语言的简洁性、一致性、无歧 义性等特性都与文法的制定密 切相关。
编译原理与文Biblioteka 和语言的关系编译原理利用文法和语言的 概念来描述程序设计语言的 语法和语义,从而实现对程
序的正确翻译。
文法和语言提供了编译器设 计的理论基础,使得编译器 能够按照预定的规则对程序 进行词法分析、语法分析和
语义分析等处理。
编译原理的发展推动了文法 和语言理论的深入研究,同 时也促进了程序设计语言的 发展和进步。
程序设计语言和自然语言
程序设计语言是一种用于编写计算机程序的语言,具有严格的语法和语义 规则;自然语言是人类日常交流所使用的语言,具有灵活性和歧义性。
静态语言和动态语言
静态语言在编译时检查类型错误,如C、C等;动态语言在 运行时检查类型错误,如Python、JavaScript等。
语言的表示方法
01
语言的上下文相关性
语言中的句子往往具有上下文相关性,即句子的含义和合 法性可能依赖于其所在的上下文环境。这就要求文法在描 述语言时,需要考虑到这种上下文相关性。
语言的歧义性
有些语言存在歧义现象,即同一句子可能有多种不同的解 释。这就要求文法在描述语言时,需要具有足够的精确性 和明确性,以避免产生歧义。
产生式规则中左部是非终结符,右部是终 结符和非终结符的序列,且右部中至多有 一个非终结符。
文法的表示方法
巴科斯-诺尔范式(BNF)
编译原理-第2章-文法和语言

文法G的形式定义:G=(Vn,Vt,P,Z) ➢Vn(非终结符号集)是一个由非终结符号(一般是大写字母 或用<汉字>)构成的非空有穷集合。 ➢Vt (终结符号集)是一个由终结符号(如小写字母、数字、 标点符号等)构成的非空有穷集合。 Vt∩Vn=φ,V= Vt∪Vn,V是该文法的字母表或词汇表。 ➢P(产生式集)是一个由产生式或规则构成的非空有穷集合。
号组成。
例 ={0,1},则ε, 0,1,01,10,00,11,100,0110, 111110000等二进制数都是上的符号串
={a,b,c,+,*},则ε, a , b , c , + , *,aa,ab,ac, a+,a*,ba,bb,bc,b+,b*,aaa,bbb等都是上的
符号串
一个字母表上的全部(quánbù)符号串所组成的集合是无穷 的。
{ε}A=A {ε}=A 。 例
A={a,b}, B={c,d},则AB={ac,ad,bc,bd}
符号串的幂运算(yùn suàn):若x是符号串,则: x0=ε, x1=x , x2=xx,…,xn=xx…x=xxn-1=xn-1 x,其中 n>0 。
例
x=abc, x0=ε, x1=abc, x2=abcabc,…
21字母表和符号串22文法23推导24句型和句子25语言26递归规则与递归文法27短语简单短语和句柄28语法树29子树与短语210由树构造推导过程211文法的二义性212有关文法的实用限制213文法和语言分类如果不考虑语义和语用只从语法这一侧面来看语言它是由符合某种语法用规则定义的句子构成的集合这种意义下的语言称作形式语言
集合(jíhé)的正闭包:设A为一个集合,则: A+ =A1∪A2∪….∪An∪…
02第2章编译原理课程讲解文法和语言报告

V=S,W=0S1
W是否是V的直接推导
=S, =0S1
规则: S → 0S1 =0 , = 1
直接推导:S 0S1
V=0S1,W=00S11 W是否是V的直接推导 直接推导: 0S100S11
=S,S), 其中 VN={S} , VT ={0 , 1} , (2)若存在直接推导的序列: P={S → 0S1,S → 01}
2018/10/11
12
2.2.1 文法形式定义
按文法形式定义表示“the monkey ate the banana ”文法。 解:根据文法的形式定义,文法G1=( Vn, Vt,P,Z)
非终结符号集合: Vn={句子,主语,谓语,冠词,名词,动词, 直接宾语}
终结符号集合: Vt={ the,ate,banana,monkey }
1
内容提要
字母表与符号串 文法(定义,推导,句型与句子) 语言 递归规则与递归文法 语法树(短语、简单短语和句柄) 语法树与文法的二义性
2018/10/11
2
2.1 字母表与符号串
字母表 符号串 符号串及集合的运算
2018/10/11
3
2.1.1 字母表
字母表是符号的非空有穷集合。 例如: 1.机器语言字母表:由符号“0”和“1”组成的字 母表,∑={0,1} 2. ASCII字符集 3. Pascal字母表为: ∑={AZ, az, 09, +, -, *, /, <, =, >,:, ',', ; ,., , (, ), {, }, [, ] } „„
2型文法1型文法0型文法3型文法四种文法之间的逐级包含关系20161227812型文法不确定的下推自动机1型文法不确定的界限自动机0型文法图灵机3型文法有限自动机形式语言与自动机2016122782本章小结1文法的定义四元组对上下文无关文法能根据产生式集合给出其四元组
编译原理第二章文法和语言

语言的语法结构
总结词
语言的语法结构是语言形成和发展的核心要素,决定 了语言的表达方式和意义。
详细描述
语言的语法结构是指语言的组织规律和规则,包括词 法、句法、语义等方面的规则。词法规定了词汇的构 成和变化规则,如名词、动词、形容词等词类的划分 ;句法规定了句子结构的规则,如主语、谓语、宾语 等句子的成分及其排列顺序;语义则涉及到词汇和句 子的意义和解释。语言的语法结构是语言理解和生成 的基础,也是语言演变和发展的关键因素。
文法和语言的应用前景
1 2
人工智能领域
文法和语言是人工智能领域的重要基础,可用于 自然语言处理、机器翻译、语音识别等技术的研 究和应用。
计算机科学教育
文法和语言是计算机科学专业的重要课程之一, 对于培养计算机科学人才具有重要意义。
3
软件工程领域
文法和语言可用于软件工程领域中的编译器设计 和开发,提高软件开发的效率和可靠性。
05
文法和语言的未来发展
文法和语言的研究方向
形式语言理论
深入研究形式语言的基本理论, 包括语法、语义和语用等方面, 为自然语言处理和人工智能等领 域提供理论基础。
自然语言处理
结合自然语言处理技术,研究自 然语言的语法、语义和语用规律, 提高自然语言处理的准确性和效 率。
计算语言学
将计算语言学与形式语言理论相 结合,研究语言处理算法和模型, 为机器翻译、语音识别等领域提 供技术支持。
文法和语言的发展趋势
深度学习与文法和语言的结合
01
随着深度学习技术的发展,文法和语言的研究将更加注重与深
度学习的结合,以提高语言处理的性能和效率。
跨媒体语言处理
02
随着多媒体数据的普及,文法和语言的研究将逐渐扩展到跨媒
编译原理第二章 文法和语言

第一节 文法的直观概念
当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需 列出句子的有穷集就行了,但对于有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。 以自然语言为例, 人们无法列出全部句子, 但是人们可以给出一些规则, 用这些规则来说明 (或 者定义)句子的组成结构,比如: “我是大学生” 。是汉语的一个句子。汉语句子可以是由主语后随 谓语而成,构成谓语的是动词和直接宾语,我们采用 EBNF 来表示这种句子的构成规则: 〈句子〉∷=〈主语〉 〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷=我|你|他 〈名词〉∷=王明|大学生|工人|英语 〈谓语〉∷=〈动词〉 〈直接宾语〉 〈动词〉∷=是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉 “我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。 这些规则成为我们判别句子结构合法与否的依据。 一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。我们开始去找∷= 左端的带有〈句子〉的规则并把它表示成∷=右端的符号串,这个动作表示成: 〈句子〉 〈主语〉 〈谓语〉 ,然后在得到的串〈主语〉 〈谓语〉中,选取〈主语〉或〈谓语〉 ,再用相应的规则∷=右端 代替之。比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉 ,那么得到: 〈主语〉 〈谓语〉〈代 词〉 〈谓语〉 ,重复做下去,我们得到句子: “我是大学生”的全部动作过程是: 〈句子〉 〈主语〉 〈谓语〉 〈谓语〉 〈代词〉 我〈谓语〉 〈直接宾语〉 我〈动词〉 我是〈直接宾语〉 我是〈名词〉 我是大学生 符号 的含义是,使用一条规则,代替 左边的某个符号,产生 右端的符号串。 显然,按照上述办法,不仅生成“我是大学生”这样的句子,还可以生成“王明是大学生” , “王 明学习英语” , “我学习英语” , “他学习英语” , “你是工人” , “你学习王明”等几十个句子。事实上, 使用文法作为工具,不仅为了严格地定义句子的结构,也是为了用适当条数的规则把语言的全部句 子描述出来,是以有穷的集合刻划无穷的集合的工具。
编译原理第2章文法和语言

2.1 文法和语言的定义
文法分类
2型文法(上下文无关文法):如果对1型文法施加以下的限制,就得到2 型文法: G的任何产生式为Aβ, A∈VN,β∈(VN∪VT)*
这种文法意味着,每一规则左部只有一个非终结符,无需考虑该非终结 符在上下文中的出现情况。
总结3型:文法(正则文法):如果对2型文法施加以下的限制,就得到3型文法: 右α,β其部G3称2∈中型的正、形文任A规V法3,何式文TB型称产∈)法仅为生V。文则N右式为, 法线为α为A,性Aβ规3∈文型αV法则αBT或|文B左β左|,法或β线部,者性或,仅A文者否法为B;Aα则非3|β型为,终文B2法结α型等|符β价文(于,法正A若规,式B规,∈则所V以N又,
VVVNN=,VV∪NT,∪PV三T=VФ个T表集VVP示=NT合==文{均{{N法为0NG,}非10的;}空N字;,有N母穷表集1或N合词,N汇表0, N1};
S=N。
2.1 文法和语言的定义
文法
文法产生式的其它表示法:
规则1:{a}表示a的0次或多次重复出现,即{a}表示ε或a或aa或aaa或 a…a;{a}mn 表示a的m到n次出现。
要求: (1)能根据文法分析其所产生的语言; (2)能根据语言构造其文法。
2.1 文法和语言的定义
根据文法抽象语言
文法 G={VN,VT,P,S},其中: VN={<数>,<数字串>,<数字>}; VT={0,1,2,3,4,5,6,7,8,9}; P: <数><数字串> <数字串><数字串><数字>|<数字> <数字>0|1|2|3|4|5|6|7|8|9 S=<数>
编译原理第二章 文法和语言资料

第二章文法和语言本章讲述目前广泛使用的上下文无关文法。
即用上下文无关文法作为程序设计语言语法的描述工具。
阐明语法的一个工具是文法。
本章将介绍文法和语言的概念。
本章重点:上下文无关文法及其句型分析中的有关问题。
第一节文法的直观概念当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需列出句子的有穷集就行了,但对于有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。
以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如:“我是大学生”。
是汉语的一个句子。
汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语,我们采用EBNF来表示这种句子的构成规则:〈句子〉∷=〈主语〉〈谓语〉〈主语〉∷=〈代词〉|〈名词〉〈代词〉∷=我|你|他〈名词〉∷=王明|大学生|工人|英语〈谓语〉∷=〈动词〉〈直接宾语〉〈动词〉∷=是|学习〈直接宾语〉∷=〈代词〉|〈名词〉“我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。
这些规则成为我们判别句子结构合法与否的依据。
一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。
我们开始去找∷=左端的带有〈句子〉的规则并把它表示成∷=右端的符号串,这个动作表示成:〈句子〉⇒〈主语〉〈谓语〉,然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓语〉,再用相应的规则∷=右端代替之。
比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉,那么得到:〈主语〉〈谓语〉⇒〈代词〉〈谓语〉,重复做下去,我们得到句子:“我是大学生”的全部动作过程是:〈句子〉⇒〈主语〉〈谓语〉⇒〈代词〉〈谓语〉⇒我〈谓语〉⇒我〈动词〉〈直接宾语〉⇒我是〈直接宾语〉⇒我是〈名词〉⇒我是大学生符号⇒的含义是,使用一条规则,代替⇒左边的某个符号,产生⇒右端的符号串。
显然,按照上述办法,不仅生成“我是大学生”这样的句子,还可以生成“王明是大学生”,“王明学习英语”,“我学习英语”,“他学习英语”,“你是工人”,“你学习王明”等几十个句子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章文法和语言本章讲述目前广泛使用的上下文无关文法。
即用上下文无关文法作为程序设计语言语法的描述工具。
阐明语法的一个工具是文法。
本章将介绍文法和语言的概念。
本章重点:上下文无关文法及其句型分析中的有关问题。
第一节文法的直观概念当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需列出句子的有穷集就行了,但对于有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。
以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如:“我是大学生”。
是汉语的一个句子。
汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语,我们采用EBNF来表示这种句子的构成规则:〈句子〉∷=〈主语〉〈谓语〉〈主语〉∷=〈代词〉|〈名词〉〈代词〉∷=我|你|他〈名词〉∷=王明|大学生|工人|英语〈谓语〉∷=〈动词〉〈直接宾语〉〈动词〉∷=是|学习〈直接宾语〉∷=〈代词〉|〈名词〉“我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。
这些规则成为我们判别句子结构合法与否的依据。
一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。
我们开始去找∷=左端的带有〈句子〉的规则并把它表示成∷=右端的符号串,这个动作表示成:〈句子〉⇒〈主语〉〈谓语〉,然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓语〉,再用相应的规则∷=右端代替之。
比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉,那么得到:〈主语〉〈谓语〉⇒〈代词〉〈谓语〉,重复做下去,我们得到句子:“我是大学生”的全部动作过程是:〈句子〉⇒〈主语〉〈谓语〉⇒〈代词〉〈谓语〉⇒我〈谓语〉⇒我〈动词〉〈直接宾语〉⇒我是〈直接宾语〉⇒我是〈名词〉⇒我是大学生符号⇒的含义是,使用一条规则,代替⇒左边的某个符号,产生⇒右端的符号串。
显然,按照上述办法,不仅生成“我是大学生”这样的句子,还可以生成“王明是大学生”,“王明学习英语”,“我学习英语”,“他学习英语”,“你是工人”,“你学习王明”等几十个句子。
事实上,使用文法作为工具,不仅为了严格地定义句子的结构,也是为了用适当条数的规则把语言的全部句子描述出来,是以有穷的集合刻划无穷的集合的工具。
第二节符号和符号串符号和符号串,在形成语言中和编译技术中是很重要的概念。
任何一种语言,都是由许多语言的基本符号组成的符号串的集合。
如:英语的基本符号有26个字母和一些标点符号,英语,就是由这些符号所组成的符号串的集合。
(一)字母表和符号串字母表是元素的非空有穷集合,字母表中的元素称为符号。
由字母表中的符号所组成的任何有穷序列称之为“符号串”。
例如:00,01,10 是字母表Σ={0,1}上的符号串,又如ab,abc,bc 是字母表Σ={a,b,c}上的符号串。
还允许有空符号串。
空符号串是不包含任何符号的符号串。
用ε表示,其长度为0,即|ε|=0。
(二)符号串的运算相等X=Y当且仅当组成X的诸符号与组成Y的诸符号依次相等,Σ={a,b ,c}X=abbc Y=abbc X=Y X=ab Y=ba X≠Y①符号串的长度,X是符号串,则其长度用|X|表示。
其数值等于组成该符号串的符号个数。
如:X=STV |X|=3 而|ε|=0②符号串s的前缀:移走符号串s尾部的零个或多于零个符号得到的符号串.如:b是符号串banana的一个前缀.符号串s的后缀:删去符号串s头部的零个或多于零个符号得到的符号串.如:nana是符号串banana的一个后缀.Z=abc,那么Z的前缀.是ε,a,ab,abcZ的后缀.ε,c,bc,abc③符号串的联接,X和Y是符号串,它们的联接XY是把Y的符号写在X的符号之后,得到的符号串。
X=ST Y=abu XY=STabu|X|=2 |Y|=3 |XY|=5 由于ε的含义显然有εX=Xε=X④符号串的方幂,X是符号串,把X自身连接几次得到的符号串Z,Z=XX……XX ,Z=X nX0=εX1=XX2=XXX=abc X0=εX1=abc X2=abcabc……n>0有X n=XX n-1=X n-1x⑤集合的乘积运算符号串的集合:若集合A中的一切元素都是某字母表上的符号串,则称A为该字母表上的符号串集合。
AB={XY|X∈A,Y∈B}如:A={a,b} B={c,d} AB={ac,ad,bc,bd}∵对于任意符号串X总有εX=Xε=X∴{ε}A=A{ε}=A⑥集合A的闭包A*和集合A的正闭包A+A+=A1∪A2∪A3……A n∪……A*=A0∪A+A={a,b}A+={a,b,aa,ab,ba,bb,aaa,aab……}A*={ε,a,b,aa,ab,ba,bb……}第三节文法和语言的形式定义规则,也称重写规则、产生式,是形如α→β或α∷=β的(α,β)有序对,α是规则的左部,β是规则右部。
α∈V+β∈V* V为某字母表①定义1 文法G定义为四元组(V N,V T,P,S)。
其中V N为非终结符号集V T终结符号集非空有穷集P产生式的集合S称为识别符号或开始符号,它是一个非终结符,它至少要在一条规则中作为左部出现。
Vn∩V T=φV=Vn∪V T V称为文法G的字母表。
②定义2,如α→β是文法G=(V N,V T,P,S)的规则,γ和δ是V*中的任意符号,若有符号串V,W满足V=γαδ,W=γβδ则说V(应用规则α→β)直接产生W或说W是V的直接推导或说W直接归约到V记作V⇒W 如,对于G[S] :S→0S1,S→01V=0S1 W=0011 直接推导:0S1⇒0011,使用的规则S→01 这里γ=0 ,δ=1 V=S,W=0S1 直接推导:S→0S1 使用的规则:S→0S1,这里γ=ε,δ=ε③定义3,如果存在直接推导的序列:V=Wo⇒W1⇒W2……⇒W n=W(n>0)则称V推导出W或称W归约到V。
记作V+⇒W。
④定义4 若有V+⇒W,或V=W,则记作V* ⇒W如,对于G[S] S→0S1,S→01存在直接推导序列V=0S1⇒00S11⇒000S111⇒00001111=W,即0S1+⇒00001111也可记作0S1* ⇒00001111⑤定义5,设G[S]是一文法,如果符号串X是从识别符号推导出来的,即S* ⇒X,则称X是文法G[S]的句型。
若X仅由终结符号组成,即S* ⇒X X∈V T* S:识别符号,则称X是文法G[S]的句子。
⑥定义6,文法G所产生的语言L(G)={X|S* ⇒X,X∈V T* ,S:识别符号},即文法G[S]所产生的所有句子的集合。
形式语言理论可以证明如下两点:A、给定一个文法,就能从结构上唯一地确定其语言G→L(G)B、给定一种语言,能确定其文法,但这种文法不是唯一的L→G1或G2,……在此我们用例子说明。
如文法G[Z]:(1)Z→aZb(2)Z→ab由该文法所确定的语言为:用规则(1):Z⇒a Zb⇒a2Zb2⇒…⇒a n-1Zb n-1用规则(2):⇒a n b n所以,:L(G[Z])={ a n b n |n≥}。
又如已知语言为:L(G)={ab n a|n≥1} 可构造其文法G:G:Z→ a B a B→ b B|b对于上述语言,还可构造文法G′G′:Z→a B a/B→Bb|b很显然,G不同于G′。
对上述语言还可以构造出其他文法。
⑦定义7,若L(G1)=L(G2)则称文法G1和G2是等价的。
第四节文法的类型乔姆斯基把文法分成四种类型,即0型、1型、2型和3型。
这几类文法的差别在于对产生式施加不同的限制。
1、设G=(V N,V T,P,S),如果它的每个产生式α→β是这样一种结构:α∈( V N∪V T) *且至少含有一个非终结符,而β∈( V N∪V T) *,则G是一个0型文法。
0型文法也称短语方法。
一个非常重要的理论结果是,0型文法的能力相当于图灵机(Turing)。
2、设G=(V N,V T,P,S)为一文法,若P中的每一个产生式α→β均满足| β |≥| α |,| α |指符号串α的长度,仅仅S→ε除外,则文法G是1型或上下文有关的。
3、设G=(V N,V T,P,S),若P中的每一个产生式α→β满足:α是一非终结符,β∈( V N∪V T) * 则此文法称为2型的或上下文无关的。
例G=({S,A,B},{a, b},P,S),其中P由下列产生式组成:S→aB A→bAAS→bA B→bA→a B→bSA→aS B→aBB有时,为书写简洁,常把相同左部的生产式,形如A→α1A→α2...A→αn缩写为:A→α1|α2|…|αn这里的元符号“|”读做“或”。
上例的P可写为:S→aB | bAA→a |aS| bAAB→b |bS| aBB4、设G=(V N,V T,P,S),若P中的每一个产生式的形式都是A→aB或A→a,其中A和B 是非终结符,a是终结符,则G是3型文法或正规文法。
例文法G=({S,A,B},{0,1},P,S),其中P由下列产生式组成:S→0A A→1BS→1B B→1BS→0 B→1A→0A B→0A→0S显然G是正规文法。
四个文法类的定义是逐渐增加限制的,因此每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是0型文法。
第五节上下文无关文法及其语法树上下文无关文法有足够能力描述现今程序设计语言的语法结构,如算术表达式,各种语句等。
(一)语法树:上下文无关文法句型推导的图解过程给定文法G=(V N,V T,P,S)对于G的任何句型都能构造与之关联的语法树。
这棵树满足下列4个条件:1、每个结点都有一个标记,此标记是V的一个符号。
2、根的标记是S3、若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在V N中。
4、如果结点n的直接子孙,从左到右的次序是结点n1,n2,…,n k,其标记分别为A1,A2,…,A K,那么A→A1A2…A K一定是P中的一个产生式。
从一个例子来说明某语法树的构造。
例1 G[S] =({S,A},{a, b},P,S),其中P为:(2)A→SbA(3)A→SS(4)S→a(5)A→ba图2-5-1是G[S]的一棵语法树图2-5-1的语法树是G[S]的文法的句型aabbaa的推导过程非常直观自然的描述,从左至右读出图2-5-1的语法树的叶子标记,得到的就是句型aabbaa。
最左(最右)推导:在推导的任何一步α⇒β,其中α、β是句型,都是对α中的最左(最右)非终结符进行替换,则称这种推导为最左(最右)推导。
最右推导常被称为规范推导。
由规范推导所得的句型称规范句型。
例如,S⇒aAS⇒aAa⇒aSbAa⇒aSbbaa⇒aabbaa(二)递归规则与递归文法递归的概念在编译技术中是一个很重要的概念。