计算理论导引 2 上下文无关文法-课讲义件PPT(演示稿)
(完整版)形式语言自动机——上下文无关文法与下推自动机(二)PPT文档
5
算法1: 找出有用非终结符
步骤: (1) N 0 = (赋为) N 0为有用的非终结符集 (2) N’ = {A | A→ω且ω∈T*} N’为非终结符集合 (3) 如果N 0≠N’ 则转(4),否则转(6) (4) N 0=N’ (5) N’= N 0∪{ A | A→α且α∈(T∪N 0)* }, 转(3) (6) N 1 = N’ 小结: 算法1找出能推出终结符串的非终结符作为有 用符号.
A→A*B|(S)|a
B→(S)|a
25
消除递归 递归的定义:
在2型文法中 若存在 A=>+αAβ, A∈N,则称G是递归文法。 若存在 A=>+ Aβ G是左递归文法 若存在 A=>+αA G是右递归文法 若存在 A=>+ A G是循环文法
26
生成式的代换
定义: 2型文法中所有形如A→α的生成式称为A生成式. 引理1: 对A→α的A生成式可进行变换 设 G = (N,T,P,S)
中加入产生式 A ,其中 B 为一个非单产生式;从
而消去 G 中的单产生式,得到 CFG G1 = (N, T, P1, S ): 算法步骤: (1) 对每个A∈N,构造非终结符集NA={B|A=>* B}
( NA是可由A推出的单生成式中的非终结符集)。 构造方法分三步:
① N0={A} ② N’={C | 如果B→CP且B N0}∪N0 ③若N’≠ N0,则N0=N’,转向② (继续迭代)
= {A}∪{S} = {A, S}
③ ∵ N0≠N’ ∴ N0 = N’ = {A,S} 继续转② N’={B}∪{A,S}={B,A,S}
形式语言和自动机上下文无关文法与下推自动机课堂PPT
(3)由(q1,)(q1, 1, X) 得 [q1 ,X ,q1] 1;
(4)由(q2,)(q1, , Z0) 得 [q1 ,Z0 ,q2] ;
(5)由(q0,XZ0)(q0, 0, Z0) 得 [q0 ,Z0 ,qj] 0[q0 ,X ,qi] [qi ,Z0 ,qj] , i, j = 0,1,2;
从上下文无关文法构造等价的下推自动机
定理4.5.1(由CFG可导出PDA): 设上下文无关文法G=(N,T,P,S),产生语
言L(G),则存在PDA M,以空栈接受语言Lφ(M), 使Lφ(M)=L(G)。
证明:构造下推自动机M,使M按文法G的最左推导 方式工作。
1
从上下文无关文法构造等价的下推自动机
q0 b, A/ε
b, A/ε ε, A/ε
q1 ε, z0/ε
(3) 对①式δ(q0,a,z0)={( q0, A z0)} , ∵所有可能的状态序列为:q0q0,q1q0,q0q1,q1q1 ∴可构造出产生式:
[q0,z0,q0]→ a [ q0,A, q0 ][ q0,z0, q0 ] [q0,z0,q0]→ a [ q0,A, q1 ][ q1,z0, q0 ] [ q0,z0,q1]→ a [ q0,A, q0 ][ q0,z0, q1 ] [ q0,z0,q1]→ a [ q0,A, q1 ][ q1,z0, q1 ]
then A w.
归纳于 (q, w,A)├*(q, , ) 的步数 n.
基础 n=1,必有 w = ,且 A 为 G 的产生式,所以 A w.
归纳 n>1,设第一步使用产生式 AX1X2…Xm , 可以将w 分为 w = w 1 w 2… w m ,满足 (q, wi , Xi )├*(q, , ),
上下文无关文法
第三部分上下文无关语言和下推自动机前面介绍的有限自动机是计算的初级模型,它所接受的正规语言不太关心字符串自身的结构。
上下文无关文法(CFL)是一种简单的描述语法规则的递归方法,语言中的字符串由这些规则产生。
所有的正规语言都能用上下文无关文法描述,它也可以描述非正规语言。
上下文无关文法描述的语法规则更复杂多变,可以在相当大的程度上,描述高级程序设计语言的语法和其他一些形式语言。
类似正则语言对应的抽象机模型是有限自动机,CFL也有对应的抽象机模型。
CFL对应的计算模型是在有限自动机的基础上增加存储空间得到,并被设想成无限空间(对应有限自动机的有限空间),采用了一种简单的管理模式,栈(stack),这种新的计算模型(或抽象机)称为下推自动机(pushdown automata),下推是栈最典型的操作。
有必要在下推自动机中保留非确定性,确定型下推自动机不能接受所有的CFL,但给定一个CFG,容易构造一个相应的非确定型下推自动机,它在识别字符串过程中的移动模拟了文法的推导过程,这个过程称为分析(parse)。
分析不是一定需要下推自动机来完成。
CFL仍然不够通用,不能包括所有有意义的、或有用的形式语言。
采用类似第五章的技术,我们将给出一些不是CFL的简单例子,这些技术也用于解决与CFL相关的判定问题。
6 上下文无关文法6.1 上下文无关文法的定义为了描述我们在第二部分考察的各种语言,包括一些非正则语言,我们引入一种语言的递归定义方法,称为文法。
文法与我们熟悉的语言的语法描述相近,是描述语言和分析语言的有力工具。
问题:文法的形式化定义似乎可以模仿有限自动机,比如5元组或6元组之类。
例子6.1 正如我们在例子2.16中所见,字母表{a, b}上的回文语言pal可以用下面的递归方法描述:1.Λ, a, b∈pal2.对每个S∈pal,aSa和bSb也属于pal3.pal中不包含其他字符串如果将上面的符号S看成一个变量,代表了所有我们希望计算(比如某种递归算法)的pal 的元素,那么上面的规则1和规则2可以非正式地重新表述如下:1.S的值可以是Λ, a, b2.每个S可以写成aSa或bSb的形式如果我们用→表示“可以取值为”,则可以写出下面的式子:S→aSa→abSba→abΛba=abba上面的产生过程可以总结成下面的两组产生式(或称规则):S→a | b | ΛS→aSa | bSb符号“|”表示“或”的含义。
编译原理―第2章 前后文无关文法和语言课件
符号串集合的方幂: 设A是符号串的集合,则称Ai为符号串集A的 方幂,其中i是非负整数。具体定义如下:
A0 ={ε} A1 =A, A2=AA Ak= AA......A(k个)
11
2.2.1 基本概念和术语
集合的闭包
闭包
集合Σ的闭包Σ*定义如下:Σ*=Σ0∪Σ1∪Σ2∪Σ3∪… 例:设有字母表Σ={0,1},则
从文法的开始符号出发 反复使用产生式,对非终结符进行替换(展开) 直到整个字符串中不再包含非终结符 这时,得到了这个文法的一个句子(一个程序) 这个过程称为推导
19
2.2.2 文法和语言的形式定义
文法的形式定义
产生式(规则)
产生式是一个有序对(α, β),通常写作α→β(或α::=β)
Σ*=Σ0∪Σ1∪Σ2∪…={ε,0,1,00,01,10,11,000,…},即Σ*表示Σ上所有有穷长 的串的集合。
正闭包
Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 +表示上的除ε外的所有用穷长串的集合。
Σ*= Σ0∪Σ+ Σ+=ΣΣ*=Σ*Σ
12
2.2.1 基本概念和术语
例题 定义标识符是由字母开头、后跟字母或数字的任意组合构成, 设A={a,b,…,z},B={0,1,…,9},将所有标识符的集合用A和B的运算 来表示。
上下文无关文法
mcy
35
3.2 上下文无关文法的形式定义
1.
2. 3. 4. 5. 6. 7. 8.
上下文无关文法(即2型文法)的形式定义 chomsky文法的分类 推导和规约的定义 句型和句子的定义 最左和最右推导 文法定义的语言 递归产生式和递归文法 文法和语言
mcy
36
5. 最左和最右推导
最左推导 对于文法G[S]: S * 是一个最左推导 是指:在推导过程中的任何一步直接推导α β , 都是对字符串α 中的最左非终结符进行替换,其中 α 、β 是句型。 简单整型算术表达式文法:
mcy
20
3型文法:通常,我们把右线性文法及左线性文法
统称为3型文法或正规文法。 若文法G中任一产生式α→β的形式都为A→aB 或 A→a,其中 A∈VN ,B∈VN ,a∈VT ,则称G 为右线性文法; 类似地,如果G中仅含有形如A→Ba 或 A→a的 产生式,则称G为左线性文法;
mcy
mcy
32
4. 句型和句子的定义
定义4 句型和句子:设G=(VN , VT , P , S)是一文 法,且 V=VN∪VT 若S =>*α,α∈V*,则称α为文法G的句型;
若S=>+α,α∈VT*,则称α为文法G的句子;
mcy
33
简单整型算术表达式文法:
exp → exp op exp|(exp)|number op → +|-|* 给出算术表达式(34-3)*42的一个推导,请 列出推导过程中出现的句型和句子。
28
例:G[S]:S→0S1,S→01 直接推导: S 0S1 0S1 00S11 00S11 000S111 000S111 00001111
第2章 前后文无关文法和语言课件
编译原理第二章前后文无关文法和语言winniewan@本章目的▪为语言的语法描述寻求工具▪掌握对源程序给出精确无二义(严谨、简洁、易读)的语法描述手段之一---文法▪熟练使用文法定义程序设计语言的单词和语法成分▪对形式语言的理论有一个初步基础问题的提出▪如何描述定义一种语言?▪如何识别 & 分析之?用一组数学规则来描述语言的方式:形式描述形式语言本章内容▪文法和语言的表示▪文法和语言的定义▪句型的分析▪文法的化简和改造▪文法和语言的Chomsky分类2.1 文法和语言的表示▪“What is language?”符号串▪语言是由句子组成的集合,是由一组符号所构成的集合。
▪语言的表示方法:▪枚举句子▪制定有限的规则▪建立一种装置(自动机),以检验/识别句子2.2 文法和语言的定义▪基本概念和术语▪文法和语言▪符号:可以相互区别的记号(元素)。
▪字母表∑:符号(元素)的非空有穷集合。
▪符号串:由字母表∑中的符号组成的任何有穷序列称为该字母表上的符号串。
▪定义:1.空符号串ε(没有符号的符号串)是∑上的符号串2.若x是∑上的符号串,a是∑的元素,则xa是∑上的符号串3.y是∑上的符号串,当且仅当它可以由1和2导出▪区分ε,{ε}和φ▪前缀:移走符号串s尾部的零个或多于零个符号得到的符号串▪真前缀▪后缀:删去符号串s头部的零个或多于零个符号得到的符号串▪真后缀▪子串:从s中删去一个前缀和一个后缀得到的符号串▪符号串的长度:符号串中符号的个数.符号串s的长度记为|s|。
ε的长度为0▪连接:符号串x、y的连接,是把y的符号写在x的符号之后得到的符号串xy▪方幂:符号串自身连接n次得到的符号串a n 定义为 aa…aa n个a a1=a, a2=aa则a0=ε▪符号串集合:若集合A中所有元素都是某字母表∑上的符号串,则称A为字母表∑上的符号串集合。
▪两个符号串集合A 和B 的乘积定义为 AB ={xy|x ∈A 且y ∈B }▪使用 ∑*表示∑上的一切符号串(包括ε)组成的集合。
形式语言与自动机课件-第06章 上下文无关文法
具有二义性的文法在理论上和实用上都不是一个好的描述语言的 形式,因此我们应尽量避免写出一个有二义性的文法。但是,对 于某些上下文无关语言,无论用什么上下文无关文法去产生它, 该文法都是有二义性的,这种语言称为“固有二义性的”上下文 无关语言。
写。
对于某些文法来说,对于同一个句型α,可能有两种或两种以上的最左推 导或最右推导来产生它。当然,也就有两棵或两棵以上的以α为边缘的语 法分析树。
上下文无关文法的语法分析
定义6.4 对于某个上下文无关文法G,若有某个字符 串w∈L(G),存在两棵不同的语法分析树都以w为边 缘。则称该文法G是有二义性的。
S aAS aSbAS aabAS aabbaS aabbaaຫໍສະໝຸດ lmlmlm
lm
lm
和唯一的最右推导
S aAS aAa aSbAa aSbbaa aabbaa 。
rm
rm
rm
rm
rm
这里符号“ lm
”和 “ rm
”分别表示最左推导和最右推导。如果在上下文中
已经提到是最左推导或最右推导,则箭头下面的字母lm或rm可以略去不
推导步数用归纳法来证明这一结论。
若推导步数为1,则结论显然成立。现假定,对任何变元A,若通
过少于k步(k>1)的推导得到A * α,则存在一棵边缘为α的A树 。再考虑通过k步推导得到A α* 的情况。
上下文无关文法的语法分析
若推导的第1步是A X1X2…Xn ,则α中符号或是X1,X2,…,Xn中
根据语法分析树与最左(最右)推导的对应关系,对 于文法G的二义性也有等价的定义:若有某个字符串 w∈L(G),存在两个不同的最左(最右)推导过程, 则称该文法G是有二义性的。
计算理论导引ppt课件
end
s1sensor1 s2sensor2
d=1ands1=0ands2=0 N
Y d0
Y
d=0and(s2=1ors1=1ands2=1ors1=0ands2=0)
N
Y
d=1and(s1=1ors2=1ors1=1ands2=1)
N
Y
d=0ands1=1
N
d1
7
CHAPTER 2 COMPUTATIONAL MODELS(1)
front pad
rear pad
BOTH REAR NEITHER
CLOSED
FORNT NEITHER
FORNT BOTH REAR
OPEN
10
CHAPTER 2 COMPUTATIONAL MODELS(1)
front pad
rear pad
NEITHER CLOSED
FORNT REAR BOTH
Hoarwdwtoairmesp:letwmoenstenthsiosrsy; stem? one computer(only 1 bit memory), etc.
How about the software?
6
CHAPTER 2 COMPUTATIONAL MODELS(1)
satrt
tTRUE;d 0
16
}
CHAPTER 2
COMPUTATIONAL MODELS(1)
THEOREM 2.1 The class of regular languages is closed under the union operation. PROOF IDEA. A1=L(M1);A2=L(M2) A1A2=L(M3)?
计算理论导引 2 上下文无关文法
1
主要内容
2.1 上下文无关文法概述
2.1.1 上下文无关文法的形式化定义
2.1.2 上下文无关文法举例 2.1.3 设计上下文无关文法 2.1.4 歧义性 2.1.5 乔姆斯基范式
2.2 下推自动机
2.2.1 下推自动机的形式化定义
2.2.2 下推自动机举例
2.2.1 与上下文无关文法的等价性
L(G)是所有正常嵌套的括号字符串构成的语言。
9
设计上下文无关文法
设计如下语言的上下文无关文法 {0n1n | n 0}∪{1n0n | n 0} {0n1n | n 0} {1n0n | n 0} 设计技巧
化繁为简,利用正则,考察子串,利用递归。
10
设计上下文无关文法
CFG for L1 = {0n1n | n 0} S 0S1 | CFG for L2 = {1n0n | n 0} S 1S0 | CFG for L1∪L2 S S1 | S2 S1 0S11 | S2 1S20 | CFG for L3 = {02n13n | n 0}? S 00S111 |
18
例题
S ASA | aB AB|S Bb| S0 S S ASA | aB AB|S Bb|
19
例题
After that, we remove B
S0 S S ASA | aB AB|S Bb|
Before removing B
S0 S S ASA | aB | a AB|S| Bb
用上下文无关文法产生的语言叫上下文无 关语言。 文法 G1 的简写: A 0A1 | B B#
6
上下文无关文法的形式化定义
第2课 上下文无关文法
8
例2.1 简单的算术表达式
list list + digit list list - digit
9-5+2 list list list digit + digit 2
list digit
digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
- digit 5
假设改为:if (expr )then stmt; 又假设stmt为赋值语句,
那么 语句就会多出现一个分号, 例如:if( a>0 ) b++; ;
21
作业
中序表示转换为后序表示 1+2*3->123*+
22
重点
语法制导翻译器的组成部分? 什么是上下文无关文法? 上下文无关文法的形式化定义(四元组)? 什么是分析树? 什么是二义性? 什么是运算符的结合性?
string string + string | string – string | 0 | 1 | …| 9
string
string + string string - string 2 9 5
string
string string string + string 5 2
9
对某个文法,如一个句子有两棵以上的分析树,称为 16 二义(歧义)文法。
digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
上述文法定义的是由加号和减号分隔的数字 序列构成的列表。
10
例2.2 数字序列9 - 5 + 2的推导(derive)
list list + digit P1 : list list + digit
上下文无关语言与分析树教学PPT
因此, S *lm (())()
S SS S() (S)() (())() 是一个推导, 但不是最左推导.
2014-10-25
25
最右推导
说Aw rm w 若w 是一个终结符串且 A 是 一个产生式. 同样地, *rm 若 通过0到多个rm步骤变成.
比FA及RE功能更强,但仍然不能定义所有可能的语 言.
对于嵌套的结构有用,如, 程序语言中的括号.
2014-10-25
2
非形式注释续
基本的概念是使用 “变元”表示串集合 (即,语言).
这些变元一个基于另一个递归定义.
递归规则 (“产生式”) 仅涉及连接操作.
一个变元的候选规则允许并起来.
2014-10-25
B A… |
B 代表[A…] (0到多个A).
最后变成 L SB A A ;S
C 代表A…
2014-10-25
B C |
C AC |
22
最左与最右推导
推导允许我们替换串中的任意变元.
会导致同一个串有多个推导存在.
通过强制最左边变元 (或另一选择, 最右边变元) 被替换, we avoid these “distinctions without a difference.”
+
E
F
b
F 1
F
产物
a0+1b1
F F
1
33
分析树, 最左、最右推导
对任意分析树, 有唯一的最左和唯一的最右推导.
将证明:
定理5.14. 若有一个分析树的根标记为A并且产物是 w, 则 A *lm w. 定理5.12. 若A *lm w, 则有一个以A为根产物是w的 分析树存在.
上下文无关文法
上下文无关文法百科名片形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为2型文法。
由于程序设计语言的语法基本上都是上下文无关文法,因此应用十分广泛。
目录[隐藏]简介例子范式同态映射下的性质文法形式和文法的相似性文法的二义性子文法类[编辑本段]简介上下文无关文法(Content-Free Grammar, CFG)在计算机科学中,若一个形式文法G = (N, Σ, P, S) 的上下文无关文法产生式规则都取如下的形式:V -> w,则称之为上下文无关的,其中V∈N ,w∈(N ∪Σ)* 。
上下文无关文法取名为“上下文无关”的原因就是因为字符V 总可以被字串w 自由替换,而无需考虑字符V 出现的上下文。
一个形式语言是上下文无关的,如果它是由上下文无关文法生成的﹙条目上下文无关语言﹚。
上下文无关文法重要的原因在于它们拥有足够强的表达力来表示大多数程序设计语言的语法;实际上,几乎所有程序设计语言都是通上下文无关文法过上下文无关文法来定义的。
另一方面,上下文无关文法又足够简单,使得我们可以构造有效的分析算法来检验一个给定字串是否是由某个上下文无关文法产生的。
例子可以参见LR 分析器和LL 分析器。
BNF ﹙巴克斯-诺尔范式﹚经常用来表达上下文无关文法。
文法规则使用相似的表示法。
名字用斜体表示(但它是一种不同的上下文无关文法字体,所以可与正则表达式相区分)。
竖线仍表示作为选择的元符号。
并置也用作一种标准运算。
但是这里没有重复的元符号(如正则表达式中的星号*),稍后还会再讲到它。
表示法中的另一个差别是现在用箭头符号“→”代替了等号来表示名字的定义。
这是由于现在的名字不能简单地由其定义取代,而需要更为复杂的定义过程来表示,这是由定义的递归本质决定的。
同正则表达式类似,文法规则是定义在一个字母表或上下文无关文法符号集之上。
在正则表达式中,这些符号通常就是字符,而在文法规则中,符号通常是表示字符串的记号。
第2章前后文无关文法和语言(2)
B→1 | 1A | 0BB C→0 | 0A | 1CC
21
2.2.2 文法和语言的形式定义
22
2.2.2 文法和语言的形式定义
例题: 试分别构造产生下列语言的文法
效率很低
不带回溯:在第4章中介绍
例:EE+TT+TF+Ti+Ti+T*Fi+F*Fi+i*Fi+i*i
28
2.3.1 规范推导与规范归约
29
2.3.2 语法树和二义性
树的性质
有且仅有一个没有任何前驱的结点,称之为“根” 除根之外,每一结点都恰好有一个直接前驱(父结点) 对于每一结点,都有唯一一条从根到此结点的通路 若一个结点有多个直接后继(子结点),则按自左向右的
一个字母表上全部符号串所组成的集合显然为一无限集 在符号串中,符号是有顺序的,顺序不同, 代表不同的符号串
ab≠ba
空符号串: 不包含任何符号的符号串,记为ε 符号串长度: 符号串中所含符号的个数
|abc|=3, |ε|=0
约定: 常用a, b, c, …及S, T, U, …, X, Y, Z等表示符号,用t, u, …, x, y, z等给符号串命名,用A, B, C等给符号串集合命名
自顶向下的构造:把开始符号作为语法树的根,在各步推导中, 每当句型中的一个非终结符号被某一产生式的一个候选式替换时, 就从此非终结符号所标记的结点出发,向下建立一个直接子树, 此子树的末端结点标以该候选式中的各个符号
例: EE+TT+TF+Ti+Ti+T*Fi+F*Fi+i*Fi+i*i