簡體   English   中英

如何將正則表達式轉換為語法和 DFA

[英]How to convert regular expressions to grammar and DFA

嗨,我正在嘗試找出將正則表達式 L = (a+ab)* 表示為 DFA 並生成 L 的正則語法。

下圖展示了將表達式表達為NFA,然后再轉換為DFA的過程。 在此處輸入圖像描述

在此處輸入圖像描述

因此,如果您從 DFA 獲得常規語法,

A-> aB | BC | e

B-> aB | 巴| e

C-> 交流電 | 公元前

但問題是,當你用這個語法得到正則表達式時,你會得到一個更復雜的表達式,而不是 (a+b)*。

C = aC + bC = (a+b)*

B = aB + bA + e = a*(bA+e)

A = aB + bC + e = aa* bA + aa* + b(a+b) + e = (aa* b)* (aa* +b(a+b)*+e)

我想知道我的解決方案是否有問題。

實際上 X = (aa*b)*(aa*+b(a+b)*+e) 可以簡化為 (a+b)*。 在這里,我試圖解釋我將 X 簡化為 (a+b)* 的步驟:

  1. 我們將簡化分為三個部分: a) empty stringb) every possible string starting with bc) every possible string starting with a 如果我們能得到這些,就意味着 X=(a+b)*。
  2. 如果您將第一部分 (aa*b)* 作為 e 並查看第二部分,您將看到我們可以獲得a) empty stringb) every possible string starting with b 我們只需要獲得c) every possible string starting with a
  3. 這部分是一場斗爭,但我想我得到了它。 現在我們只查找以 a 開頭的字符串。 首先,我們在第二部分有 aa* 來獲得所有的 'a'。 此外,如果我們有 2 個或更多連續的 'b',則字符串的 rest 將被第二部分 b(a+b)* 接受。 所以唯一需要擔心的是單個'b'。 最后,由第一部分獲得單個'b'。

盡管它很復雜(並且可能沒有必要),但這是 X=(a+b)* 的證明。 結果,您的解決方案是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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