OpenDSA 完整目录

Chapter 35 Regular Languages

| 关于   «  3. 更多正则表达式练习   ::   目录   ::   5. 正则文法  »

4. 正则表达式的能力

既然我们已经知道了正则表达式的定义,并有了一些书写它们的经验, 接下来要做的就是理解它们有多强大。 特别地,一个自然会问的问题是:正则表达式与正则语言之间是什么关系? 回顾一下,正则语言被定义为任何能被 DFA 接受的(等价地,也是任何能被 NFA 接受的)语言。

在本节中,我们将使用标准的模拟方法来证明正则表达式与正则语言等价。 这里的意思是,一个正则表达式可以转换为正则语言的一种表示(特别是 NFA)。 因此,任何一个正则表达式都表示一个正则语言。 反过来,任何正则语言(以 NFA 的形式)都可以转换为一个正则表达式。 因此,任何正则语言也都可以由一个正则表达式来表示。 于是结论便是:二者等价。

4.1. 每个正则表达式都有等价的 NFA

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

小结: 我们现在已经证明:(1) 由 \(\lambda\) 或字母表中的 单个符号构成的 RE 都可以由一个 NFA 表示;(2) 我们可以把任何 NFA 转换为具有单个最终状态的等价 NFA。 这简化了我们接下来要使用的其余构造。

Settings

Proficient Saving... Error Saving
Server Error
Resubmit


Settings

Proficient Saving... Error Saving
Server Error
Resubmit


Settings

Proficient Saving... Error Saving
Server Error
Resubmit

现在我们完整地写出整个归纳证明。

小结: 通过归纳论证,我们现在已经证明可以把任何 RE 转换为 NFA。 因此,所有 RE 接受的都是正则语言。

4.2. 将正则表达式转换为 NFA

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

4.3. 正则表达式到最小化 DFA 的示例

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

4.4. 将 NFA 转换为正则表达式

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

4.5. 小结

我们现在已经证明了以下几点:

  • 任何 RegEx 都可以用 NFA 或 DFA 表示。

  • 任何 NFA(或 DFA)都可以用 RegEx 表示。

因此,所有能由正则表达式表示的语言都是正则语言, 而所有正则语言也都可以用正则表达式来表示。

   «  3. 更多正则表达式练习   ::   目录   ::   5. 正则文法  »

关闭窗口