DFA 和正则表达式
DFA and Regular Expression
当句柄处于 "closed" 状态时,程序不应写入连接句柄。一开始,连接将处于 "connected" 状态,但当 "disconnect" 事件后跟 "write" 时,它可以移动到 "error" 状态。 "reconnect" 事件将连接移回 "connected" 状态,在该状态下允许 "write" 操作。多次断开连接、重新连接和写入是多余的,这意味着第二次连续操作无效。
将其建模为正则表达式和 DFA?
我认为 DFA 有 4 种状态:连接、断开连接、写入、错误以及它们的三种可能移动(连接、写入和断开连接),但不知道正则表达式。
我读的略有不同,分为三种状态:
- 打开
- 关闭
- 错误
和三个characters/transitions
- 写
- 断开连接
- 重新连接
DFA 为
这里我假设我们不能让套接字保持打开状态,所以只有closed
是接受状态
我们可以忽略error
(没有办法摆脱error
状态,因为我们想让那些字符串失败)
假设我们从open
状态开始,需要接受任意数量的write
和reconnect
转换,然后一个或多个disconnect
转换到disconnect
[wr]*d+
但是我们也可以从断开状态重新连接。请注意,上面接受 r
作为第一个字符。我们最终的正则表达式是
([wr]*d+)+
当句柄处于 "closed" 状态时,程序不应写入连接句柄。一开始,连接将处于 "connected" 状态,但当 "disconnect" 事件后跟 "write" 时,它可以移动到 "error" 状态。 "reconnect" 事件将连接移回 "connected" 状态,在该状态下允许 "write" 操作。多次断开连接、重新连接和写入是多余的,这意味着第二次连续操作无效。
将其建模为正则表达式和 DFA?
我认为 DFA 有 4 种状态:连接、断开连接、写入、错误以及它们的三种可能移动(连接、写入和断开连接),但不知道正则表达式。
我读的略有不同,分为三种状态:
- 打开
- 关闭
- 错误
和三个characters/transitions
- 写
- 断开连接
- 重新连接
DFA 为
这里我假设我们不能让套接字保持打开状态,所以只有closed
是接受状态
我们可以忽略error
(没有办法摆脱error
状态,因为我们想让那些字符串失败)
假设我们从open
状态开始,需要接受任意数量的write
和reconnect
转换,然后一个或多个disconnect
转换到disconnect
[wr]*d+
但是我们也可以从断开状态重新连接。请注意,上面接受 r
作为第一个字符。我们最终的正则表达式是
([wr]*d+)+