簡體   English   中英

如何根據正則語法得到正則表達式?

[英]How to get regular expression based on regular grammar?

問題是

正則文法 G 的生成規則為

S → 0A | 1B | ε, A → 1B | ε, B → 0A |ε,

將 L(G) 表示為正則表達式。

我的解決方案如下。

S = 0A + 1B+ ε
A = 1B + ε
B = 0A + ε

然后

S = 0(1B + ε) + 1(0A + ε) = 1(0A + 0B + ε) + 0ε + ε

我不知道如何在這里簡化表達式。 在這方面的任何幫助將不勝感激。

我們先寫一些方程:

S = 0A + 1B + e
A = 1B + e
B = 0A + e

我們可以通過代入消除 B:

S = 0A + 1(0A + e)+ e = 0A + 10A + 1 + e
A = 1(0A + e)+ e = 10A + 1 + e
B = 0A + e

我們現在可以消除 A 中的遞歸:

S = (0 + 10)A + 1 + e
A = (10)*(1 + e)
B = 0A + e

現在我們可以通過替換來消除 A:

S = (0 + 10)(10)*(1 + e) + 1 + e
A = (10)*(1 + e)
B = 0(10)*(1 + e) + e

我們可以通過觀察常見的 1 + e 項、因式分解來稍微簡化 S 的表達式,然后注意到 + 10 項沒有添加任何內容:

S = (0 + 10)(10)*(1 + e) + 1 + e
  = [(0 + 10)(10)* + e](1 + e)
  = (0 + e)(10)*(1 + e)

這似乎是 {0, 1} 上既不包含 00 也不包含 11 的所有字符串的語言。為了證明這一點,我們可以證明正則表達式生成所有此類字符串,並且它僅生成此類字符串。

表達式生成的任何字符串都是三個字符串的串聯:第一個不能以 1 結尾,最后一個不能以 0 開頭,中間不能以 0 開頭也不以 1 結尾。因此,不能形成字符串 00 和 11在邊界處。 同樣清楚的是,這三個都不可能包含 00 或 11。因此,表達式生成的任何內容都既沒有 00 也沒有 11。

可以生成任何不帶 00 或 11 的字符串。 假設一些這樣的字符串以 x 開頭並且長度為 n。

如果 n > 0 且 x = 0,則表達式從第一部分中選擇 0,10 次等於 n 減一,數量超過 2,次; 然后,當且僅當 n 為偶數時,它從第三部分中選擇 1。

如果 n > 0 且 x = 1,則表達式選擇 e 作為第一部分,取 10 的次數等於 n 減一,數量超過 2 次,然后當且僅當 n 為時,第三部分選擇 1奇怪的。

如果 n = 0,則表達式為第一部分和第三部分選擇空字符串,並取 10 個零次。

在所有三種情況下,正則表達式都能夠生成字符串。 因為表達式生成我們語言中的所有字符串且僅生成字符串,所以它是我們描述的語言的正則表達式。

暫無
暫無

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

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