【问题标题】:Do both of these regular expressions做这两个正则表达式
【发布时间】:2018-10-07 03:10:56
【问题描述】:

考虑以下 NFA:

这两个正则表达式是否等效并生成 NFA 接受的字符串,还是它们不同?

1. a^* (Kleene star)
2. lambda + a^+ (Kleene plus)

我意识到这似乎微不足道,因为它是一个非常简单的 NFA,但这来自一个更复杂的问题,我已将其简化为一个非常小的示例。

【问题讨论】:

  • 不了解 NFA,但正则表达式对我来说没有意义 - ^ 表示字符串起始锚点,并且不可量化,lambda + 是什么意思?或者这种语法在 NFA 的上下文中是否意味着什么?
  • 我使用^ 符号只是将星号和加号作为上标放置,因为我不能在堆栈溢出时使用 mathjax 来显示它。这些是与正式语言一起使用的符号中的正则表达式,而不是您在代码中看到的典型符号。 + 在这里是联合,lambda 是空字符串。
  • 所以第一个答案是“a 的零个或多个串联”,第二个答案是“lambda 的并集和一个或多个 a 的串联。”
  • Computer ScienceMathematics 可能是关于 NFA 正则表达式的更好的地方。 Stack Overflow 用于编程问题。
  • 第一个是a*,第二个是(|a+)。所以他们都是平等的。

标签: regex automata nfa


【解决方案1】:

这些正则表达式描述了相同的正则语言。原因是a^*通过将a重复零次来生成空字符串。

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 2012-02-13
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多