簡體   English   中英

將上下文無關語法轉換為正則表達式

[英]converting context free grammar into regular expression

我目前正在查看 CFG 並看到了答案,但我不確定他們是如何得到的。 他們是如何把它從 CFG 轉換成正則表達式的?

S -> aS|bX|a
X -> aX|bY|a
Y -> aY|a


answer:
R.E -> (a*(a+ba*a+ba*ba*a))

您應該學習我在回答“從正則表達式構建等效的正則語法”中所寫的基本規則,這些規則將幫助您將“正則表達式轉換為右或左線性語法”或“右或左線性”語法轉換成正則表達式” - 兩者。

但是,一種語言可以有多個正則表達式(和語法/自動機)。 下面,我試圖解釋如何在你的教科書中找到答案中給出的正則表達式。 准確閱讀每個步驟並鏈接答案,以便您下次可以學習自己解決此類問題的方法。

第一步,要回答這樣的問題,你應該清楚“這個語法產生了什么語言?” (同樣,如果您有自動機,則嘗試理解該自動機表示的語言)。

正如我在鏈接答案中所說,語法規則如下: S → eS | e S → eS | e對應於“plus clouser”並生成字符串e + 同樣,您有三對這樣的規則來在您的語法中生成a +

S → aS | a   
X → aX | a  
Y → aY | a    

(注意: a +也可以寫成a * aaa * – 描述一個或多個'a' 。)

另請注意,在語法中,您沒有任何“空產生式”,例如A → ∧ ,因此非變量SXY可以為空,這意味着空字符串不是語法語言的成員,如: ε ∉ L(G)。

如果您注意到 start-variable 的S產生式規則:

S → aS | bX | a

那么很明顯,語言中的字符串 ω 可以以符號'a'或以'b'開頭(因為您有兩種選擇來應用S產生式,要么 (1) S → aS | a給出'a'作為第一個ω 中的符號,或 (2) S → bX用於生成以符號'b'開頭的字符串)。

現在,L(G) 中可能的最小長度字符串 ω 是多少? – 最小長度字符串是"a" ,可以使用產生式規則: S → a

接下來需要注意的是"b" ∉L(G),因為如果蘋果S → bX再后來就必須更換X句型bX使用一些X的生產規則,因為我們知道X也不能為空,因此有將總是后一些符號(一個或多個) 'b' -換句話說從感傷bX導出|ω|≥2。

從上面的討論中可以看出,很明顯,使用S產生式規則,您可以分兩步生成a*aa*bX句子形式:

  1. 對於a*重復使用S → aS將得到S ⇝ a*S (符號 ⇝ 表示不止一步)

  2. S S ⇝ a*S rhs 中的S ⇝ a*S a*aa*bX

此外,如果您想將完整的表達式括起來,“ a*aa*bX ”可以寫成S ⇝ a*(a + bX) S ⇝ (a*(a + bX)) S ⇝ a*(a + bX)S ⇝ (a*(a + bX))

現在比較SX產生規則都一樣! 因此,正如我上面對S所示,您還可以描述X可用於生成句子形式X ⇝ (a*(a + bY))

要導出答案中給出的正則表達式,將X替換為(a*(a + bY)) S ⇝ a*(a + bX) (a*(a + bY)) in S ⇝ a*(a + bX) ,您將得到:

S ⇝ a*(a + b X )  
S ⇝ a*(a + b (a*(a + bY)) )

現在,最后的Y產生式規則相對來說非常簡單 - 只需用於創建“plus clouser” a + (或a*a )。

所以讓我們也用S派生句形式替換Y

S ⇝ a*(a + b(a*(a + bY)))   
  ⇝ a*(a + b(a*(a + ba*a)))

簡化它,應用低分布兩次以去除內括號並連接正則表達式 - P(Q + R)可以寫為PQ + PR

  ⇝ a*(a + b(a*(a + ba*a)))     
  ⇝ a*(a + b(a*a + a*ba*a))     
  ⇝ a*(a + ba*a + ba*ba*a)

: + 在正式語言的正則表達式中使用兩種語法 (i) + 作為二元運算符的意思是 – “聯合運算” (ii) + 作為一元上標運算符的意思是 – “plus clouser”
:在編程語言中的正則表達式中 + 僅用於“plus clouser”
在正則表達式中,我們使用 ∣ 符號表示並集,但這完全是聯合運算符。 在聯合中 (A ∪ B) 與 (B ∪ A) 相同,但在正則表達式中 (A ∣ B) 可能不等於 (B ∣ A)

您可以從問題中觀察到,除了作為 CFG 之外,語法也是正確的線性。 所以你可以為這個正確的線性文法構造一個有限自動機。 現在您已經構建了有限自動機,它們存在一個使用相同語言的正則表達式,並且可以使用本站點中給出的步驟完成轉換。

暫無
暫無

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

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