DFA和NFA如何与正则表达式相关?

时间:2013-07-07 06:54:13

标签: regex regular-language dfa nfa

正如标题所示,DFA和NFA与正则表达式有何关联?学习DFA和NFA是否有助于更好地理解正则表达式?

2 个答案:

答案 0 :(得分:2)

有限自动机(fa),正则表达式(re)以及常规语法都是常规语言的有限表示。所有这些目的的目的是表达一个常规的集合/语言(对于其他类别的语言,如cfg,csl等也是如此)。

自动机相对于理论目的更有用,分析语言属性 - 复杂性类。

在有限自动机的情况下,deterministic (DFA)non-deterministic (NFA)模型都代表同一类语言,称为“常规语言”(对于npda≭pda的其他语言则不然)。

正则表达式(re):是以字母形式表示常规语言的另一种方式,这对于在编程语言中表示一组有效字符串非常有用(这里自动机不能直接使用,而正则表达式并不多有助于分析语言属性,例如完全描述泵浦引理)。

  

DFA和NFA如何与正则表达式相关?

  

学习DFA和NFA是否有助于更好地理解正则表达式?

是的,原因如下:

  • 有时很难直接写RE。
  • 直接从英文描述中编写的正则表达式可能有问题。当我们为某些语言编写编译器时,错误的dfa的机会就会少于错误的正则表达式,那么优先/正确的步骤被认为是从每个令牌首先绘制DFA,然后编写他们的等静态正则表达式 - DFA将考虑正确性证明 - dfa更具描述性,易于掌握语言构造(DFA是正确的,然后RE将是正确的。)

  • 如果重复是复杂的,你要找到“语言描述是什么?”,那么你可以从re中绘制DFA然后给出语言描述。

  • 有时找到更好的效果,你可以绘制DFA然后翻译它以最小化DFA然后使用最小化DFA写回来可能会给你更好的解决方案。 (它不是一般技术,可能会有所帮助)

  • 如果难以比较两个正则表达式,那么您可以比较它们相应的DFA以检查等效性。

注意:有时编写正则表达式比绘制DFA要简单得多。

答案 1 :(得分:0)

非确定性有限自动机(NFA)是一种可以识别常规语言的机器。

正则表达式是一个描述常规语言的字符串。

可以通过算法构建NFA,以识别给定正则表达式描述的语言。在输入字符串上运行NFA将告诉您正则表达式是否与输入字符串匹配。

因此,可以使用NFA来实现正则表达式引擎,但是不需要了解它们就可以充分发挥正则表达式的作用。

相关问题