形式文法概述

2021-04-15 07:51:13 字數 3806 閱讀 5226

形式文法

在電腦科學中,形式語言是某個字母表上一些有限長字串的集合,而形式文法是描述這個集合的一種方法。形式文法之所以這樣命名,是因為它與人類自然語言中的文法相似的緣故。

形式文法描述形式語言的基本想法是,從乙個特殊的初始符合出發,不斷的應用一些產生式規則,從而生成出乙個字串的集合。產生式規則指定了某些符號組合如何被另外一些符號組合替換。舉例來說,假設字母表只包含 'a' 和 'b' 兩個字元,初始符號是 's' ,我們應用下述規則:

1. s -> asb

2. s -> ba

於是我們可以通過把 "s" 重寫為 "asb"(規則1),我們還可以繼續應用這條規則把 "asb" 重寫為 "aasbb"。這個重寫的過程不斷重複,直到結果中只包含字母表中的字母為止。在例子中,我們可以得到 s -> asb -> aasbb -> aababb 這樣的結果。由文法刻畫的語言包含了所有可以這樣產生的字串,比如 ba, abab, aababb, aaababbb 等等。

形式定義

乙個形式文法 g 是下述元素構成的乙個元組(n, σ, p, s):----有些書上也寫成(v,t,s,p)

非終結符號集合 n。

終結符號集合 σ ,σ 與 n 無交。

取如下形式的一組產生式規則 p,

(σ ∪ n)*中的字串 -> (σ ∪ n)* 中的字串字串,並且產生式左側的字串中必須至少包括乙個非終結符號。

起始符號 s,s 屬於 n。

乙個由形式文法 g = (n, σ, p, s) 產生的語言是所有如下形式字串的集合,這些字串全部由終結符號集 σ 中符號構成,並且可以從初始符號 s 出發,不斷應用 p 中的產生式規則而得到。

例子

考慮如下的文法 g ,其中 n = , σ = , p 包含下述規則

1. s -> absc

2. s -> abc

3. ba -> ab

4. bb -> bb

非終結符號 s 作為初始符號。下面給出字串推導的例子:(推導使用的產生規則用括號標出,替換的字串用黑體標出)

s -> (2) abc

s -> (1) absc -> (2) ababcc -> (3) aabbcc -> (4) aabbcc

s -> (1) absc -> (1) ababscc -> (2) abababccc -> (3) aabbabccc -> (3) aababbccc -> (3) aaabbbccc -> (4) aaabbbccc -> (4) aaabbbccc

很清楚這個文法定義了語言 ,這裡 an 表示含有 n 個 a 的字串。

形式文法與 lindenmayer 系統(l-系統)類似, 但有幾點不同:l-系統不區分終結符號和非終結符號;l-系統限制規則的應用順序;l-系統能不停地執行,產生乙個無限長的字序列。通常情況下,每乙個字串同空間中的乙個點集聯絡起來,而l-系統的輸出就是這個點集列的極限。l-系統可以用於模擬細胞的生長,所以又被稱為發展系統。

文法的分類

某些型別的文法及其產生的語言得到了細緻的研究並被單獨命名。最常見的文法的分類系統是諾姆·喬姆斯基於2023年發展的喬姆斯基譜系,這個分類譜系把所有的文法分成四種型別:無限制文法、上下文相關文法、上下文無關文法和正規文法。任何語言都可以由無限制文法來表達,餘下的三類文法對應的語言類分別是遞迴可列舉語言、上下文無關語言和正規語言。這四種文法型別依次擁有越來越嚴格的產生式規則,同時文法所能表達的語言也越來越少。儘管表達能力比無限制文法和上下文相關文法要弱,但由於能高效率的實現,四類文法中最重要的是上下文無關文法和正規文法。例如對上下文無關語言存在演算法可以生成高效率的ll 分析器和lr 分析器。

上下文無關文法

上下文無關文法要求產生式左側只能包含乙個非終結符號。上例定義的語言 並不是乙個上下文無關語言,但它卻可以用乙個上下文無關文法來表達。具體如下,文法g2 包括 n=, σ=, s 是起始符號,產生式規則有:

1. s -> asb

2. s -> ab

正規文法

正規文法有多種等價的定義,我們可以用左線性文法或者右線性文法來等價地定義正規文法。左線性文法要求產生式的左側只能包含乙個非終結符號,產生式的右側只能是空串、乙個終結符號或者乙個非終結符號後隨乙個終結符號。右線性文法要求產生式的左側只能包含乙個非終結符號,產生式的右側只能是空串、乙個終結符號或者乙個終結符號後隨乙個非終結符號。

上例定義的語言 不是乙個正規語言。下面給出乙個正規語言的例子,語言 是乙個正規語言。文法g3 包括 n=, σ=, s 是起始符號,產生式規則有:

1. s -> aa

2. a -> aa

3. a -> bb

4. b -> bb 

形式語言理論◇(formal language theory

用數學方法研究自然語言(如英語)和人工語言(如程式語言)的產生方式、一般性質和規則的理論。形式語言是模擬這些語言的一類數學語言,它採用數學符號,按照嚴格的語法規則構成。從廣義上說,形式語言是符號取自某個字母表的字串的集合。

如同自然語言具有語法規則一樣,形式語言也是由形式文法生成的。乙個形式文法是乙個有窮變元集合,這些變元也稱為非終結符或語法範疇。每個變元都可以用來定義語言,定義方式可以是遞迴的,即通過一些稱為終結符的原始符號,加上變元自身,遞迴地加以定義。和變元有關的規則稱為生成式,生成式決定了語言是如何構造出來的。乙個典型的生成式表示:給定變元所代表的語言包含這樣一些字串,它們是通過鏈結運算,將另外某些變元語言中的字串和若干終結符鏈結起來而得到的。

形式文法被嚴格地定義為四元組g=(v,t,p,s),其中v和t分別是變元和終結符的有窮集合,並且v和t分別是變元和終結符的有窮集合,並且v和t沒有公共元素,即v∩t=æ。s是乙個特殊變元,稱為開始符號。p是生成式的有窮集合,生成式的基本形式是:a→β,這裡a和β,這裡a和β都是(v∪t)*中的元素,即它們都是由變元和終結符組成的符號串,但要求a至少含有乙個非終結符。在形式文法定義中,生成式集合p是至關重要的 。 在對使用符號的慣例作某些約定後,僅僅考查生成式,就能推斷出乙個文法的變元、終結符和開始符號,故可以友愛過列出生成式來定義乙個形式文法。

同形式文法g=(v,t,p,s)產生的形式語言記為l(g)。l(g)中的字串ω都具有如下特點:①該字串僅由終結符組成,即ω∈t*;②該字串能由開始符號s派生出來,即從s出發,通過應用零個或多個p中的生成式,由s可以推導出ω。 

根據p中生成式a→β的特點,可以將形式文法及其產生的形式語言分類,構成所謂的形式語言譜系。形式語言理論中重點研究四類文法和語言:①0型文法。又稱為無限制文法。這種文法對生成式a→β不作特殊限制,a和β可以是任意的文法符號串,當然a不能是空字串。0型文法是形式語言譜系中最大的文法類。由0型文法產生的形式語言恰是圖靈機所識別的語言類,即遞迴可列舉語言。②1型文法。又稱為上下文有關文法。這種文法要求生成式a→β滿足|a|≤|β|,即β要至少和a一樣長。 由1型文法產生的語言稱為1型語言或上下文有關語言。1型語言恰是非確定型線性有界自動機所識別的語言類。③2型文法。又稱為上下文無關文法。這種文法要求生成式a→β中的a必須是變元。由2型文法產生的語言稱為2型語言或上下文無關語言。2型語言恰是由下推自動機所識別的語言類。④3型文法。又稱為正則文法。這種文法分為兩種型別:第一類要求生成式的形式必須是a→ωb或a→ω,其中a,b都是變元,ω是終結符串(可以是空串),這種特殊的正則文法稱為右線性文法。第二類正則文法稱為左線性文法,它要求生成式必須是a→bω,或a→ω的形式。由正則文法生成的語言稱為正則語言,它恰是有窮自動機所識別的語言類。

上述定義的4種語言類具有依次包含關係,即對於i=0,1,2,在不考慮空字串時,i型語言都真包含i+1型語言 。  

文法的形式化定義

文法的形式化定義 產生式的簡寫 符號的約定 未用尖括號括起來的部分表示語言的基本符號,尖括號括起來的部分稱為語法成分 g vt,v n,p,s g v t,v n,p,s g vt vn p,s v nv n vn 非終結符集合終結符集合和非終結符集合都是字母表 終結符集合與非終結符集合是不相交的,...

形式語言 四類文法

參考 形式語言 文 法g n,p,s 其中n 為終止符 集合,為終止符 集合,p 為產生式 集合,s 為起始語 句 0 型文法 無限制文法或短語結構文法 包括所有的文法。該型別的文法能夠產生所有可被圖靈機識別的語言。可被圖靈機識別的語言是指能夠使圖靈機停機的字串,這類語言又被稱為遞迴可列舉語言。注意...

0型文法 1型文法 2型文法 3型文法

引用 s aas a是什麼型的,為什麼 s asb ab是什麼型的,為什麼 s sas b是什麼型的,為什麼 答 三種文法都屬於上下文無關文法。四種文法的判斷非常簡單,說到到,四種文法就是規定產生式的左和右邊的字元的組成規則不同而已,其它的不能理解就不要去想了,你只要知道判斷的時候就是以產生式的左邊...