语言及文法
PL语言的定义及运算
字母表
以 T/Σ 表示,为字符的集合。
英文字母表 {a,b,c,...,A,B,C,...}
字符串
字母表 T 上的字符串,为 T 中字符构成的有限序列。
空串,用 ϵ 表示。
字符串的长度 ∣w∣,为 w 中字符的个数。如,∣ϵ∣=0,∣abbaa∣=5。
约定,a,b,c,d 等小写斜体表示单个字符,t,u,v,w,x,y,z 表示字符串。
ai,表示 i 个 a 的字符串。
字符串的运算
连接
设 x=a1a2...am,y=b1b2...bn,则 xy=a1a2...amb1b2...bn。
连接具有以下性质:
-
(xy)z=x(yz)
-
ϵx=xϵ=x
-
∣xy∣=∣x∣+∣y∣
前缀,后缀,子串
设 w1,w2,w3 为 T 上的字符串,则 w1 为 w1w2 的前缀,w2 为 w1w2 的后缀,w2 为 w1w2w3 的子串。
逆
w=b1b2...bn,w=bnbn−1...b1
字母表的运算
幂运算
- T0={ϵ}
- x∈Tn−1,a∈T⇒ax∈Tn
闭包
∗ 闭包:T∗=T0∪T1∪T2∪...
+ 闭包:T+=T1∪T2∪...
T∗=T+∪{ϵ},T+=T∗−{ϵ}
闭包为 T 上所有字符串的集合。
语言
设 T 为字母表,则集合 L⊂T∗ 为 T 上的一个语言。
如,设 T={a,b}
- L1={anbn∣n≥1}
- L2={ϵ} 只有一个空句子的语言
- L3={}=∅ 空语言
语言的运算
积/幂
字符串的连接。
文法
元语言:描述语言的语言
BNF 范式
⟨digit⟩::=0∣1∣2∣3∣4∣5∣6∣7∣8∣9
⟨letter⟩::=A∣B∣C∣...∣z∣a∣b∣c∣...∣z
⟨identifier⟩::=⟨letter⟩∣⟨identifier⟩⟨digit⟩∣⟨identifier⟩⟨letter⟩
文法定义
文法 G 是一个四元组 G=(N,T,P,S),其中
- N 为非终结符的有限集合;
- T 为终结符的有限集合,N∩T=∅;
- P 为形式为 α→β 的生成式的有限集合,其中 α∈(N∪T)∗N+(N∪T)∗,β∈(N∪T)∗;
- S 为推导起始符,且 S∈N。
推导
直接推导:一步直接产生。
若存在推导序列使得 α⇒α1⇒...⇒α′,则把 α 推导出 α′ 记作
α∗Gα′
若推导序列长度大于 0,则记作
α+Gα′
推导时每一步产生的中间字符串称作句型。
句型:字符串 α 是文法 G 的句型,当且仅当 S∗Gα,且 α∈(N∪T)∗。
句子:字符串 ω 是文法 G 的句子,当且仅当 S∗Gω,且 ω∈T∗。
句子仅由终结符组成,句型包含句子。
文法产生的语言:由文法 G 产生的语言记作 L(G)。
L(G)={ω∣ω∈T∗∧S∗Gω}
Chomsky 文法的分类
0 型文法
1 型文法/上下文有关文法
定义:生成式具有形式 α→β,α,β∈(N∪T)+,且满足 ∣α∣≤∣β∣。
2 型文法/上下文无关文法
定义:生成式具有形式 A→β,A∈N,β∈(N∪T)∗。
3 型文法/正则文法
定义:生成式具有形式
- 右线性文法:A→ωB∣ω,A,B∈N,ω∈T∗
- 左线性文法:A→Bω∣ω,A,B∈N,ω∈T∗
四种文法的关系
- 0 型:无限制;
- 1 型:不允许 A→ϵ;
- 2 型
- 3 型:属于 2 型;
- 不含有 A→ϵ 的 2 型、3 型属于 1 型,1 型、2 型和 3 型均属于 0 型。