#automata #dfa #regex #nfa #gnfa

autour_core

AUTOmata Utilities and Representation (AUTOUR) 是一个小型工具箱,用于实验各种自动机和绘制它们

12个版本

0.1.11 2024年7月4日
0.1.10 2023年6月4日
0.1.3 2023年5月31日
0.1.1 2023年4月26日

#234 in 算法

Download history 1/week @ 2024-04-13 5/week @ 2024-04-20 2/week @ 2024-04-27 3/week @ 2024-05-18 2/week @ 2024-05-25 5/week @ 2024-06-01 10/week @ 2024-06-08 4/week @ 2024-06-15 5/week @ 2024-06-22 106/week @ 2024-06-29 149/week @ 2024-07-06 12/week @ 2024-07-13 1/week @ 2024-07-20 10/week @ 2024-07-27

237 每月下载量
用于 2 crates

Apache-2.0

590KB
4K SLoC

AUTOmata Utilities and Representation (AUTOUR)

法语中,“Autour”这个词指的是一种鸟。它在英语中对应“Goshawk”。

Autour 是一个小型工具箱,用于实验各种自动机和正则表达式。该项目更注重教学而不是性能。它仍在开发中。

形式

自动机形式如下

  • 确定性有限自动机 (DFA)
  • 非确定性有限自动机 (NFA)
  • 具有即时转换的非确定性有限自动机 (NFAIT)(即具有ε转换)
  • 具有基本正则表达式 (BRE) 标记转换的广义非确定性有限自动机 (GNFA)(尚未完全集成)

我们还可以操作正则表达式

  • 基本正则表达式 (BRE)
  • 扩展正则表达式 (ERE)(尚未完全集成)

特性

可以使用 graphviz_dot_builder crate 使用 GraphViz 绘制自动机。

以下我们将使用这些图形表示法来介绍工具箱的一些功能。

转换

不同形式之间的转换是可能的。在下面的示例中,我们将一个 GNFA 转换为(从左到右)一个 DFA、一个 NFAIT 和一个 BRE。

translation

(共)可达性

各种算法允许

  • 确定自动机是否可达
  • 使自动机可达
  • 确定自动机是否是共可达的
  • 使自动机共可达
  • 确定自动机是否是共可达的
  • 使自动机共可达

以下示例中,我们有一个最初表示在图像顶部的初始 DFA。

  • 绿色节点既是可达的也是共可达的。
  • 紫色节点是可达的,但不是共可达的。
  • 蓝色节点是共可达的,但不是可达的。
  • 红色节点既不可达也不共可达。

然后我们通过以下方式转换这个初始 DFA(从左到右)

  • 使其可达
  • 使其共可达
  • 修剪它,即使其既可达又共可达
access

构建自动机

构建术语的方法

  • 并集
  • 交集
  • 连接
  • 重复
  • 否定
  • 反转
  • 等等

以下是一些示例

DFA 连接 DFA Kleene DFA 反转 DFA 交错 DFA 合并
NFA 合并 NFA 交集

自动机最小化

DFA

DFA 最小化是通过 Brzozowski 算法实现的(反转的反转)。

以下是一个示例

dfa minimization

NFA

NFA 最小化是通过 Kameda-Weiner 算法实现的。以下展示了两个示例,详细描述了该过程。

第一个示例

nfa minimization example

第二个示例是接受与第一个示例相对的反向语言 NFA(你可以注意到两个示例矩阵在行和列位置替换后的对称性)

nfa minimization reversed example

字母隐藏和替换

我们还可以替换字母或隐藏它们。

在下面的示例中,我们有一个初始 GNFA 在图像顶部绘制。然后,从左到右

  • 我们在其中隐藏字母 'b'
  • 我们在其中将字母 'b' 替换为字母 'c'
hide

其他功能

  • 字母表完成
  • DFA/NFA 中的运行转换和轨迹
  • 等等

依赖项

~1.3–1.8MB
~39K SLoC