文法一共4類,看課本的定義非常晦澀。
我嘗試著用通俗的話語講解這4類文法。
我們結合各個博主的說法,來形成我們自己的說法。
我們看到的文法都至少屬於0型文法。1型、2型、3型都逐步對0型文法加條件。非常正確。
(有一點要注意,儘管0型到3型文法範圍變小,但是每種文法產生的語言增多了,所以文法多少和語言多少沒有聯絡。)
圖源自首先先把符號搞清楚。
什麼是「終結符」?
由這個符號(或者是字串)不能夠再產生具體化的字元了,舉個例子,假設我們英語中只有小寫字母,而我們定義l這個大寫字母表示abcde等等26個小寫字母中的任意乙個,那麼這一串字元 「qewlsafd」 是可以產生更具體的字串,因為l可以變化成26個小寫字母中的任意乙個字母。用式子寫起來,就比較高大上了—— l -> a|b|c|d|...|z 。 終結符是字元的最基礎元素,不是乙個集合,是乙個元素。
什麼是「非終結符」?
就是上面解釋裡面的大寫字母l。
我們看課本上的規定,可以發現,
大寫字母 a等 代表 非終結符,
希臘字母 α、β等 代表 至少包含乙個終結符的字串,
小寫字母 a等 代表 終結符。
那麼,0型文法的推導式是
沒啥好說的,碰到的文法都至少是0型文法,此種文法人稱「遞迴可舉集」
1型文法,相比於0型文法,加了|α|<=|β|,就是字串變長了。 什麼是變長?通俗說就是有幾個字元,abc 就比 αc 長,aa比aaaa短。此種文法人稱「上下文有關文法」
α->β, 其中|α|<=|β|。
2型文法,相比於1型文法,又加了α中沒有終結符,也就是說,α實際上是 非終結符,可以用任意乙個大寫字母表示,我們用a。
α->β, 其中|α|<=|β|,而且α中沒有終結符。此種文法人稱「上下文無關文法」。
也就是 a->β 。
3型文法,相比於2型文法,又加了左線性或者是右線性。什麼是「左線性」?就是終結符統一在左邊,「右線性」同理。其中要注意的是,你要麼加左線性,要麼加右線性,同時加就不可以了,就不符合3型文法了。 那麼什麼是「在左邊」?假設說你本來是a,那麼「在左邊」是在本體的左邊,也就是aa,a就在a的左邊。那我只有a,也就是a -> a行不行?當然行了,這樣你就已經在「最左邊」了呀。此種文法人稱「正規文法」。
a -> aa | a 或者是 a -> aa | a
在判別4類文法的時候,從0開始判別。
這種文法至少是0型,就看其能爬到幾型了。
到不了1型,那麼就只能是0型;
到了1型看是不是2型,到不了2型那麼就是1型;
到了2型看是不是3型,到不了3型那麼就是2型;
加油!加油!加油!
編譯原理文法
文法是用於描述語言的語法結構的形式規則。任何一種語言都有它自己的文法,不管它是機器語言還是自然語言。就像自然語言裡有主謂賓這樣的文法一樣,機器語言也有描述它語言構成的特定文法終結符和 非終結符 在電腦科學和語言學的領域是用來指定推導規則的元素。在某個 形式語法 之中,終結符和非終結符是兩個不交的集合...
編譯原理 文法
編譯原理這種課一聽就知道肯定特別晦澀難懂,上課沒聽懂,今天花了一天時間來學文法,看了一天也是是有些眉目,書上講的並不是特別清楚,倒是從各大部落格中汲取到不少知識。雖然感覺還只是停留在理論階段,但也要記錄一下吧,不然到時候理論都想不起來。文法 g 定義為乙個四元組 vn,vt,p,s 喬姆斯基 cho...
編譯原理 文法分析
編譯原理實驗二 語法分析一 time limit 1000ms,special time limit 2500ms,memory limit 32768kb total submit users 115,accepted users 109 problem 10835 no special judg...