【发布时间】:2017-01-20 07:39:09
【问题描述】:
我尝试使用 thompsom 的构造将 ((c|a)b*)* 转换为 nfa,但我理解了一些错误,因为结果不是它应该的结果。如果您能指出我的错误,我将非常高兴。 汤普森的构造规则:
- 1) 每个 NFA 都有一个开始状态和一个接受状态。
- 2) 除了起始的转换之外,不允许任何转换进入起始状态。
- 3) 没有任何转换从接受状态退出。
- 4) ε 转换总是连接 2 个状态,这些状态曾经是某些 RE 的启动或接受状态
- 5)一个状态最多可以有 2 个传入和 2 个退出 ε-transitions
-
6)对于所使用的字母数字的特定字符,一个状态最多可以有 1 个传入和 1 个退出转换。
第 1 步:我为每个角色创建了 NFA
第 3 步:然后我创建了 b*
第 4 步:然后我结合 c|a 和 b* 创建 (c|a)b*
与正确解决方案的区别在于,在最后一个 nfa 中(示例未显示步骤,最后状态重新编号)没有 s9。所以 S8 ε-过渡到 S5 和 S5 ε-过渡到 S10。如果 b* 没有 S9 状态,但由于规则 2 需要它,这对我来说是有意义的。所以我想我在连接过程中犯了一个错误。提前谢谢你。
【问题讨论】:
-
我认为您的解决方案没有问题。您指出的差异只是常识省略(例如,可以组合两个 epsilon 转换)。
-
我认为这更适合 cs.stackexchange.com,因为问题中没有任何计算机程序。
-
Ami tavory 我明白了,但我有几天要考试,我希望它是完美的......
-
规则2不是说什么都不能进入S11吗?我不明白这有什么关系。
-
我提到了创建 b* 的规则 2。我不知道在连接时我应该组合状态。