【发布时间】: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 Science 或 Mathematics 可能是关于 NFA 正则表达式的更好的地方。 Stack Overflow 用于编程问题。
-
第一个是
a*,第二个是(|a+)。所以他们都是平等的。