上下文無關語言的性質


上下文無關文法的范式

可以證明任何CFL都可以用只有A→BC或者A→α形式產生式的CFG產生,其中A,B和C是變元,而α是終結符。這種形式稱為喬姆斯基范式(Chomsky Normal Form, CNF)。

為了得到這種形式的CFG,我們需要做很多初步的簡化,而這些簡化方法本身在很多方面都很有用:

  1. 我們必須去除無用符號。所謂無用符號,是指不出現在任何由開始符號推導出一個終結符串的過程中出現的變元和終結符號。
  2. 我們必須去除ε產生式。所謂ε產生式,是指A→ε形式的產生式,其中A是變元。
  3. 我們必須去除單位產生式,所謂單位產生式,是指A→B形式的產生式,其中A和B式是變元。

去除無用的符號:

顯然,去除一個文法的無用符號並不會改變這個文法產生的語言,因此需要盡量檢測和去除所有無用的符號。

我們去除無用符號的方法是通過識別一個有用符號一定能做到的兩件事:

顯然一個有用符號一定是產生的和可達到。如果我們首先去除不是產生的符號,再從剩余文法中去除不是可達的符號,剩下的符號一定只有有用的符號了。

下面給出一個例子:

考慮這樣一個文法,它有如下的產生式:

S→AB | a

A→b

除了B以外,所有符號都是產生的:a和b產生它們自己,S產生a,A產生b。

如果去除符號B,我們一定要去除產生式S→AB,剩下的文法是:

S→a

A→b

可以發現現在,S和a是可達的。去除A和b后剩下的產生式只有S→a。只有該產生式的文法的語言是{a},而這和原來的文法的語言相同。

獲取所有產生的符號的集合:

下面給出一個例子:

獲取所有可達的符號的集合:

 下面給出一個例子:

去除ε產生式:

如果一個語言L有一個CFG,則L-{ε}一定有一個不含ε產生式的CFG。如果ε不屬於L,則L本身就是L-{ε},因此L就有一個不含ε的產生式的CFG。

當一個變元滿足下列條件時稱其為可空的:

獲取所有可空符號的集合:

去除ε產生式:

對於產生式A→w,應該考慮w中可空符號相互獨立地存在或者不存在的組合,並將這些組合替換成新的產生式右邊的結果。

下面給出一個例子:

  **去除ε產生式:對於S→AB,相互獨立地考慮AB存在或不存在的幾種情況:AB,A,B,ε,所以S→AB應該替換成S→AB,S→A,S→B,S→ε。但是S→ε是不允許存在的,所以最終結果有三個。

去除單位產生式:

 單位產生式在去除歧義性上是有用的,但是單位產生式會使某些證明變得復雜,而且它們也會給推導過程引入本來在技術上不需要的步驟。

如果一個變元對(A, B)滿足下面的條件,則稱其為單位對:

獲取所有單位對的集合:

下面給出一個例子:

考慮某個文法的產生式:I → a | b | Ia | Ib | I1 | I0, F → I | (E), T → F | T×F, E → T | E+T,求出其所有的單位對:

由基礎部分可以得到這些單位對:(E, E), (T, T), (I, I), (F, F)。對於歸納部分可以得出下面的結論:

(E, E)和產生式E→T可以得到單位對(E, T)

(E, T)和產生式T→F可以得到單位對(E, F)

(E, F)和產生式F→I可以得到單位對(E, I)

(T, T)和產生式T→F可以得到單位對(T, F)

(T, F)和產生式F→I可以得到單位對(T, I)

(F, F)和產生式F→I可以得到單位對(F, I)

所以這個文法一共有10個單位對。

去除一個文法的所有單位產生式,

所以繼續上面那個例子,可以得到一個去除單位產生式的文法G1的產生式構造過程如下:

最后得到的產生式如下:

簡化CFG

把一個CFG簡化成為一個沒有無用符號、ε產生式或者單位產生式的CFG,可以使用下面將上述步驟按照下面這個比較可靠的順序執行:

  1. 去除ε產生式。
  2. 去除單位產生式。
  3. 去除無用符號。

喬姆斯基范式

任何非空且不含ε的CFL都有特殊形式的文法G,G中所有的產生式都屬於以下兩個簡單的形式之一:

  1. A→BC,其中A,B和C都是變元,或者
  2. A→α,其中A是變元。α是終結符。

更進一步,G沒有無用符號。這樣的文法稱為喬姆斯基范式(Chomsky Normal Form, CNF)。

將CFG轉換成CNF

給定一個簡化過后的上下文無關文法CFG,經過下面兩個步驟可將其轉換成CNF。

下面給出一個將CFG轉換成CNF的例子:

將一個CFG替換成為CNF的好處:

  1. 去除了冗余
  2. 可以通過比較兩個文法的產生式來確定它們是否相等
  3. 將語法生成樹變成二分樹

上下文無關語言的泵引理

對於上下文無關語言CFL,也有一個泵引理,可用來證明給定的一個語言L,L不是上下文無關語言: 

下面給出一個泵引理應用的例子:

上下文無關語言的封閉性

 

上下文無關語言的判定性問題

 給定一個上下文無關語言L,判定下面兩個問題:

  • L是否等於Ø

  • 字符篡w是否屬於L

使用CYK算法:

 

關於CYK算法,下面這個鏈接給出了詳細的說明和例子:

https://web.cs.ucdavis.edu/~rogaway/classes/120/winter12/CYK.pdf

上下文語言中無法決定的判斷性問題

  • 無法用算法判斷一個文法是否是歧義的
  • 無法用算法判斷一個上下文無關語言是固有歧義的
  • 無法判斷兩個上下文無關語言的交集是否為空集
  • 無法判斷兩個上下文無關語言是否相等
  • 無法判斷一個上下文無關語言是否等於其字母表的星運算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM