详解正则表达式与 NFA 的转换

前言:编译原理开坑!

0X00 什么是 NFA

NFA 是 Non-deterministic Finite state Automata 的缩写。所以先理解 NFA 之前我们先理解 DFA,也就是 deterministic Finite state Automata。

先理解 DFA

通俗的说,DFA 就是一系列状态的合集,关键词是状态

我们先写一个关于灯泡的 DFA:

(两个圈是终态,我们把「灯泡关闭」的状态当做终态)

再理解 NFA

简单来说,NFA 就是存在着不确定状态转换的 DFA。

我们还拿灯泡的例子:

(灯泡打开的时候还有可能会坏掉)

0X01 正则表达式与 NFA 的转换

先列出三种基本正则表达式的 NFA 图:

  • AB

表示 A 与 B 的连接,NFA 图如下:

  • A|B
  • A*

0X02 完成复杂的正则表达式与 NFA 的转换

我们来画一个复杂的正则表达式与 NFA 的转换

  • a(b|c)*

1)首先把 a 看成 A,把 (b|c)* 看成 B就有:

2)再拆解 (b|c)*

3)最后拆解 b|c

好!我们继续学习编译原理!

你可能感兴趣的:(详解正则表达式与 NFA 的转换)