1
A
回答
2
他们都是正确的,因为你说。
第一个看起来像是使用一套标准规则生成的 - 在这种情况下,它是过度杀伤(而且看起来很傻),但在更复杂的情况下,遵循简单的规则比保存整个事物更容易在你的脑海中,从头开始编写相应的NFA。一般来说,NFA可以被重写,使其具有单一的最终状态(显然已经只有一个起始状态)。
然后,可以将这种形式的两个NFA组合起来,使得它们组合时所接受的语言是它们单独接受的语言的联合 - 这对应于正则表达式中的或(+
)。为了以这种方式组合NFA,只需创建一个新节点作为起始状态,并将它与ε转换连接到两个NFA的开始状态。我们创建了一个额外的节点来作为统一的最终状态,并且为了使NFA在单个最终状态下完整地结束(这样我们可以使用这个NFA递归地用于其他工会,如果我们想要的话)将旧的最终状态(即失去其最终状态)连接到它。
使用上面的一般规则,很容易得出第一个图(两个NFA联合在一起,第一个匹配的0
,另一个1
) - 第二个很容易通过常识到达,因为它非常简单正则表达式;-)
0
第一个构造属于带有电子移动的NFA类,它是一般NFA类的扩展。电子移动让您无需输入即可进行转换。对于转换函数,仅使用电子转换来计算从给定状态可达到的状态集非常重要。显然,添加电子移动不允许NFA接受非正规语言,因此它最终等同于NFA和DFA。
Thompson的构造算法使用NFA与电子移动从任何正则表达式构建自动机。它提供了一个标准的方法来构建一个自动机从正则表达式时,它可以方便地自动化施工。
相关问题
- 1. 转换RE - > NFA
- 2. 将NFA转换为DFA
- 3. 将nfa转换为dfa
- 4. NFA转换为DFA
- 5. 如何将NFA/DFA转换为java?
- 6. 将正则表达式转换为NFA转换表
- 7. 如何将PCRE转换为POSIX RE?
- 8. 转换DFA到RE
- 9. 如何将NFA转换为正则表达式?
- 10. 将字符集转换为nfa/dfa的高效算法
- 11. 如何将NFA转换为正则表达式
- 12. 用于将NFA转换为DFA的Java库
- 13. 将点星正则表达式转换为NFA
- 14. 用于将NFA转换为DFA的伪代码
- 15. 如何将(ab u aab u aba)*转换为NFA?
- 16. 如何将正则表达式转换为NFA?
- 17. 将正则表达式转换为NFA的库?
- 18. NFA/DFA可变转换条件
- 19. 如何为NFA制作状态转换表?
- 20. NFA到DFA的转换,其语言为L的(A)补
- 21. NFA转化为DFA =确定性?
- 22. 将正则表达式转换为nfa的有条不紊的方法?
- 23. 从PHP转换RE代码到Python
- 24. cx_Freeze python exe转换没有模块命名为“re”
- 25. NFA DFA和正则表达式转换表
- 26. 带lambda转换的NFA让我们做什么?
- 27. 所有上下文无关语法都可以转换为NFA/DFA吗?
- 28. 将MS Access.adp转换为ASP.Net转换:DLookup转换为SQL
- 29. 将值转换为%
- 30. 将PeriodIndex转换为
非常感谢你...我喜欢你的回答..清楚,我需要知道的东西:) – a1204773
@Loclip:没问题:-) – Cameron