繁体   English   中英

构造有限自动机

[英]Construct finite automata

您是否同意在正则表达式中:

((a|b)*(e|c)*)* 

a,b和c的组合是什么? 还是您会说c总是在a和b之后。

我始终喜欢通过语义描述正则表达式RE。 但是还有一条规则,即“分布式法律”之一,对于编写清理和优化的RE很有帮助:

(P | Q)*  ==  (P*Q*)*  == (P* | Q*)*

注: | 是联合运算, P | Q P | Q等于P | Q P | Q P,Q是正则表达式。

所以你表达:

     ((a|b)*(e|c)*)*       # P = (a|b)*  and Q = (e|c)*
=>   ((a|b) | (e|c))*      # (P* | Q*)* = (P | Q)*

正如我在联合中所说的并不重要,所以这里( )是多余的。

     ((a|b) | (e|c))*     
=>   (a | b | c | e)*

现在*表示重复应用*的某种模式的任意次数。 在上面的表达式中,*用于a | b | c | e a | b | c | e a | b | c | e ,并且在每次迭代中您都可以选择任何一个符号,这意味着任何符号都会出现在正则表达式中的任何其他符号之后–这意味着“ a”,“ b”,“ c”,“ e”的任何组合都是可能的。

它的FA非常简单:由单个状态Q 0组成,带有标记所有四个符号的自环。 如下:

__
     ||  a, b, c, e 
     ▼| 
––►((Q0))

Q0 is both initial and final state

暂无
暂无

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

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