繁体   English   中英

为由 01 或 010 组成的语言设计正则表达式或有限自动机?

[英]Design a regular expression or Finite Automata for a language that consists of 01 or 010?

我尝试过以下问题来设计自动机,但没有成功:

01重复一次或多次或010重复一次或多次组成的字符串集。

其中 string 仅包含二进制字符。 请仔细阅读问题。 john E.Hopcroft 第 2 章取自 Automata Theory Language and Computation 的问题。

您可以使用 ENFA(带有 Eplison-Transition 的有限自动机)。 你也可以给出正则表达式。

由 01 重复一次或多次或 010 重复一次或多次组成的字符串集。

我很确定我知道如何正确解析它,但会提供有关如何为我能看到的两种解释获得答案的注释(第二种解释在语言上可能有点牵强,但请耐心等待)。 我看到的第一个解析是这样的:

由 (01 重复一次或多次) 或 (010 重复一次或多次) 组成的字符串集。

这个很简单; 正则表达式在联合下是封闭的,这就是上面的“或”所代表的意思,所以我们只需要括号部分的正则表达式,我们可以从中得到完整的表达式。 子表达式很简单:重复由 Kleene 闭包 (*) 或通常定义的“至少一次”运算符 (+) 表示。 按照这种思路,子表达式就是 (01)+ 和 (010)+,完整的解决方案是 (01)++ (010)+ (其中 + 有两个含义:用作一元运算符,它是“at至少一次”重复运算符,在用作二元运算符时,它表示联合)。

我看到的第二个解析是这样的:

由 01 (重复一次或多次)或 010(重复一次或多次)组成的字符串集。

换句话说,我们可以接受由重复 01 或 010 形成的任何字符串,但我们至少需要使用其中一个。 由于我们可以选择其中一个重复,并且由于在这种解释下允许混合,我们可以将 (01 + 010)+ 作为正则表达式。

同样,如果您逐字逐句复制问题,则几乎可以肯定第一种解释是预期的。

编辑:答案是第三种甚至更不合理的解释:任何字符串,只要它包含 01 重复不止一次或 010 重复不止一次。

多次获得 01: a = (0+1)* (01) (0+1)* (01)+ (0+1)*多次获得 010: b = (0+1)* (010) (0+1)* (010)+ (0+1)*得到以上任何一个: a + b

至少获得一次 01: c = (0+1)* (01)+ (0+1)*至少获得一次 010: d = (0+1)* (010)+ (0+1)*要获得上述任何一项: c + d

注意:除非你是英语为母语的人,并且在与提出这个任务的任何人讨论后对这个解释非常有信心,否则这种解释是相当牵强的——不像假设“字符串”意味着这些东西那么多猫玩,但到达那里。

在这里,我使用了 epsilon NFA。 构造有限自动机来回答这个问题。

这里我们需要构造一个由 01 或 010 重复一次或多次组成的 FSM。

满足给定条件的正则表达式为:(01+010)(01+010)*

这个问题的ENFA设计如下:

这个问题的ENFA就是在这里设计的。

接受一个或多个01的正则表达式是:

(0+1)*(01)(0+1)*

而接受一个或多个010的正则表达式是:

(0+1)*(010)(0+1)*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM