【编译原理】正则语言的封闭性

形式语言概述.

1956年Chomsky建立了形式语言的描述,他将形式语言分为了4类:

  1. 0型
  2. 1型
  3. 2型
  4. 3型

并且这四种类型的形式语言存在着0>1>2>3的关系,这里的>代表的是文法的能力强弱,即产生的语言丰富度。

【下图引用自中南大学徐德智老师的编译原理2020年授课PPT】

【编译原理】正则语言的封闭性_第1张图片
这里的描述来源于形式语言与自动机理论——一门很严谨的数学学科,这里我们只需要对这四种文法有一个宏观的了解。

【下图引用自中南大学徐德智老师的编译原理2020年授课PPT】

【编译原理】正则语言的封闭性_第2张图片
0型文法的能力相当于图灵(Turing)机,任何0型语言都是递归可枚举的,或者说一个递归可枚举集一定是一个0型语言;1型文法的能力相当于一个线性有界自动机,非确定型线性有界自动机(NDLBA)接受的语言正好是上下文有关语言(CSL),而确定型线性有界自动机(DLBA)的接受范围不会超过NDLBA;2型文法在编译原理中很重要,因为现今大多数的高级程序设计语言使用CFL来描述已经足够了,CFL对应于一个非确定的下推自动机。我们注意CFL的产生式头,即产生式左边,只能是单个的非终结符V n _n n. 下面是本文的核心——正则语言(Regular Language),也可以叫做正规语言。

正则语言定义.

我们图中给出的正则语言是右线性的形式
【编译原理】正则语言的封闭性_第3张图片
是上面一种形式,它产生的字符串向右拓展,所以叫做右线性文法。实际上下面的一种形式也是3型文法,叫做左线性文法。这两者并没有本质的区别,将左线性文法中的B单独分离出一个V t _t t,而将后面的部分记为新的B,就可以转换成一个右线性文法的形式。由于3型文法等价于正规式,所以得名正规文法。对于一个字母表Σ,我们感兴趣的是它的一些特殊的字符串集合,即所谓的正规集。正规式这个概念就是用来表示正规集的。正规式和正规集的定义在很多教材中都可以找到,这里我们给出陈火旺老师《编译原理》P46的定义:

【定义】
1.ε和Φ都是Σ上的正规式,它们代表的正规集分表为{ε}和Φ;
2.对于∀a∈Σ,a是Σ上的一个正规式,代表正规集{a};
3.假定U和V都是Σ上的正规式,它们所表示的正规集为L(U)和L(V),那么(U|V)、(U·V)、(U)*都是正规式,他们所对应的正规集分别为L(U)UL(V)、L(U)L(V)的连接、L(U)的闭包。

仅有限次使用上述三个步骤得到的表达式才是Σ上的正规式,这些正规式表示的字符串集合才是正规集,也就是正规语言(语言是字符串的集合).正规式的运算有"|“或、”·“连接以及”*"闭包,它们的优先级从左向右依次递增。

正规语言的封闭性

首先我们解释什么叫做语言的封闭性。如果任意的、属于某一个语言类的语言,在某一种运算下依旧是封闭的,我们说该语言对于该运算是封闭的,也就是说该语言对此运算具有封闭性。从正规式及正规集的定义来看,正规语言RL对于并、乘积、闭包运算是封闭的。这些性质可以直接从定义中获取。下面我们证明:RL对于补运算是封闭的。
【编译原理】正则语言的封闭性_第4张图片
有了RL对于补运算是封闭的这一条件,再证明RL对于交运算是封闭的就相当容易。
【编译原理】正则语言的封闭性_第5张图片
实际上除了这些基本的运算之外,RL还对于正则代换、同态以及逆同态运算具有封闭性。此外,对于上下文无关语言CFL,它对于并、乘积、闭包运算是封闭的,而交、补运算不是封闭的。

你可能感兴趣的:(编译原理)