編譯原理 第二章 學習總結
第二章學習的是高階語言及語法描述,首先是程式語言的定義,從語法語義
方面來定義語言。接下來是高階語言的一般特性,高階語言的分類包括強制式語言
,應用式語言,基於規則的語言和物件導向語言,本章的重點是上下文無關文法,
下面選擇書本後面的練習題來說明:
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...