[英]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
表示空字符串。 然后,这只是语法转换的问题。
图形:
请参见本示例live ,并使用它作为玩具。
从q2到最终状态是不可能的。 删除它,生成的DFA应该更容易转换。
据我所知,字符串必须是“b *”以“a *”结尾或以“a + bb +”结尾我现在拥有的是((b *(a +(bb)) ) )但是这不是以“a”结尾的字符串。
想象q3不是最终状态,而q4是初始状态。 那么正则表达式会是什么样? 将其更改为您想要的内容应该不会太困难,只是不要害怕让正则表达式的多个部分描述相同的状态和/或转换。
还有一个提示:我很确定你还需要使用它们?
或者|
至少一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.