第2章 形式语言的基本知识_513
第2章形式语言的基本知识

• 7.符号串的 前缀:s为符号串,把s从尾部删去若干个 (包括0个)符号后所余下的部分称为s的前缀。
符号串abc的前缀是什么?
• 8.符号串的 后缀:s为符号串,把s从前部删去若干个 (包括0个)符号后所余下的部分称为s的后缀。
文法
<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式 > <表达式>::=“(”<表达式>“)” | <标识符> | <整数> | < 实数>
赋值语句
标识符
表达式
=
y
表达式 + 表达式
y =x+r*6
标识符 表达式
表达式
*
x 标识符
推导方法:从一个要识别的符号 开始推导,即用相应规则的 右部来替代规则的左部, 每次仅用一条规则去进行推导。
<句子> => <主语><谓语> => < 代词><谓语>
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词> ::=你|我|他 <名词>::= 王民|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>
形式语言基本知识.

形式语言基本知识
本章要求
• 主要内容:符号串,文法的概念及分 类,语言的定义过程
• 重点掌握:上下文无关文法、推导、 句型、句子、语言,语法树、二义性 文法、文法的语言生成过程
• 以C和PASCAL为例复习高级语言
– 1 语言的基本字符集的定义(字母, 数字, 界符) – 2 单词集的定义 – 3 数据类型的定义 – 4 表达式的定义 – 5 语句的定义 – 6 程序定义
文法的形式定义(续)
• 一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S) –其中Vn表示非终结符号 –Vt表示终结符号,Vn∪Vt=V(字母表), Vn∩Vt=φ –S是开始符号, –P是产生式,形如:α β (α ∈V+且至少含有 一个非终结符号,β ∈V*)
–上例中: G=(Vn,Vt,P,<句子>) Vn=(<句子>,<主语>,<谓语>,<代词>,<动词>, <名词>,<直接宾语>) Vt= (我,是,大学生) P =
(1.1)
E (E) (i) E E*E (E)*E (E + E)*E (i + E)*E (i + i)*E (i + i)*i E E E E E (i + i)*i (i + i)*i (E) 0步推导 6步推导 6步推导 直接推导
• 句型:设G(s)是一文法,如果符号串x是从开始符 * 号推导出来的,即有s=>x, 则称x是文法G(s)的一个 句型。 即: 任何由开始符S推导出来的符号串都是句型。 • 句子:若x仅由终结符号组成,则称x为G(S)的句子 • 练习 文法G:SaAcB | Bd AAaB | c BbScA | b 写出句型aAcbBdcc和句子acabcbbdcc的 推导过程。
第2章 形式语言基础

研究符号串集合的表示方法、结构特性 以及运算规律。
第2章 形式语言基础
【内容提要】
2.1 形式语言是符号串集合 2.2 形式语言是由文法定义的 2.3 各种语法成分的定义 2.4 两类特性文法 2.5 文法变换方法 2.6 形式语言的分类
2.1 形式语言是符号串集合
【形式语言】是字母表上的符号按一定的 规则组成的所有符号串集合;其中的每个符号串 称为一个句子。
【例2.2】 L2={ abmc,bn | m>0,n≥0 } 字母表∑2= {a,b,c},
▪句型1: abmc 有句子:abc, abbc, abbbc,…
▪句型2: bn 有句子:, b, bb, bbb,…
【注】 (1) b0=(空符号串),b1=b,b2=bb,b3=bbb,…
(2) L1 为有限语言; L2 为无限语言。
5.固有头,固有尾
对于每个符号串s, s和ε两者都是符号串s的前缀, 后缀和子串。 符号串s的固有头,固有尾:
z=xy,x是z的头,y是z的尾,如果x非空则y是固 有尾,如果y非空则x是固有头。 例:在Z=abc Z的头:ε,a,ab,abc;其中固有头:ε,a,ab
Z的尾:ε,c,bc,abc;其中固有尾:ε,c,bc
则该集合的文法是:
(1) A->aBa B->b|Bb|bB
(2) Z->ABC A->a C->a B->bB|Bb|b
(3) A->aB B->ba|bB 练习2. Σ={a,b,c}上的字符串集
A={ancbn|n>=0} 该集合的文法是:
A->aAb|c
【例2.8】标识符的文法
【标识符】指字母开头的字母、数字序列。
第二章 形式语言概论

语言的有穷表示有两个途经
生成方式(文法)
语言中的每个句子可以用严格定义的 规则来构造。
识别方式(自动机)
用一个过程,当输入的一任意串属于 语言时,该过程经有限次计算后就会停止 并回答“是”,若不属于,要么能停止并回 答“不是”,要么永远继续下去。
§2.2 文法及其分类
2.2.1 文法的定义
A*=∪Ai(i≥0)=A0∪A1∪A2∪A3∪…
例如:A={a,b}
则A*={ε,a,b,aa,ab,ba,bb, aaa,aab,aba,abb, …}
A*与A+的关系:
A*=A0∪A+
A+=AA*=A*A
由此得出结论:n语言是由句子组成的集 合,是由一组符号所构成的集合。换言之,字 母表S上的一个语言是S上的一些符号串的 集合。(字母表S上的每个语言是S*的一个 子集)。
的规则(或说是P中的一个产生式),和 是V*中的任意符号,若有符号串v,w,满 足v= ,w= ,则称v (应用规则 )直接产生w,或v直接推导出w,或 w是v的直接推导,或w直接归约到v,记 作v w。
例:
文法G[S]由如下规则组成: SA A AB|B B 0|1|2|…|9 其中S是文法 G [S] 的识别符号,该文法的 字母表为:V={S,A, B,0,1,…,9} 用这些规则和直接推导的定义可以推出所有 正整数,如可推导出24:
P15~P16例2.6~例2.10的文法类型。
2型文法可改写成3型文法。
例:将如下的上下文无关文法改写为等价的 正规文法。 G[S]:SabcA AbcB Ba 改写后G[S]: AbE SaM EcB MbN Ba NcA
文法分类的意义
文法分类对于实现程序设计语言的编译 程序具有重要意义。
第二章 形式语言概述

2.3 文法的分类
0型文法(短语文法):
– 对产生式无限制。
1型文法(上下文相关文法): – 文法中任意的产生式→,则存在1,2 (VNVT)*; (VNVT)*;AVN;使得 = 1A2, = 12。
– A+ = A1 A2 … … – A+ = A A*
例:
– { 0, 1 }+为所有二进制串的集合。
2.1 基本概念
语言
– 一个语言为满足一定规律的串的集合。
语言的表示方法
– 集合表示:{ 1, aa, b }, { anbn| n > 0 }。 – 串集合的运算:a+{1, a}*。
推导:如果存在一个直接推导序列 = 0 = ,n > 0,则称为的一个推导,记为
''。1
…
n
''* 表示 '' 或者 =
例:10为S的推导,1100为S的推导,111S000为1S0的推 导。
2.2 文法与语言
最左推导:如果A ,VT*,AVN, , (VNVT)*,则称为A的一个最左推导。
– 符号的有穷序列称为符号串 – 不包含任何符号的串称为空串,记为
– 串α中符号的个数称为串α的长度,记为||
2.1 基本概念
串集合的乘积 – 令A、B为两个串集合,则A与B的乘积A·B = { | A, B },也可以缩写为AB – {} ·A = A ·{} = A, Ø·A = A ·Ø = Ø
第二章形式语言的基本知识

第二章形式语言的基本知识第二章形式语言的基本知识2-1什么是形式语言2-2字母表和符号串的基本概念2-3用文法产生法描述语言2.3.1通过文法产生语言的方式2.3.2为已知的语言构造相应的文法2-4句型分析2.4.1短语和简单短语2.4.2文法的二义性和语言的二义性2-5文法和语言的分类2-6文法的其他表示方法2-7C--语言的形式定义2-8小结2-1什么是形式语言2-2字母表和符号串的基本概念2-3用文法产生法描述语言2.3.1通过文法产生语言的方式2.3.2为已知的语言构造相应的文法2-4句型分析2.4.1短语和简单短语2.4.2文法的二义性和语言的二义性2-5文法和语言的分类2-6文法的其他表示方法2-7C--语言的形式定义2-8小结2- 1什么是形式语言一、形式语言的提出目标程序源程序编译程序如何确切地描述或定义高级程序设计语言形式语言2-1什么是形式语言一、形式语言的提出形式语言是研究符号的语言,它仅考虑符号间的关系,不考虑含义。
即用数学方法(主要是代数方法)对语言进行形式化描述。
从非形式化的角度来讲,语言是人们交流思想的工具,从语言学本身来说,也是一门古老的科学,在很早以前人们就用数学方法开始对语言学进行研究。
1847年,俄国数学家布拉库夫斯基就用概率论进行语法词源及语言历史比较研究。
1904年,波兰语言学家指出,语言学家不仅要掌握初等数学而且还要掌握高等数学。
1931年,俄国数学家就用概率论研究俄语元音字母和辅音字母序列。
特别是1946年电子计算机问世以来更加促使数学和语言学结合研究。
2-1什么是形式语言一、形式语言的提出1956年,28岁的N.Chomsky(乔姆斯基)在《信息论杂志》上发表了《语言描写的三个模型》,他首次采用Markov模型来描写自然语言,对于有限状态模型、短语结构模型和转换模型等三个模型,从语言学和数学的角度进行了理论上的分析,建立了形式语言理论,具有划时代意义。
第2章形式语言概论

,P9=}{ I→L| I L| I D L→a | b | c | … | x | y | z D→0 | 1 | 2 | 3 | … | 9
S=I }
文法的形式定义
若将定义标识符的文法设计成: G=(VN,VT,P,S )
1. 字母表 元素的非空有穷集合。 例如,∑={ a, b, c } 根据字母表的定义,Σ是字母表,
它由a、b、c三个元素组成。
字母表和符号串
注意: (1) 字母表中至少包含一个元素。 (2) 字母表中的元素, 可以是字母、 数字或其他符号。 例如,∑' ={0, 1} 是一个字母表,由0、1两个元素 组成。
第2章 形式语言概论
形式语言理论是编译的重要理论 基础。本章主要介绍编译理论中用到 的有关形式语言理论的最基本概念, 重点介绍如何采用形式化的方法描述 程序设计语言。
第2章 形式语言概论
字母表和符号串 文法和语言的形式定义 文法和语言的分类 短语、直接短语和句柄 语法树和文法的二义性
概述
当n=1 L={aa, bb} L={a2n, b2n | n≥1}
当n=2 L={aaaa, bbbb} 当n=3 L={aaaaaa, bbbbbb}
…… L={aa, bb, aaaa, bbbb, aaaaaa, bbbbbb, … …} 即语言L是由偶数个a,偶数个b这样的 符号串组成的集合。
幂运算定义为:
A0={} A1=A A2=AA
… An= AA … A=AAn-1(n>0)
n
符号串的运算
例如,设A={ a, b },则 A0={} A1=A={ a, b } A2=AA={ aa, ab, ba, bb } A3=AAA=A2A
第二章 形式语言基础

第二章 形式语言基础知识
§2.1 引言
一、形式语言提出 二、语言描述方法 八、 递归文法 九、短语和简单短语 十、最左推导和最右推导 十一、文法二义性
§2.2 用文法生成法对语言 进行描述
一、巴科斯范式 二、语法和语义 三、语法树
§2.4 语法分析初步
一、自顶向下语法分析 二、自底向上语法分析
§2.3 形式语言基本概念和 术语
§2.1 引言
一、形式语言提出 二、语言描述方法 八、 递归文法 九、短语和简单短语 十、最左推导和最右推导 十一、文法二义性
§2.2 用文法生成法对语言 进行描述
一、巴科斯范式 二、语法和语义 三、语法树
§2.4 语法分析初步
一、自顶向下语法分析 二、自底向上语法分析
§2.3 形式语言基本概念和 术语
9
3. 自动机识别法:用自动机对语言中的句子进行识别,自动 机是描述离散变量的一个系统(数学模型),因在形式语言中 称为识别器,也可看成是一个识别程序。不同语言对应不同自 动机,对应某个语言的自动机能接受该语言的句子,否则不接 受。
下面我们着重讨论用文法生成法来描述语言。
10
第二章 形式语言基础知识
三、语法树
除了上面可以根据语言语法规则来推导出句子,还 可以用图解形式来表示。以图解(树)形式来描述句子 语法结构关系,称语法树。
26
句子 the man has a book的推导过程及对应的语法树
<句子>
27
句子 the man has a book的推导过程及对应的语法树
<句子> <主语> <谓语>
16
巴科斯范式是描述语法规则的一种表示方法,它是由巴科斯 为了描述 ALGOL 语言在 ALGOL60 报告中首先提出的。采用 这种形式定义语法规则,可以用简洁的公式把各种语法规则 严格而清晰描述出来。例如,在高级语言中大家所熟知的 〈标识符〉这种语法成分,它用巴科斯范式描述为: 〈 标识符〉∷=〈字母 〉|〈 标识符 〉〈字母〉|〈标识符〉 〈数字〉 〈字母〉∷= A|B|C|D|…|Z 〈数字〉∷= 0|1|2|…|9 这样便刻画出了〈标识符〉是以字母开始的一串字母和数字
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理
2020/6/16
文法的表示方法 1. BNF的元符号: <, >, ::=, |
2. EBNF: 扩充的BNF的元符号: <, >, ::=, |, {, }, [, ] (, )
3.语法图
标识符
字母
字母
数字
无符号整数
数字
编译原理
2020/6/16
推导的形式定义
如果α→β是文法G=(VT,VN,S,P)的一个产生式, γ,δ∈V*,有符号串x,y满足 x=γαδ,y=γβδ, 则称y是x的直接推导, 也可以说,y直接归约到x,记作x y。
2020/6/16
符号串集合的幂运算
有符号串集合A,定义A0 ={ε}, A1=A, A2=AA, A3=AAA,…… An=An-1A=AAn-1 ,n>0
例如,A={0,1},则 A0= {ε} A1= {0,1} A2= {00,01,10,11} A3= {000,001,010,011,100,101,110,111}
分进行推导,这称之为最左推导,类似的有最右推导(一般推 导)。
(2) 从一组规则可推出不同的句子,如以上规则还可推出 “大象吃象”、“大花生吃象”、“大花生吃花生”等句子, 它们 在语法上都正确,但在语义上都不正确。
所谓文法是在形式上对句子结构的定义与描述,而未 涉及语义问题。
编译原理
2020/6/16
=> the big elephant ate the <名词>
=> the big elephant ate the peanut
编译原理
2020/6/16
上述推导可写成<句子> =+> the big elephant ate the peanut
说明: (1) 有若干语法成分同时存在时,我们总是从最左的语法成
<谓语>::=<动词><宾语> <动词>::=ate <宾语>::=<冠词><名词>
=> the big elephant <谓语>
=> the big elephant <动词><宾语>
=> the big elephant ate <宾语>
=> the big elephant ate <冠词><名词>
〈表达式〉→(〈表达式〉)
〈表达式〉→i
}
编译原理
2020/6/16
几点说明:
产生式左边符号构成集合VN ,且 S ∈ VN
VN :代表程序的语法成份,如“<表达式>”,它不会 出现在程序中
VT :会出现在程序中,如i+i
给定一个 文法,实际只需给出产生式集合,并指定识别符号 G[表达式]: 〈表达式〉→〈表达式〉+〈表达式〉 〈表达式〉→〈表达式〉*〈表达式〉 〈表达式〉→(〈表达式〉) 〈表达式〉→i
编译原理
2020/6/16
2.2 文法和语言的形式定义
文法是对语言结构的定义与描述。(或称为“语法”)。
<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表 达式> <表达式>::=“(”<表达式>“)” | <标识符> | <整数> | < 实数>
文法的形式定义
V=VN ∪VT 称为文法的字母表
文法G[S]=(VN,VT,P,S) VN :非终结符号集 VT :终结符号集 P: 产生式或规则的集合 S: 开始符号(识别符号) S∈ VN ,S至少要在 一条规则中作为左部出现
补: 规则的定义 α :: β 或αβ α∈V+且至少有一个非终结符,而β∈(VN ∪ VT)*
例如:字母表 Σ={a,b} ,Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}
集合{ab,aabb,aaabbb,…,anbn,…}
或表示为{w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语
言 集合{a,aa,aaa,…}
或表示为{w|w∈Σ*且w=an,n≥1} 为字
母表上的一个语言
=>我<动词><直接宾 语=>>我是<直接宾语>
=>我是<名词>
=>我是大学生
编译原理
2020/6/16
例:有一英语句子:The big elephant ate the peanut.
<句子>::=<主语><谓语> <主语>::=<冠词><形容词><名词> <冠词> ::=the <形容词>::=big <名词>::=elephant <谓语>::=<动词><宾语> <动词>::=ate <宾语>::=<冠词><名词> <名词> ::=peanut
编译原理
2020/6/16
赋值语句
y =x+r*6
标识符
表达式
=
y
表达式 + 表达式
标识符 表达式
表达式
*
x 标识符
整数
编译原理
r
6
2020/6/16
文法的非形式定义
例:有一句子:“我是大学生” 。这是一个在语法、 语义上都正确定句子,该句子的结构(称为语法结构)是由 它的语法决定的 。在本例中它为“主谓结构”。
s0=ε,s1=s,s2=ss,…… 设s=01,则 s0=ε s1=01 s2=0101 ……
编译原理
2020/6/16
符号串集合的乘积 设A、B为符号串集合,则A和B的乘积定义 为:AB={ xy |x∈A,y∈B}
例如,A={a,b},B={c,d}
则AB={ac,ad,bc,bd}
编译原理
编译原理
2020/6/16
【例2.1】程序语言中只含+、*运算的算术表达式,用i
表示变量或常数,其文法可以表示为:
G=(VT , VN, S, P),其中: VN={表达式} VT={+,*,(,),i} S=〈表达式〉
描述了表达式的 语法规则
P={〈表达式〉→〈表达式〉+〈表达式〉
〈表达式〉→〈表达式〉*〈表达式〉
L→a|b|…|z
D→0|1|…|9
编译原理
2020/6/16
例:无符号整数的文法: G[<无符号整数>]
描述了无符号整 数的词法规则
<无符号整数> → <数字串>
<数字串> → <数字串> <数字> | <数字>
<数字> →0 | 1 | 2 | 3 | …… | 9
编译原理
2020/6/16
说明:
编译原理
2020/6/16
符号串集合的闭包运算
设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, ……}
A1
A2
第2章 形式语言的基本知识
教学目标
1. 本章是编译原理课程的理论基础,要求掌握形 式语言的基本术语和概念。
2. 掌握文法和语言的定义,文法的二义性与递归 性的判断方法及句型的分析方法。
3. 熟练使用文法定义程序设计语言的单词和语法 成分。
4. 对形式语言的理论有一个初步认识。
编译原理
2020/6/16
B为单词集 B ={if, else,for,……,<标识符>,<常量>,……}
则B A* 。 语言的句子是定义在B上的符号串。 若令C为句子集合,则C B * , 程序 C
编译原理
2020/6/16
语言是由句子组成的集合,是由一组符号所构成的集合
➢ 字母表上的一个语言是上的一些符号串的集合 ➢字母表上的每个语言是*的一个子集
编译原理
2020/6/16
例如:G[<无符号整数>] (1) <无符号整数> → <数字串> (2) <数字串> → <数字串> <数字> (3) <数字串> → <数字> (4) <数字> →0 | 1 | 2 | 3 | …… | 9
文法的BNF表示
编译原理
2020/6/16
2.由规则推导句子:有了一组规则之后,可以按照一定的方式 用它们去推导或产生句子。
推导方法:从一个要识别的符号开始推导,即用相应规则的 右部来替代规则的左部,每次仅用一条规则去进行推导。
<句子> => <主语><谓语> <主语><谓语> => <代词><谓语>
例:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
编译原理
2020/6/16
为什么对符号、符号串、符号串集合以及它们的运算感兴趣?