編譯原理 第二章 學習總結

2021-08-17 07:07:19 字數 1641 閱讀 3152

編譯原理 第二章 學習總結

第二章學習的是高階語言及語法描述,首先是程式語言的定義,從語法語義

方面來定義語言。接下來是高階語言的一般特性,高階語言的分類包括強制式語言

,應用式語言,基於規則的語言和物件導向語言,本章的重點是上下文無關文法,

下面選擇書本後面的練習題來說明:

t6:n -> d|nd,d -> 0|1|2|3|4|5|6|7|8|9,問它的語言

l是什麼?n能轉換成d,也就是能得到0到9的一位數字,或者n推出nd,n繼續推出0到9的數字,

於是l的語言就是一竄由0到這10個數字組成的乙個竄,至少是1位,至多不限。(2)給出0127,34,568

的最左推導和最右推導。

這裡只展示568的做法,另外兩個類似:

n->nd->ndd->ddd->5dd->56d->568  這是568的最左推導。

n->nd->n8->nd8->n68->d68->568  這是568的最右推導。

好像難度一般吧。

下面看看第7題。

7:寫乙個文法,使其語言是奇數集,而且每個奇數不以0開頭。

g(s):

s->e|ae

e->1|3|5|7|9

a->ad|n

d->0|n

n->2|4|6|8|e

首先s能得到e。e可以是1,3,5,7,9,這就說明得到了只有一位的奇數;如果推出ae,則隨後一位也是奇數,最後得到奇數沒問題,再看a推出什麼,

a如果推出n,n可以得到1到9這九個數字中的任何乙個,可以保證開頭不為0;如果a推出ad,這中間的部分是d,d能推出0到9這是個數字,所以問

題解決了。

9:證明下面的文法是二義的:

s -> ises|is|i   

iiiei有兩棵語法樹,

第一:s->ises->isei->iisei->iiiei

第二:s->is->iises->iisei->iiiei

10:把下面的文法改寫成無二義的:

s -> ss|(s)|()

有兩個解決二義性的基本方法。其一是:設定乙個規則,該規則可在每個二義性情況下指出哪乙個分析樹(或語法樹)是正確的。

這樣的規則稱作消除二義性規則。這樣的規則的用處在於:它無需修改文法就可消除二義性;

另一種方法是將文法改變成乙個強制正確分析樹的構造的格式,這樣就可以解決二義性了。當然在這兩種辦法中,都必須確定在二義性情況下

哪乙個樹是正確的。這就再一次涉及到語法制導翻譯原則了。我們所需的分析語法樹應能夠正確地反映將來應用到構造的意義,以便將其

翻譯成目標**。s->ts|t  t->s|() 

11.給出下列語言的相應文法:

(1)l1=

注意一下,這裡的an是指a的n次方,bnci也一樣。

s->ac

a->aab|ab

c->cc|?

?表示空集。

(2)l2=

s->ab

a->aa|?

b->bbc|bc

(3)l3=

s->ab

a->aab|?

b->1b0|a

(4)l4=

s->a|b

a->0a1|?

b->1b0|a

歡迎大佬們批評指教。

編譯原理第二章

2.5 文法和語言的chomsky分類 直接子樹 若乙個子樹的根只有直接後繼,而無更遠代的後繼,稱這種子樹為直接子樹。二義性 若乙個文法所產生的每乙個句子都僅有一顆語法樹,則稱此文法為無二義性的。控制代碼 乙個句型的最左直接短語 即規範分析中,最先被規約的子串 稱之為句型的控制代碼。文法 的每個產生...

編譯原理第二章

2.1程式語言的定義 程式語言主要有語法和語義兩個方面定義。語法是指 一組規則可以產生乙個合式的程式,這些規則一部分是詞法規則,一部分是語法規則 也叫做產生規則 語言的單詞符號是有詞法規則確定。乙個程式語言只使用乙個有限字符集作為字母表。單詞符號是語言中具有獨立意義的最基本結構。詞法規則是指單詞符號...

第二章學習總結

第二章主要學習內容是線性表,在這一章節裡面,我們從順序儲存和鏈式儲存兩種儲存方式對線性表進行深入的了解。分析2種儲存結構在相同操作中時間複雜度的大小,再根據實際需求選擇合適的儲存結構。順序儲存結構的定義 typedef struct 鏈式儲存結構的定義 typedef struct lnode ln...