用小机器造大机器

计算机科学中广泛使用的策略是由子程序构建更大的程序。最常见的是,程序员编写一组有用的函数,然后通过组合这些函数来构建更大的程序来解决更大的问题。

对于有限自动机,我们可以遵循类似的策略:我们首先构建非常简单的机器,可以执行有限的操作,然后找到方法将这些更简单的机器组合起来,制造更复杂的机器。

一个非常简单的机器

我们可以构造的最简单的DFA是决定由单个字符串组成的语言的DFA。

例如,下面的机器决定语言L ={0110},这是一个由单个字符串组成的语言。

集合操作下的闭包

如果存在决定语言的有限自动机M,那么语言L就是正则语言。

由于语言L是一组字符串,因此创建新语言的一种方法是使用标准集合操作(例如并集和交集)来创建新集合。关于这些操作的一个重要问题是,如果两种原始语言都是正则的,那么由操作形成的新语言是否是正则的。

在今天的课上,我们会看到对于每一个标准集运算,包括并集,补集和交集,如果运算中涉及的原始语言是正则的,那么由运算形成的新语言就是正则的。

联盟

如果L1和L2是正则语言,那么新语言L = L1∪L2是正则语言。

因为L1是规则的,所以有一个DFA M1决定语言。由于L2是规则的,所以有一个DFA M2来决定语言。下面是可以决定L = L1∪L2的机器M的结构:

补充

定理如果L是正则语言,那么它的补码L也是正则语言。

如果L是正则的,则存在一个决定L的DFA M。通过将M中的每个不接受状态变为接受状态,将M中的每个接受状态变为不接受状态,从M构造一个新机器M。对于任意输入字符串x∈L, x将M驱动到接受状态。同样的x会驱使M进入非接受状态。同样,不在L中的输入字符串x将把M驱动到不接受状态,这意味着相同的x将M驱动到接受状态。因此,只有当x∈L时M才会接受x。

十字路口

如果L1和L2是正则语言,那么新语言L = L1∩L2是正则语言。

德摩根定律证明,L = L1∩L2 = L1∪L2。根据前两个定理,这种语言是规则的。因为L是正则的,所以L = L也是正则的。

连接

如果L1和L2是语言,那么这两种语言的连接,L = L1·L2,是赢博体育形式为x1x2的字符串的集合,其中x1∈L1 x2∈L2。

如果L1和L2是正则语言,则新语言L = L1·L2是正则语言。

因为L1是规则的,所以有一个DFA M1决定语言。由于L2是规则的,所以有一个DFA M2来决定语言。下面是可以决定L = L1·L2的机器M的结构:

克林- *

如果L是一种语言,语言L*是赢博体育字符串的语言,这些字符串可以写成从L中取出的0个或多个字符串的连接。

如果L是正则语言,那么L*也是正则语言。

如果L是正则的,就有一个DFA M决定L。这里是一个决定L*的机器:

正则表达式

正则表达式是由字符串和一组操作符组合而成的表达式:

例如,假设R = 01∪00(10)*11。

定理一种语言是正则的当且仅当它的元素可以用正则表达式来描述。

假设L是由正则表达式r生成的字符串的集合。正则表达式中的基本元素都是简单的字符串:由这些字符串组成的集合都是正则语言,因为构造一个只接受一个字符串而不接受其他字符串的DFA很容易。由于用于在正则表达式中组合这些字符串的赢博体育正则操作都直接对应于正则集合操作,因此基本字符串的组合产生一种自动正则的语言。

为了实现相反的方向,我们提出了一种将任何DFA转换为正则表达式的算法。设L为DFA接受的语言。

该算法包括以下几个步骤:

  1. 标准化DFA,使它只有一个接受状态,没有返回到开始状态的转换。这可能会将DFA转换为NFA:这是可以的,因为后续步骤仍然可以在存在模糊转换或ε转换的情况下工作。
  2. 重复以下步骤,直到只剩下启动状态和接受状态:
    1. 选择一个状态。
    2. 将赢博体育经过该状态的转换替换为绕过该状态的转换。这个新的转换将使用正则表达式进行标记。

在此过程结束时,我们将只剩下一个启动状态和一个接受状态,它们之间只有一个转换。这个转换将被标记为正则表达式:这是生成L的正则表达式。

例子

第一步是标准化开始状态和结束状态。

接下来我们消去状态1。

然后是状态2,

最后是状态3。