编译原理学习笔记——第三讲 高级程序设计语言的语法描述

本文深入探讨了高级程序设计语言的语法描述,重点介绍了上下文无关文法的概念及其在文法与语言中的应用。通过实例解析了文法生成语言的过程,并讨论了语法树与二义性问题,揭示了形式语言的层次结构,从0型到3型文法的特性。同时,文章提供了多个文法示例,用于生成特定语言的句子。
摘要由CSDN通过智能技术生成

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
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值