编译原理学习笔记——第三讲 高级程序设计语言的语法描述
1. 文法
1.1 文法
- 文法: 描述语言的语法结构的形式规则
He gave me a book.
1.2 语法描述的几个基本概念
- 字母表:一个有穷字符集,记为∑
- 字母表中每个元素称为字符
- ∑上的字(也叫字符串) 是指由∑中的字符所构成 的一个有穷序列
- 不包含任何字符的序列称为空字,记为ε
- 用∑*表示∑上的所有字的全体,包含空字ε
- 例如: 设 ∑={a, b},则∑*={ε,a,b,aa,ab,ba,bb,aaa,…}
- ∑*的子集U和V的连接(积)定义为
UV={ αβ | α∈U & β∈V } - 示例:
设U={ a, aa },V={ b, bb }
UV={ ab, abb, aab, aabb}
V自身的n次积记为:V^n = V V…V
V^0 = {ε}
V*
是V的闭包:V*=V^0 ∪ V^1 ∪ V^2 ∪ V^3 ∪ …
V+
是V的正规闭包:V+=V V*
1.3 上下文无关文法
- 上下文无关文法G是一个四元组G=(VT,VN,S,P),其中
VT:终结符(Terminal)集合(非空)
VN:非终结符(Noterminal)集合(非空),且VT ∩ VN = ∅
S:文法的开始符号,S∈VN
P:产生式集合(有限),每个产生式形式为
P→α, P∈VN, α ∈ (VT ∪ VN)* - 开始符S至少必须在某个产生式的左部出现一次
2. 文法与语言
2.1 文法生成语言
- 推导:
假定G是一个文法,S 是它的开始符号。
则在上述的例子中,句型就有:
句子就是:
2.2 句型和句子练习
请证明(i*i+i)
是文法G(E): E→ i | E+E | E*E | (E)的一个句子。
2.3 文法与语言
- 设文法 G1(A):A→ c | Ab
G1(A)产生的语言是什么?
答: L(G1)={c,cb,cbb,…} - 设文法G2(S):S→ AB、A→ aA|a、B→ bB|b
G2(S)产生的语言是什么?
答:L(G2)={ambn|m,n>0} - 请给出产生语言为{anbn|n≥1}的文法
答:G3(S):S→ aSb,S→ ab - 请给出产生语言为{ambn |1 ≤ n ≤ m ≤ 2n}的文法
答:G4(S):S→ ab | aab,S→ aSb | aaSb
3. 语法树与二义性
3.1 推导与语法树
- 从一个句型到另一个句型的推导往往不唯一
- 语法树:用一张图表示一个句型的推导,称为语法树
父子结点可以同名
语法树不反应结点产生的先后顺序 - 一棵语法树是不同推导过程的共性抽象
3.2 语法树与二义性
- 文法的二义性:如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的。
G(E): E→ i|E+E|E*E|(E) 是二义文法 - 语言的二义性:如果对它不存在无二义的文法,一个语言是二义的。
对于语言L,可能存在G和G’,使得L(G)=L(G’)=L,有可能其中一个文法为二义的,另一个为无二义的 - 二义性问题是不可判定问题,即不存在一个算法,它能在有限步骤内,确切地判定一个文法是否是二义的
- 可以找到一组无二义文法的充分条件
4. 形式语言鸟瞰
4.1 前言
- 乔姆斯基(Chomsky)是美国当代有重大影响的语言学家。
- 乔姆斯基于1956年建立形式语言体系,他把文法分成四种类型:0,1,2,3型。
- 我们学过的上下文无关文法就是2型文法。
- G=(VT,VN,S,P)
VT:终结符(Terminal)集合(非空)
VN:非终结符(Noterminal)集合(非空),且VT ∩ VN = ∅
S:文法的开始符号,S∈VN
P:产生式集合(有限) - 这四种类型的文法都由四部分组成,但对产生式的限制有所不同
4.2 0型(短语文法,图灵机)
- 产生式形如: α→β
- 其中:α∈ (VT ∪ VN)*且至少含有一个非终结符;
- β∈(VT ∪ VN)*
4.3 1型(上下文有关文法,线性界限自动机)
- 产生式形如: α→β
- 其中:|α| ≤ |β|,仅 S→ε 例外
4.4 2型(上下文无关文法,非确定下推自动机)
- 产生式形如: A → β
- 其中:A∈ VN;β∈ (VT ∪ VN)*
4.5 3型(正规文法,有限自动机)
右线性文法:
- 产生式形如: A → αB 或 A → α
- 其中: α∈ VT*;A,B∈VN
左线性文法:
- 产生式形如: A → Bα 或 A → α
- 其中: α∈ VT*;A,B∈VN
4.6 总结
- 3型 ⫋ 2型 ⫋ 1型 ⫋ 0型
- L5 = {anbn | n≥1} 不能由正规文法产生,但可由上下文无关文法产生
G5(S):S→ aSb| ab - L6 = {anbncn | n≥1}不能由上下文无关文法产生,但可由上下文有关文法产生
- G6(S):
S→ aSBC| aBC
CB→ BC
aB→ ab
bB→ bb
bC→ bc
cC→ cc