編譯原理文法

2021-08-17 11:04:44 字數 2180 閱讀 2000

文法是用於描述語言的語法結構的形式規則。任何一種語言都有它自己的文法,不管它是機器語言還是自然語言。就像自然語言裡有主謂賓這樣的文法一樣,機器語言也有描述它語言構成的特定文法
終結符和

非終結符

在電腦科學和語言學的領域是用來指定推導規則的元素。在某個

形式語法

之中,終結符和非終結符是兩個不交的集合。

通俗的說,終結符號就是語言中用到的基本元素,一般不能再被分解;

名詞,動詞,形容詞,助詞,等等基本語言單位.

非終結符則是"語法"中用到的元素,除非談論"語法",一般交談語言中並不會用到非終結符.

比如,主語,短語,片語,句子.

從形式語言中定義看,終結符(t)就是不可再分的字元或串.

而非終結符(n)是乙個遞迴形式的定義:由終結符和至少乙個非終結符號組成的串.

產生式:用終結符替代非終結符的規則。

3.文法型別

0型文法也稱短語文法,此文法對應於圖靈機。設g=(vn,vt,p,s),如果它的每個產生式α

→β是這樣一種結構:α

∈(vn

∪vt)*且至少含有乙個非終結符,而β

∈(vn

∪vt)*,則g是乙個0型文法。

簡而言之

,左邊不能是單獨的終結符,至少有乙個非終結符

。例如:

a→bb,a

→b,a→b

都不是符合

0型文法

a→a,

aa→b,

aa→bb符合

0型文法

1型文法也叫上下文有關文法,此文法對應於線性界限自動機。它是在0型文法的基礎上每乙個α→β,都有|β|>=|α|。這裡的|β|表示的是β的長度。

簡而言之,在0

型的基礎之上,右側長度大於或等於左側長度

。但是有乙個特例,即α

→ε也滿足1型文法。

2型文法也叫上下文無關文法,它對應於非確定的下推自動機。2型文法是在1型文法的基礎上,再滿足:每乙個α→β都有α是非終結符。如a->ba,符合2型文法要求。

簡而言之,在1

型文法基礎之上,左側都是非終結符,即不存在終結符

。例如:

a→

a,ba→a

,a→a

b,a→

ba等都符合

2型文法

aa→b

,ab→

a只符合

1型文法,而不符合

2型文法

擴充套件

:在左部如果有多個非終結符也算成乙個非終結符。

3型文法也叫正規文法,它對應於有限狀態自動機。它是在2型文法的基礎上滿足:a→α|αb(右線性)或a→α|bα(左線性)。

簡而言之

,在2型文法基礎之上,兩個產生式右側的結構要相同,要麼是右線性(即終結符+非終結符),要麼是左線性(即非終結符+終結符)

。例如:

a→

ab,b→

cd符合

3型文法。

a→ab,

b→dc不符合

3型文法。因為a→ab

的右側是:終結符

+非終結符;而b→

dc的右側是:非終結符

+終結符,兩者的右側結構不相同,故而不符合

3型文法。

擴充套件一下,如何判斷是否屬於3型文法

第一點

:左邊必須只有乙個字元,且必須是非終結符;

第二點

:其右邊最多只能有兩個字元,且當有兩個字元時必須有乙個為終結符而另乙個為非終結符。當右邊只有乙個字元時,此字元必須為終結符。

第三點

:對於3型文法中的所有產生式,其右邊有兩個字元的產生式,這些產生式右邊兩個字元中終結符和非終結符的相對位置一定要固定,也就是說如果乙個產生式右邊的兩個字元的排列是:終結符+非終結符,那麼所有產生式右邊只要有兩個字元的,都必須前面是終結符而後面是非終結符。反之亦然,要麼,就全是:非終結符+終結符。

編譯原理 文法

編譯原理這種課一聽就知道肯定特別晦澀難懂,上課沒聽懂,今天花了一天時間來學文法,看了一天也是是有些眉目,書上講的並不是特別清楚,倒是從各大部落格中汲取到不少知識。雖然感覺還只是停留在理論階段,但也要記錄一下吧,不然到時候理論都想不起來。文法 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...

編譯原理 文法複習

文法是以有窮的集合刻畫無窮的集合的乙個工具。語言 是句子組成的集合,是由一組符號所構成的集合 語法 是每個句子構成的規則 語義 是每個句子的含義 閉包的概念 代表任意次推導,也叫克林閉包 代表至少一次推導,成為正閉包。文法定義為四元組 vn,vt,p,s vn 非終結符的集合 一般用大寫字母表示 v...