如何将NFA转换为相应的正则表达式?

时间:2013-01-11 21:52:18

标签: regex computation-theory nfa

我正在学习明天考试,我已经检查了很多教程,告诉我们如何将NFA转换为Regex,但我似乎无法确认我的答案。按照教程,我解决了NFA

enter image description here

我的解决方案是:

  

BA

我说错了吗?

2 个答案:

答案 0 :(得分:2)

如何将NFA转换为正则表达式?

您的回答a*ba*是正确的。我可以在给定图像中从NFA开始你的答案如下:

  • 启动状态q 0 上有一个带有标签a的自循环。因此,在初始(前缀)可以有任意数量的a s,包括RE中的空^。所以正则表达式(RE)以a*开头。

  • 您只需要一个b即可达到最终状态。实际上是接受字符串; ba字符串中必须至少有一个b。所以RE a*b要达到q 1 或q 2 。两者都是最终状态

  • 一旦达到最终状态(q 1 或q 2 )。字符串中不可能有其他b(q 1 和q 2 b没有外向边。

  • 在q 1 和q 2 时,只能使用a符号。同样,a在q 1 或q 2 移动切换q 1 ,q 2 两者都是最终的。因此,在符号b之后,任何数量的a s都可以是后缀。 (所以字符串以a*结尾)。

RE是a*ba*

此外, DFA 如下:

 DFA: 
======

    a-          a-  
    ||          ||
    ▼|          ▼|
--►(q0)---b---►((q1))      

    a*    b      a*    :RE  
                       ==== 
  • aq0的任意数量a*b

  • 获得q1后,您可以切换到最终状态ba

  • 在最终状态下,a*可以是任意数量的FAsREs

它是最小化的DFA!

以下是我在{{1}}和{{1}}上提供的一些更有趣的答案,相信对您有用:

  1. HOW TO WRITE REGULAR EXPRESSION FOR A DFA
  2. RE TO DFA
  3. Regular Expression to DFA
  4. Constructing an equivalent Regular Grammar from a Regular Expression
  5. How to Eliminate Left recursion in Context-Free-Grammar
  6. Is a* the same as (a*)*?
  7. IN CONTEXT OF REGULAR EXPRESSION: is (AB)* = A*B*?

答案 1 :(得分:1)

答案是正确的,因为以下两个都是正确的:

  • 与正则表达式匹配的任何字符串都会导致NFA以接受状态结束(双圈状态)
  • 导致NFA以接受状态结束的任何字符串也与正则表达式
  • 匹配

但是,由于您尚未发布任何内容,我无法检查您的工作。