第三章 文法和语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 文法和语言
程序设计语言
• 程序设计语言
– 语法:一种规则,用它可以形成和产生一个合适的 程序。阐明语法的工具是文法。
– 语义
• 静态语义:一系列的限定规则,并确定哪些合乎语法的程 序是合适的。
• 动态语义:运行语义或执行语义,表明程序要做什么,要 计算什么。
2020/11/28
文法和语言
2
– 如:x=AB,x0= ε,x1=AB,x2=ABAB – 对于n>0,xn=xxn-1=xn-1x
2020/11/28
文法和语言
9
符号和符号串
• 符号串集合:若符号串集合A中的一切元素都 是某字母表上的符号串,则称A为该字母表上 的符号串集合。
– 如{0,1,01,001,0001}是∑上的符号串的集合
S S 00S11 00S11
2020/11/28
文法和语言
20
句型和句子
• 定义3.5:设G[S]是一文法,如果符号串x是从 识别符号推导出来的,即有S x,则称x是文法 G的句型。若x仅由终结符号组成,即S x, x∈VT*,则称x是文法G的句子。
• 例:G[S]: S→0S1, S→01
S 0S1 00S11 000S111 00001111 G的句型S,0S1 ,00S11 ,000S111,00001111 G的句子00001111, 01
2020/11/28
文法和语言
26
1型文法
• 设文法G=(VN,VT,P,S),若P中任一产生 式α→β,都有|β|≥|α|,仅仅S → ε除外,则G是 一个1型文法或上下文有关文法。
• 其他定义方法:设文法G[S],若P中任一产生 式α→β的形式为α1A α2 → α1 β α2,其中α1 ,β, α2∈(VN ∪ VT)*, β≠ε,A ∈VN
2020/11/28
文法和语言
15
文法的写法
• 一般约定:
–第一条产生式的左部是识别符号
–用尖括号括起来的是非终结符,不用尖括号括起来 的是终结符
–或者用大写字母表示非终结符,小写字母表示终结 符。
• 常用符号:→ ∷=
| <>
• 各种写法:
– G:S→0S1 S→01
– G[S]: S→0S1 S→01
– 如Σ={0,1},Σ*={ε, 0, 1, 00, 01, 10, 11, 000, 001, 010, …}
• 集合的正闭包:Σ+=Σ1∪Σ2∪…∪Σn…称为Σ的 正闭包。
• Σ*具有无穷数量的元素,如果x是Σ*中的元素, 则表示为x∈Σ*,否则x∈Σ* 。对于所有的Σ, 有ε∈Σ*。
2020/11/28
• 如文法G1[A]:A→0R 与G2[S]:S→0S1 等价
A→01
S→01
R→A1
2020/11/28
文法和语言
24
3.4 文法的类型
• 通过对产生式施加不同的限制,乔姆斯基 (Chomsky)把文法分成四种类型:
– 0型文法 – 1型文法 – 2型文法 – 3型文法
2020/11/28
文法和语言
2020/11/28
Βιβλιοθήκη Baidu
文法和语言
18
推导
• 若存在直接推导的序列: v = w0 w1 ... wn=w,(n>0)
则记为v w,v推导出w,或w归约到v,推导 长度为n
• 若有v w,或v=w,则记为v w
2020/11/28
文法和语言
19
推导举例
例:G[S]: S→0S1, S→01 0S1 00S11 00S11 000S111 000S111 00001111 S 0S1 00S11 000S111 00001111 S 00001111
– 例:∑={0,1} A={a, b, c}
• 符号:字母表中的元素
– 例:0,1都是∑的符号,a、b、c是A的符号
• 符号串:由字母表中的符号组成的任何有穷序 列
– 例:01、1001是∑的符号串 – a、b、c、abc、ab是A的符号串 – 长度:如果某符号串x有m个符号,称其长度为m,
表示为|x|=m。如001110的长度为6 – 空符号串:不包含任何符号的符号串,用|ε|=0表
– G[S]: S→0S1 | 01
2020/11/28
文法和语言
16
直接推导
• 定义3.2:如α→β是文法G[VN,VT, P, S]的产生 式,γ和δ是V*中的任意符号,若有符号串v, w 满足:v=γαδ,w=γβδ,则称v(应用规则α→β)直接 产生w,或说,w是v的直接推导,或说,也称w 直接归约到v,记作vw
主要内容
• 文法的直观概念 • 符号和符号串 • 文法和语言的形式定义 • 文法的类型 • 上下文无关文法及其语法树 • 句型的分析 • 有关文法实用中的一些说明
2020/11/28
文法和语言
3
“我是大学生”的动作过程
<句子><主语><谓语> <代词><谓语> 我<谓语> 我<动词><直接宾语> 我是<直接宾语> 我是<名词> 我是大学生
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词>::=我|你|他 <名词>::=王明|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>
2020/11/28
文法和语言
6
3.2 符号和符号串
• 字母表:元素的非空集合,也称为符号集
• 固有尾: bc, c, ε
2020/11/28
文法和语言
8
符号和符号串
• 符号串的连接:设x和y是符号串,它们的连接 xy是把y的符号写在x的符号之后得到的符号串
– 如:x=ST,y=abu,xy=STabu
• 符号串的方幂:设x是符号串,把x自身连接n 次得到符号串z,即z=xx…xx,成为符号串x的 方幂,写作z=xn
语言或上下文有关语言 • 2型文法或上下文无关文法产生的语言称为2型
语言或上下文无关语言 • 3型文法或正则(正规)文法产生的语言称为3
型语言或正则(正规)语言
2020/11/28
文法和语言
31
3.5 上下文无关文法及其语法树
• 上下文无关文法有足够的能力描述程序设计语言 的语法结构
➢ 文法G=({E},{+,*,i,(,)},P,E)其中P为: {E→i , E→E+E , E→E*E , E→(E) }。 E表示算术表达式, i表示程序的“变量”, 该文法定义了由变量,+,*,(和)组成的算术表达式的 语法结构,即:
• 符号串集合的乘积:AB={xy|x∈A且y∈B}。 即AB是满足x∈A,y∈B的所有符号串xy所组 成的集合
– 如:A={a, b},B={c, d},AB={ac, ad, bc, bd} – 对于任意符号串,有εx=xε=x
2020/11/28
文法和语言
10
符号和符号串
• 集合的闭包:指定字母表Σ之后,用Σ*表示Σ上 的所有有穷长的串的集合。Σ*称为集合Σ的闭 包。Σ*=Σ0∪Σ1∪Σ2∪…∪Σn…
文法和语言
11
3.3 文法和语言的形式定义
• 规则(重写规则,产生式或生成式)的定义:
– 形如α→β或α∷=β的(α,β)有序对,α称为规则的左 部,β称作规则的右部
2020/11/28
文法和语言
12
文法的定义
• 文法G定义为四元组(VN,VT,P,S )其中
– VN为非终结符号(或语法实体,或变量)集; – VT为终结符号集; – P为规则(α→β)的集合,α∈(VN ∪ VT )*且至少包含
2020/11/28
文法和语言
17
直接推导举例
• 例1:G[S]:S→0S1, S→01
– 0S100S11 应用规则S→0S1 – 00S11000S111 应用规则S→0S1 – 000S11100001111 应用规则S→01 – S0S1 应用规则S→0S1
• 例2:
– <标识符><标识符><字母> – <标识符><字母><数字><字母><字母><数字> – abc<数字>abc5
13
文法定义举例1
例1:文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
2020/11/28
文法和语言
14
文法定义举例2
例2:文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, z <数字>→0,…,9 } S=<标识符>
B→1B|1|0
• 例2:G[L]: L → 1T L→ 1
T → 1T
T → dT T → 1
T→d
2020/11/28
文法和语言
29
四种文法之间的关系
0型文法 1型文法
2型文法 3型文法
2020/11/28
文法和语言
30
文法和语言
• 0型文法产生的语言称为0型语言 • 1型文法或上下文有关文法产生的语言称为1型
25
0型文法
• 设文法G=(VN,VT,P,S),若P中任一产生 式α→β,都有α∈(VN∪VT)*且至少含有一个非 终结符,而β∈(VN∪VT)*,则G是一个0型文法。
• 0型文法也称短语文法。0型文法的能力相当于 图灵机。或者说,任何0型语言都是递归可枚 举的;反之,递归可枚举集必定是一个0型语 言。
• 例:文法G[S]:S→CD C→aCA
CA→Ca
CaD→daD
dAc→dec
2020/11/28
文法和语言
27
2型文法
• 设文法G=(VN,VT,P,S),若P中任一产生 式α→β,满足:α是一个非终结符, β∈(VN∪VT)* ,则G是一个2型文法或上下文无 关文法。
• 有时将2型文法的产生式表示为A→β的形式, 其中A∈VN,也就是说用β代替非终结符A时, 与A所在的上下文无关,因此取名为上下文无 关
2020/11/28
文法和语言
21
语言
• 定义3.6:文法G所产生的语言定义为集合{x|S x, 其中S为文法识别符号,且x∈VT*}。用L(G) 表示。
• 从定义3.6可以看出两点:
– X是句型 – X仅由终结符号组成
• 例: G[S]: S→0S1, S→01 L(G)={0n1n|n≥1}
2020/11/28
文法和语言
22
语言举例
• 例 文法G[S]: (1)S→aSBE (2)S→aBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→ee
L(G)={ anbnen | n≥1 }
2020/11/28
文法和语言
23
文法的等价
• 若L(G1)=L(G2),则称文法G1和G2是等价 的。
• 例:文法G[S]:S→AB B→SA|1
A→BS|0
2020/11/28
文法和语言
28
3型文法
• 设文法G=(VN,VT,P,S),若P中每一个产 生式都是A→aB或A→a,其中A和B都是非终 结符,a∈VT∪{ε} ,则G是一个3型文法或正规 文法。
• 例1:G[S]: S→0A|1B|0
A→0A|1B|0S
示
2020/11/28
文法和语言
7
符号和符号串
• 符号串的头尾,固有头和固有尾:如果 z=xy是一符号串,那么x是z的头,y是z 的尾。如果x是非空的,那么y是固有尾; 若y非空,x是固有头。
– 如:符号串abc • 头: ε, a, ab, abc • 尾:abc,bc, c, ε • 固有头: ε, a, ab
一个非终结符,β∈(VN ∪ VT)* ; – VN,VT和P是非空有穷集。 – S称作识别符号或开始符号,它是一个非终结符,
至少要在一条产生式中作为左部出现。
– VN和VT不含公共的元素,即VN ∩ VT = φ – 用V表示VN ∪ VT ,称为文法G的字母表或字汇表
2020/11/28
文法和语言
2020/11/28
文法和语言
33
语法树(推导树)
• 设G=( VN,VT,P,S)为一上下文无关文法,若对于G 的任何句型都能构造与之关联的语法树(推导树)。 这棵树满足下面四个条件:
– 每个结点都有一个标记,此标记是V的一个符号
– 根的标记是S
– 若一结点n至少有一个它自己除外的子孙,并且有标记 A,则肯定A∈VN
变量是算术表达式;若E1和E2是算术表达式,则E1+ E2, E1*E2和(E1)也是算术表达式
2020/11/28
文法和语言
32
上下文无关文法描述语法结构
➢ 描述一种简单赋值语句的产生式: 〈赋值语句〉→i∶=E
➢ 描述条件语句的产生式: 〈条件语句〉→if〈条件〉then〈语句〉| if〈条件〉then〈语句〉else〈语句〉
程序设计语言
• 程序设计语言
– 语法:一种规则,用它可以形成和产生一个合适的 程序。阐明语法的工具是文法。
– 语义
• 静态语义:一系列的限定规则,并确定哪些合乎语法的程 序是合适的。
• 动态语义:运行语义或执行语义,表明程序要做什么,要 计算什么。
2020/11/28
文法和语言
2
– 如:x=AB,x0= ε,x1=AB,x2=ABAB – 对于n>0,xn=xxn-1=xn-1x
2020/11/28
文法和语言
9
符号和符号串
• 符号串集合:若符号串集合A中的一切元素都 是某字母表上的符号串,则称A为该字母表上 的符号串集合。
– 如{0,1,01,001,0001}是∑上的符号串的集合
S S 00S11 00S11
2020/11/28
文法和语言
20
句型和句子
• 定义3.5:设G[S]是一文法,如果符号串x是从 识别符号推导出来的,即有S x,则称x是文法 G的句型。若x仅由终结符号组成,即S x, x∈VT*,则称x是文法G的句子。
• 例:G[S]: S→0S1, S→01
S 0S1 00S11 000S111 00001111 G的句型S,0S1 ,00S11 ,000S111,00001111 G的句子00001111, 01
2020/11/28
文法和语言
26
1型文法
• 设文法G=(VN,VT,P,S),若P中任一产生 式α→β,都有|β|≥|α|,仅仅S → ε除外,则G是 一个1型文法或上下文有关文法。
• 其他定义方法:设文法G[S],若P中任一产生 式α→β的形式为α1A α2 → α1 β α2,其中α1 ,β, α2∈(VN ∪ VT)*, β≠ε,A ∈VN
2020/11/28
文法和语言
15
文法的写法
• 一般约定:
–第一条产生式的左部是识别符号
–用尖括号括起来的是非终结符,不用尖括号括起来 的是终结符
–或者用大写字母表示非终结符,小写字母表示终结 符。
• 常用符号:→ ∷=
| <>
• 各种写法:
– G:S→0S1 S→01
– G[S]: S→0S1 S→01
– 如Σ={0,1},Σ*={ε, 0, 1, 00, 01, 10, 11, 000, 001, 010, …}
• 集合的正闭包:Σ+=Σ1∪Σ2∪…∪Σn…称为Σ的 正闭包。
• Σ*具有无穷数量的元素,如果x是Σ*中的元素, 则表示为x∈Σ*,否则x∈Σ* 。对于所有的Σ, 有ε∈Σ*。
2020/11/28
• 如文法G1[A]:A→0R 与G2[S]:S→0S1 等价
A→01
S→01
R→A1
2020/11/28
文法和语言
24
3.4 文法的类型
• 通过对产生式施加不同的限制,乔姆斯基 (Chomsky)把文法分成四种类型:
– 0型文法 – 1型文法 – 2型文法 – 3型文法
2020/11/28
文法和语言
2020/11/28
Βιβλιοθήκη Baidu
文法和语言
18
推导
• 若存在直接推导的序列: v = w0 w1 ... wn=w,(n>0)
则记为v w,v推导出w,或w归约到v,推导 长度为n
• 若有v w,或v=w,则记为v w
2020/11/28
文法和语言
19
推导举例
例:G[S]: S→0S1, S→01 0S1 00S11 00S11 000S111 000S111 00001111 S 0S1 00S11 000S111 00001111 S 00001111
– 例:∑={0,1} A={a, b, c}
• 符号:字母表中的元素
– 例:0,1都是∑的符号,a、b、c是A的符号
• 符号串:由字母表中的符号组成的任何有穷序 列
– 例:01、1001是∑的符号串 – a、b、c、abc、ab是A的符号串 – 长度:如果某符号串x有m个符号,称其长度为m,
表示为|x|=m。如001110的长度为6 – 空符号串:不包含任何符号的符号串,用|ε|=0表
– G[S]: S→0S1 | 01
2020/11/28
文法和语言
16
直接推导
• 定义3.2:如α→β是文法G[VN,VT, P, S]的产生 式,γ和δ是V*中的任意符号,若有符号串v, w 满足:v=γαδ,w=γβδ,则称v(应用规则α→β)直接 产生w,或说,w是v的直接推导,或说,也称w 直接归约到v,记作vw
主要内容
• 文法的直观概念 • 符号和符号串 • 文法和语言的形式定义 • 文法的类型 • 上下文无关文法及其语法树 • 句型的分析 • 有关文法实用中的一些说明
2020/11/28
文法和语言
3
“我是大学生”的动作过程
<句子><主语><谓语> <代词><谓语> 我<谓语> 我<动词><直接宾语> 我是<直接宾语> 我是<名词> 我是大学生
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词>::=我|你|他 <名词>::=王明|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>
2020/11/28
文法和语言
6
3.2 符号和符号串
• 字母表:元素的非空集合,也称为符号集
• 固有尾: bc, c, ε
2020/11/28
文法和语言
8
符号和符号串
• 符号串的连接:设x和y是符号串,它们的连接 xy是把y的符号写在x的符号之后得到的符号串
– 如:x=ST,y=abu,xy=STabu
• 符号串的方幂:设x是符号串,把x自身连接n 次得到符号串z,即z=xx…xx,成为符号串x的 方幂,写作z=xn
语言或上下文有关语言 • 2型文法或上下文无关文法产生的语言称为2型
语言或上下文无关语言 • 3型文法或正则(正规)文法产生的语言称为3
型语言或正则(正规)语言
2020/11/28
文法和语言
31
3.5 上下文无关文法及其语法树
• 上下文无关文法有足够的能力描述程序设计语言 的语法结构
➢ 文法G=({E},{+,*,i,(,)},P,E)其中P为: {E→i , E→E+E , E→E*E , E→(E) }。 E表示算术表达式, i表示程序的“变量”, 该文法定义了由变量,+,*,(和)组成的算术表达式的 语法结构,即:
• 符号串集合的乘积:AB={xy|x∈A且y∈B}。 即AB是满足x∈A,y∈B的所有符号串xy所组 成的集合
– 如:A={a, b},B={c, d},AB={ac, ad, bc, bd} – 对于任意符号串,有εx=xε=x
2020/11/28
文法和语言
10
符号和符号串
• 集合的闭包:指定字母表Σ之后,用Σ*表示Σ上 的所有有穷长的串的集合。Σ*称为集合Σ的闭 包。Σ*=Σ0∪Σ1∪Σ2∪…∪Σn…
文法和语言
11
3.3 文法和语言的形式定义
• 规则(重写规则,产生式或生成式)的定义:
– 形如α→β或α∷=β的(α,β)有序对,α称为规则的左 部,β称作规则的右部
2020/11/28
文法和语言
12
文法的定义
• 文法G定义为四元组(VN,VT,P,S )其中
– VN为非终结符号(或语法实体,或变量)集; – VT为终结符号集; – P为规则(α→β)的集合,α∈(VN ∪ VT )*且至少包含
2020/11/28
文法和语言
17
直接推导举例
• 例1:G[S]:S→0S1, S→01
– 0S100S11 应用规则S→0S1 – 00S11000S111 应用规则S→0S1 – 000S11100001111 应用规则S→01 – S0S1 应用规则S→0S1
• 例2:
– <标识符><标识符><字母> – <标识符><字母><数字><字母><字母><数字> – abc<数字>abc5
13
文法定义举例1
例1:文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
2020/11/28
文法和语言
14
文法定义举例2
例2:文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, z <数字>→0,…,9 } S=<标识符>
B→1B|1|0
• 例2:G[L]: L → 1T L→ 1
T → 1T
T → dT T → 1
T→d
2020/11/28
文法和语言
29
四种文法之间的关系
0型文法 1型文法
2型文法 3型文法
2020/11/28
文法和语言
30
文法和语言
• 0型文法产生的语言称为0型语言 • 1型文法或上下文有关文法产生的语言称为1型
25
0型文法
• 设文法G=(VN,VT,P,S),若P中任一产生 式α→β,都有α∈(VN∪VT)*且至少含有一个非 终结符,而β∈(VN∪VT)*,则G是一个0型文法。
• 0型文法也称短语文法。0型文法的能力相当于 图灵机。或者说,任何0型语言都是递归可枚 举的;反之,递归可枚举集必定是一个0型语 言。
• 例:文法G[S]:S→CD C→aCA
CA→Ca
CaD→daD
dAc→dec
2020/11/28
文法和语言
27
2型文法
• 设文法G=(VN,VT,P,S),若P中任一产生 式α→β,满足:α是一个非终结符, β∈(VN∪VT)* ,则G是一个2型文法或上下文无 关文法。
• 有时将2型文法的产生式表示为A→β的形式, 其中A∈VN,也就是说用β代替非终结符A时, 与A所在的上下文无关,因此取名为上下文无 关
2020/11/28
文法和语言
21
语言
• 定义3.6:文法G所产生的语言定义为集合{x|S x, 其中S为文法识别符号,且x∈VT*}。用L(G) 表示。
• 从定义3.6可以看出两点:
– X是句型 – X仅由终结符号组成
• 例: G[S]: S→0S1, S→01 L(G)={0n1n|n≥1}
2020/11/28
文法和语言
22
语言举例
• 例 文法G[S]: (1)S→aSBE (2)S→aBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→ee
L(G)={ anbnen | n≥1 }
2020/11/28
文法和语言
23
文法的等价
• 若L(G1)=L(G2),则称文法G1和G2是等价 的。
• 例:文法G[S]:S→AB B→SA|1
A→BS|0
2020/11/28
文法和语言
28
3型文法
• 设文法G=(VN,VT,P,S),若P中每一个产 生式都是A→aB或A→a,其中A和B都是非终 结符,a∈VT∪{ε} ,则G是一个3型文法或正规 文法。
• 例1:G[S]: S→0A|1B|0
A→0A|1B|0S
示
2020/11/28
文法和语言
7
符号和符号串
• 符号串的头尾,固有头和固有尾:如果 z=xy是一符号串,那么x是z的头,y是z 的尾。如果x是非空的,那么y是固有尾; 若y非空,x是固有头。
– 如:符号串abc • 头: ε, a, ab, abc • 尾:abc,bc, c, ε • 固有头: ε, a, ab
一个非终结符,β∈(VN ∪ VT)* ; – VN,VT和P是非空有穷集。 – S称作识别符号或开始符号,它是一个非终结符,
至少要在一条产生式中作为左部出现。
– VN和VT不含公共的元素,即VN ∩ VT = φ – 用V表示VN ∪ VT ,称为文法G的字母表或字汇表
2020/11/28
文法和语言
2020/11/28
文法和语言
33
语法树(推导树)
• 设G=( VN,VT,P,S)为一上下文无关文法,若对于G 的任何句型都能构造与之关联的语法树(推导树)。 这棵树满足下面四个条件:
– 每个结点都有一个标记,此标记是V的一个符号
– 根的标记是S
– 若一结点n至少有一个它自己除外的子孙,并且有标记 A,则肯定A∈VN
变量是算术表达式;若E1和E2是算术表达式,则E1+ E2, E1*E2和(E1)也是算术表达式
2020/11/28
文法和语言
32
上下文无关文法描述语法结构
➢ 描述一种简单赋值语句的产生式: 〈赋值语句〉→i∶=E
➢ 描述条件语句的产生式: 〈条件语句〉→if〈条件〉then〈语句〉| if〈条件〉then〈语句〉else〈语句〉