繁体   English   中英

从有限自动机构造正则表达式

[英]Constructing a Regular Expression from a Finite Automata

我试图从有限自动机构造一个正则表达式,但发现自己完全陷入了困境。 使用的正则表达式是这样的:

= 0或1
* = 0或更多
+ = 1或更多
| =或
_ =空字符串
@ =空集
()=括号

据我了解,字符串必须以“ b *”结尾,以“ a *”结尾或以“ a + bb +”结尾
我现在拥有的是((b*(a+(bb))*)*)但这没有考虑以'a'结尾的字符串。

如前所述,我100%坚持使用此功能,只是无法理解应该如何使用此功能。

图片: http : //img593.imageshack.us/img593/2563/28438387.jpg

码:
自动机的类型
F A

状态
Q1
Q2
Q3
Q4

字母
一种
b

初始状态
Q3

最终状态
Q3
Q4

转变
q1一q2
q1 b q3
q2一q2
q2 b q2
第3季度
第3季
第4季度
第4季度

任何解决方案或提示赞赏!

如果将其提供给自动机工具(例如Vcsn ),则会得到以下信息:

In [1]: import vcsn

In [2]: %%automaton a
   ...: $  -> q3
   ...: q1 -> q2 a
   ...: q1 -> q3 b
   ...: q2 -> q2 a
   ...: q2 -> q2 b
   ...: q3 -> q4 a
   ...: q3 -> q3 b
   ...: q4 -> q4 a
   ...: q4 -> q1 b
   ...: q3 -> $
   ...: q4 -> $
   ...: 
mutable_automaton<letterset<char_letters(ab)>, b>

In [3]: a.expression()
Out[3]: (b+aa*bb)*(\e+aa*)

其中\\e表示空字符串。 然后,这只是语法转换的问题。

图形:

VCSN图形呈现

请参见本示例live ,并使用它作为玩具。

从q2到最终状态是不可能的。 删除它,生成的DFA应该更容易转换。

据我所知,字符串必须是“b *”以“a *”结尾或以“a + bb +”结尾我现在拥有的是((b *(a +(bb)) )但是这不是以“a”结尾的字符串。

想象q3不是最终状态,而q4是初始状态。 那么正则表达式会是什么样? 将其更改为您想要的内容应该不会太困难,只是不要害怕让正则表达式的多个部分描述相同的状态和/或转换。

还有一个提示:我很确定你还需要使用它们? 或者| 至少一次。

暂无
暂无

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

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