[英]Converting a regular expression to a DFA
我一直在嘗試轉換正則表達式
首先使用湯普森(Thompson)的構造將其轉換為不確定的有限自動機(NFA),得到:
,看起來正確。
然后,我使用子集構造從NFA創建DFA,如下所示。
但這對我來說似乎不正確,例如,按照我構建的DFA,例如0后跟0無效。 我想知道如何在原始正則表達式中建模epsilon,因為我只是將其視為普通epsilon。
已經有一個匹配項-因此,圖中dfa的狀態B必須已經是一個接受狀態(只是將其標記為接受不會解決該問題!)。 我無法重構您的想法,但您應該以類似
A --0--> (B)
A --1--> C
B --0--> (B)
B --1--> C
C --0--> (B)
C --1--> C
如果您從另一側開始思考,則可以通過刪除第一部分(0|)
來簡化正則表達式(0|)(0|1)*0
。 之所以可以這樣做是因為(0|1)
匹配(0|)
將匹配(以及更多)的所有內容。 您也可以在nfa圖中看到它。
S0->S1->S2->S5 === S7->S7->S8->S11
S0->S3->S4->S5 === epsilon
也許這可以幫助您向正確的方向發展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.