【发布时间】:2016-02-11 15:18:33
【问题描述】:
(a+b)* 和 (a|B)* 是否产生相同的 DFA 和相同的输出? 在数学中,只要涉及到“或”这个词,我们就使用加法运算符。 那么这是否意味着两个表达式是等价的?
【问题讨论】:
-
好吧,如果你说第一个是数学符号,第二个是正则表达式,那么第一个中的
+与后者中的|相同,那么是的,它们是等价的。 -
我说的是正则表达式。请帮助我解决 cfg 以及 (a+b)* 的 CFG 将是 s->aSbS|^ (a|b)* 的 CFG 将是 s-> aS|bS|^ 我的工作方向是否正确?
-
不,
(a+b)*是Repeat(Concat(Repeat("a", >=1), "b")), >=0) -
@user3001571 有不止一种正则表达式。不同的引擎和不同的教科书使用不同的符号。在大多数现实生活中的正则表达式引擎中,
+表示“一个或多个”。在一些教科书(可能还有一些较少使用的正则表达式引擎)中,+表示“或”。
标签: regex compiler-construction dfa