簡體   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