DFA 和正则表达式

DFA and Regular Expression

当句柄处于 "closed" 状态时,程序不应写入连接句柄。一开始,连接将处于 "connected" 状态,但当 "disconnect" 事件后跟 "write" 时,它可以移动到 "error" 状态。 "reconnect" 事件将连接移回 "connected" 状态,在该状态下允许 "write" 操作。多次断开连接、重新连接和写入是多余的,这意味着第二次连续操作无效。

将其建模为正则表达式和 DFA?

我认为 DFA 有 4 种状态:连接、断开连接、写入、错误以及它们的三种可能移动(连接、写入和断开连接),但不知道正则表达式。

我读的略有不同,分为三种状态:

  1. 打开
  2. 关闭
  3. 错误

和三个characters/transitions

  1. 断开连接
  2. 重新连接

DFA 为

这里我假设我们不能让套接字保持打开状态,所以只有closed是接受状态

我们可以忽略error(没有办法摆脱error状态,因为我们想让那些字符串失败)

假设我们从open状态开始,需要接受任意数量的writereconnect转换,然后一个或多个disconnect转换到disconnect

[wr]*d+

但是我们也可以从断开状态重新连接。请注意,上面接受 r 作为第一个字符。我们最终的正则表达式是

([wr]*d+)+