簡體   English   中英

將正則表達式轉換為DFA

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM