真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【編譯原理】山東大學(xué)編譯原理復(fù)習(xí)提綱-創(chuàng)新互聯(lián)

涵蓋所有考點(diǎn),復(fù)習(xí)絕對(duì)高效,點(diǎn)贊+留郵箱獲取pdf版本

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、微信小程序開(kāi)發(fā)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷、管理等多方位專業(yè)化運(yùn)作于一體。山東大學(xué)編譯原理復(fù)習(xí)提綱 一、簡(jiǎn)答與計(jì)算 1.1 必考 1. 編譯過(guò)程
  • 畫(huà)圖表示編譯過(guò)程的各階段,并簡(jiǎn)要說(shuō)明各階段的功能:
img
  • 詞法分析器:輸入源程序,進(jìn)行詞法分析,輸出單詞符號(hào);
  • 語(yǔ)法分析器:根據(jù)文法構(gòu)建分析表,對(duì)單詞符號(hào)進(jìn)行語(yǔ)法分析,檢查程序是否符合語(yǔ)法規(guī)則;
  • 語(yǔ)義分析與中間代碼生成器:按照文法翻譯規(guī)則對(duì)語(yǔ)法分析器歸約出的語(yǔ)法單位進(jìn)行語(yǔ)義分析,并把它們翻譯成一定形式的中間代碼;
  • 優(yōu)化器:對(duì)中間代碼進(jìn)行優(yōu)化處理;
  • 目標(biāo)代碼生成器:把中間代碼翻譯成目標(biāo)代碼。
2. 消除左遞歸image-20220616162952878image-20220616163330803

如果從開(kāi)始符號(hào)依次推導(dǎo)出 A1A2A3,則按其逆序排序時(shí)得到的產(chǎn)生式最少。

3. 消除回溯

image-20220620164318886

通過(guò)反復(fù)提取左公因子可以消除回溯。

4. 提左公因子image-202206161647162085. 后綴表達(dá)式

中綴轉(zhuǎn)后綴算法:

初始化符號(hào)棧,順序讀取中綴表達(dá)式,遇到(則將其入棧,遇到)則依次彈出棧頂元素到結(jié)果串中,直到遇到(,將其出棧但不附加到結(jié)果串;

遇到+-,彈出棧頂?shù)乃胁僮鞣郊拥浇Y(jié)果串中,然后自己進(jìn)棧;

遇到*/,先讓棧頂?shù)?code>*/出棧,附加到結(jié)果串中,然后自己進(jìn)棧;

遇到數(shù)字,直接附加到結(jié)果串中;

最后若符號(hào)棧非空,將符號(hào)棧棧頂元素依次附加到結(jié)果串中。

// 中綴轉(zhuǎn)后綴
vectorinterToPost(vectorvec)
{
	vectorres;
	stackop_stack;
	for (int i = 0; i< vec.size(); i++) {
		if (vec[i] == "(")
			op_stack.push(vec[i]);
		else if (vec[i] == ")") {
			while (op_stack.top() != "(") {
				res.push_back(op_stack.top());
				op_stack.pop();
			}
			// 左括號(hào)出棧
			op_stack.pop(); 
		}
		// 遇到+-,先讓棧中的+-*/出棧
		else if (vec[i] == "+" || vec[i] == "-") {
			while (!op_stack.empty() && op_stack.top() != "(") {
				res.push_back(op_stack.top());
				op_stack.pop();
			}
			op_stack.push(vec[i]);
		}
		// 遇到*/,先讓棧中的*/出棧
		else if (vec[i] == "*" || vec[i] == "/") {
			while (!op_stack.empty() && (op_stack.top() == "*" || op_stack.top() == "/")) {
				res.push_back(op_stack.top());
				op_stack.pop();
			}
			op_stack.push(vec[i]);
		}
		else
			res.push_back(vec[i]);
	}
	while (!op_stack.empty()) {
		res.push_back(op_stack.top());
		op_stack.pop();
	}
	return res;
}

計(jì)算后綴表達(dá)式:

初始化數(shù)據(jù)棧,順序讀取后綴表達(dá)式,遇到操作符op則將棧次頂元素op棧頂元素,彈出操作數(shù)并壓入運(yùn)算結(jié)果;

遇到數(shù)據(jù),則直接壓入棧頂;

最終棧頂元素就是結(jié)果。

// 計(jì)算后綴表達(dá)式
double solvePostPrefix(vectorpost_prefix) {
	stackdataStack;
	double num1, num2, result;
	for (auto x : post_prefix) {
		if (x == "+" || x == "-" || x == "*" || x == "/") {
			num1 = dataStack.top();
			dataStack.pop();
			num2 = dataStack.top();
			dataStack.pop();
			if (x == "+")
				result = num2 + num1;
			if (x == "-")
				result = num2 - num1;
			if (x == "*")
				result = num2 * num1;
			if (x == "/")
				result = num2 / num1;
			dataStack.push(result);
		}
		else {
			double num = strToDouble(x);
			dataStack.push(num);
		}
	}
	return dataStack.top();
}
1.2 選考 1. 編譯、翻譯和解釋
  • 翻譯程序:把一種語(yǔ)言程序(源語(yǔ)言)轉(zhuǎn)換成另一種語(yǔ)言程序(目標(biāo)語(yǔ)言);
  • 編譯程序:源語(yǔ)言為高級(jí)語(yǔ)言,目標(biāo)語(yǔ)言為低級(jí)語(yǔ)言的翻譯程序;
  • 解釋程序:以源語(yǔ)言作為輸入,但不產(chǎn)生目標(biāo)程序,而是邊翻譯邊執(zhí)行源程序本身。
2. 中間代碼

是一種含義明確、便于處理的記號(hào)系統(tǒng),通常獨(dú)立于具體的硬件但與指令形式有某種程度的接近,或者能夠比較容易的轉(zhuǎn)換為機(jī)器指令,常見(jiàn)的形式有:

  • 三元式;
  • 間接三元式;
  • 四元式;
  • 逆波蘭式;
  • 樹(shù)形表示。
3. 目標(biāo)代碼

把中間代碼變換為特定機(jī)器上的低級(jí)語(yǔ)言代碼,產(chǎn)生出足以發(fā)揮硬件效率的目標(biāo)代碼是一件非常不容易的事情。常見(jiàn)的形式有:

  • 匯編指令代碼:需要匯編才能執(zhí)行;

  • 絕對(duì)指令代碼:可以立即執(zhí)行;

  • 可重定位指令代碼:運(yùn)行前必須借助于一個(gè)鏈接裝配程序,把各個(gè)目標(biāo)模塊(包括系統(tǒng)提供的庫(kù)模塊)連接在一起,確定程序裝入內(nèi)存中的起始地址,使之成為一個(gè)可以運(yùn)行的絕對(duì)指令代碼程序。

4. 屬性文法
  • S-屬性文法:只含有綜合屬性的文法;
  • L-屬性文法:含有綜合屬性或繼承屬性,且改繼承屬性僅依賴于:
    • 產(chǎn)生式體該符號(hào)左邊的那些屬性;
    • 產(chǎn)生式頭的繼承屬性;
5. T 型圖

img

6. 高級(jí)語(yǔ)言的分類
  • 強(qiáng)制式語(yǔ)言:面向底層和語(yǔ)句,每個(gè)語(yǔ)句的執(zhí)行引起若干存儲(chǔ)單元中值的改變;

  • 應(yīng)用式語(yǔ)言:更注重程序所表示的功能,每條語(yǔ)句都封裝了復(fù)雜的功能;

  • 基于規(guī)則的語(yǔ)言:檢查一定的條件,當(dāng)它滿足值,則執(zhí)行適當(dāng)?shù)膭?dòng)作;

  • 面向?qū)ο蟮恼Z(yǔ)言:主要特征是封裝性、繼承性、多態(tài)性。

7. 閉包

用 Σ*表示 Σ 上所有符號(hào)串的全體,空字 ε 也在其中,稱為 Σ 的閉包。

  • Σ = {a, b},則 Σ*= {ε, a, b, aa, ab, bb, aaa, …}。
8. 上下文無(wú)關(guān)文法

image-20220615185419507

9. 構(gòu)造文法image-20220615192409498image-2022061611132554710. 二義文法

如果一個(gè)文法的某個(gè)句子對(duì)應(yīng)兩棵不同的語(yǔ)法樹(shù),即其最左( 最右)推導(dǎo)不唯一,稱該文法為二義文法。對(duì)程序設(shè)計(jì)語(yǔ)言來(lái)說(shuō),常常希望它的文法是無(wú)二義的,因?yàn)槲覀兿M麑?duì)它每個(gè)語(yǔ)句的分析是唯一的。

  • 消除文法二義性的關(guān)鍵步驟:

    • 劃分優(yōu)先級(jí)和結(jié)合性;
    • 優(yōu)先級(jí)高一級(jí)的運(yùn)算,增加一層產(chǎn)生式;
    • 遞歸非終結(jié)符在左邊,運(yùn)算具有左結(jié)合性,否則具有右結(jié)合性。
  • 例子:改寫二義文法

    E ->E + E 
    E ->E * E
    E ->(E) | -E | id
    • 優(yōu)先級(jí)從低到高:[+];[*][( ), -, id];

    • 結(jié)合性:

      左結(jié)合:[+, *]
      右結(jié)合:[-]
      無(wú)結(jié)合:[id]

    • 非終結(jié)符與運(yùn)算:

      E:+(E產(chǎn)生式,左遞歸)
      T:*(T產(chǎn)生式,左遞歸)
      F:-,( ),id(F產(chǎn)生式,右遞歸)

    E → E + T | T
    T → T * F | F
    F → (E) | -E | id
11. 構(gòu)造正規(guī)式

image-20220615203242446

12. DFA

image-20220615203548406

  • 設(shè)計(jì) DFA 例題

    image-20220615204549610

    image-20220615204803833

    image-20220615204844463

13. NFA

  • 構(gòu)造 NFA 例題

    image-20220615215948007

14. 句柄

**句型:**從文法開(kāi)始符號(hào)推導(dǎo)出來(lái)的任一文法符號(hào)串;

**句子:**從文法開(kāi)始符號(hào)推導(dǎo)出來(lái)的任一終結(jié)符號(hào)串;

**短語(yǔ):**對(duì)文法G[S],如果有S =>* αAδA =>+ β,則稱β是句型αAδ相對(duì)于非終結(jié)符號(hào)A的短語(yǔ)。

短語(yǔ)是語(yǔ)法樹(shù)中所有子樹(shù)的邊緣,是相對(duì)于子樹(shù)根節(jié)點(diǎn)的短語(yǔ)。

例如:

image-20220616224920733

短語(yǔ)是S,(T)Sd(T),bSd(T)db,(Sd(T)db);

**直接短語(yǔ):**對(duì)文法G[S],如果有S =>* αAδA =>β,則稱β是句型αAδ相對(duì)于非終結(jié)符號(hào)A的短語(yǔ)。

直接斷語(yǔ)是所有二層子樹(shù)的邊緣,在上圖中只有三個(gè)二層子樹(shù)。

例如:上圖的直接短語(yǔ)是S,(T),b;

**句柄:**最左直接短語(yǔ);

句柄是最左二層子樹(shù)的邊緣。

例如:上圖的句柄是S;

**素短語(yǔ):**至少包含一個(gè)終結(jié)符的短語(yǔ),并且除它自身之外不再包含其他素短語(yǔ);

例如:上圖的素短語(yǔ)是(T),b;

**最左素短語(yǔ):**句型最左邊的素短語(yǔ),是算符優(yōu)先分析法的規(guī)約對(duì)象;

例如:上圖的最左素短語(yǔ)是(T);

例子:

image-20220616225710296

image-20220616225718632

**活前綴:**是句型的一個(gè)前綴,不含句柄以后的任何符號(hào);

例子:

image-2022061623522977815. 規(guī)范規(guī)約

規(guī)范規(guī)約是最右推導(dǎo)的逆過(guò)程,因此也稱為最左規(guī)約。

image-2022061623102384816. 根據(jù) FA 寫正規(guī)式

是根據(jù)正規(guī)式構(gòu)造 FA 的逆過(guò)程。

17. 符號(hào)表

用于登記源程序的各類信息,如變量名、常量名、過(guò)程名等,以及編譯各階段的進(jìn)展?fàn)顩r。當(dāng)掃描器識(shí)別出一個(gè)標(biāo)識(shí)符后,把該名字填入符號(hào)表,在語(yǔ)義分析階段回填類型,在目標(biāo)代碼生成階段回填地址。

符號(hào)表的作用和地位:(重點(diǎn))

  • 收集符號(hào)屬性;
  • 語(yǔ)義合法性檢查的依據(jù),如重復(fù)變量定義;
  • 作為目標(biāo)代碼生成階段地址分配的依據(jù)。

符號(hào)表的主要屬性:

  • 符號(hào)名:變量、過(guò)程、類的名稱;
  • 符號(hào)數(shù)據(jù)類型:整型、實(shí)型、布爾型;
  • 符號(hào)聲明類別:static、const等;
  • 符號(hào)存儲(chǔ)方式:堆區(qū)存儲(chǔ)還是棧區(qū)存儲(chǔ)等;
  • 符號(hào)作用域:全局變量與局部變量;

符號(hào)表的組織方式:

  • 構(gòu)造多個(gè)符號(hào)表,具有相同屬性種類的符號(hào)組織在一起;
  • 把所有符號(hào)項(xiàng)都組織在一張大的符號(hào)表中;
  • 折中了上述兩種方案,根據(jù)符號(hào)屬性的相似程度分類成若干張表;
  • 使用對(duì)象組織,需要編譯器的支持,但非常方便管理;

符號(hào)表項(xiàng)的排列:

  • 數(shù)組:線性組織;
  • 鏈表:Hash表,跳表;
  • 樹(shù)形:二叉樹(shù),平衡二叉樹(shù)。
18. 運(yùn)行時(shí)空間組織

運(yùn)行時(shí)存儲(chǔ)器的劃分:

  • 代碼區(qū):編譯生成的目標(biāo)代碼;
  • 靜態(tài)區(qū):編譯時(shí)就可以完全確定的數(shù)據(jù);
  • 棧區(qū):棧式內(nèi)存分配;
  • 堆區(qū):堆式內(nèi)存分配;

存儲(chǔ)分配策略:

  • **靜態(tài)分配策略:**在編譯時(shí)對(duì)所有數(shù)據(jù)對(duì)象分配固定的存儲(chǔ)單元,且在運(yùn)行時(shí)始終保持不變;
  • **棧式動(dòng)態(tài)分配策略:**在運(yùn)行時(shí)把存儲(chǔ)器作為一個(gè)棧進(jìn)行管理,運(yùn)行時(shí),每當(dāng)調(diào)用一個(gè)過(guò)程,它所需要的存儲(chǔ)空間就動(dòng)態(tài)地分配于棧頂,一旦退出,它所占空間就予以釋放;
  • **堆式動(dòng)態(tài)分配策略:**在運(yùn)行時(shí)把存儲(chǔ)器組織成堆結(jié)構(gòu),以便用戶關(guān)于存儲(chǔ)空間的申請(qǐng)與歸還(回收),凡申請(qǐng)者從堆中分給一塊,凡釋放者退回給堆;

活動(dòng)記錄:

為了管理過(guò)程在一次執(zhí)行中所需要的信息,使用一個(gè)連續(xù)的存儲(chǔ)塊,這樣的一個(gè)連續(xù)存儲(chǔ)塊稱為活動(dòng)記錄, 一般包括:

  • 局部變量:源代碼中在過(guò)程體中聲明的變量;
  • 臨時(shí)單元:為了滿足表達(dá)式計(jì)算要求而不得不預(yù)留的臨時(shí)變量;
  • 內(nèi)情向量:內(nèi)情向量是靜態(tài)數(shù)組的特征信息,用來(lái)描述數(shù)組屬性信息的一些常量,包括數(shù)組類型、維數(shù)、各維的上下界及數(shù)組首地址;
  • 返回地址:調(diào)用位置的地址;
  • 動(dòng)態(tài)鏈:SP指向當(dāng)前過(guò)程的動(dòng)態(tài)鏈地址(也是幀起始地址),它又指向調(diào)用該過(guò)程的上一過(guò)程的幀起始地址,用于過(guò)程結(jié)束后回收分配的幀;它和函數(shù)的嵌套定義關(guān)系無(wú)關(guān),只與調(diào)用順序有關(guān);
  • 靜態(tài)鏈:指向當(dāng)前過(guò)程的直接父過(guò)程的幀起始地址,用于訪問(wèn)非局部數(shù)據(jù),它只與函數(shù)嵌套定義關(guān)系有關(guān)。

image-20220618015919118

19. 優(yōu)化手段
  • 源代碼級(jí)別:選擇適當(dāng)?shù)乃惴?,例如快排?yōu)于插排;
  • 語(yǔ)義動(dòng)作級(jí)別:生成高效的中間代碼,例如在詞法分析階段加入錯(cuò)誤檢查;
  • 中間代碼級(jí)別:安排專門的優(yōu)化階段,例如DAG優(yōu)化;
    • 局部?jī)?yōu)化:例如DAG優(yōu)化;
    • 循環(huán)優(yōu)化:包含代碼外提、強(qiáng)度削弱、刪除歸納變量、復(fù)寫傳播等;
  • 目標(biāo)代碼級(jí)別:考慮如何有效地利用寄存器,例如窺孔優(yōu)化。
20. 待用/活躍信息

當(dāng)翻譯A = B op C時(shí):

  • 待用信息:變量在哪些中間代碼中還會(huì)被引用;
  • 活躍信息:A、B、C是否還會(huì)在基本塊內(nèi)被引用;

image-20220618185515068

21. LL(1)分析

對(duì)于一個(gè)不含回溯和左遞歸的文法,LL(1) 方法從左到右掃描輸入串,維護(hù)一個(gè)狀態(tài)棧和一個(gè)符號(hào)棧,每一步只向右查看一個(gè)符號(hào),根據(jù)狀態(tài)棧頂、符號(hào)棧頂和分析表的內(nèi)容來(lái)確定下一步的動(dòng)作,最終分析出整個(gè)句子。

22. LR(1)分析

LR(1) 分析適合大多數(shù)上下文無(wú)關(guān)文法,它從左到右掃描符號(hào)串,能記住移進(jìn)和規(guī)約出的整個(gè)符號(hào)串,即 “記住歷史”,還可以根據(jù)所用的產(chǎn)生式推測(cè)未來(lái)可能碰到的輸入符號(hào),即 “展望未來(lái)”,根據(jù) “歷史”、“展望” 和分析表的內(nèi)容來(lái)確定下一步的動(dòng)作,最終分析出整個(gè)句子。

23. display 表

為提高訪問(wèn)非局部變量的速度,引入指針數(shù)組指向本過(guò)程的所有外層,成為嵌套層次顯示表,display 表是一個(gè)棧,自頂向下依次指向當(dāng)前層、直接外層、直接外層的直接外層,直到最外層。

24. 語(yǔ)法制導(dǎo)翻譯法

對(duì)單詞符號(hào)串進(jìn)行語(yǔ)法分析,構(gòu)造語(yǔ)法分析樹(shù),然后根據(jù)需要遍歷語(yǔ)法樹(shù)并在語(yǔ)法樹(shù)的各結(jié)點(diǎn)處按語(yǔ)義規(guī)則進(jìn)行計(jì)算。這種有源程序的語(yǔ)法結(jié)構(gòu)驅(qū)動(dòng)的處理辦法就是語(yǔ)法制導(dǎo)翻譯法。

二、綜合題 2.1 詞法分析

給定正規(guī)式: ①構(gòu)造NFA ②確定化 ③最小化

例題

① + ②

image-20220615220445134

image-20220615221745695

image-20220615222334279

2.2 LL(1) 分析

給出文法:①構(gòu)造First集合 ②構(gòu)造Follow集合 ③構(gòu)造LL(1)分析表 ④識(shí)別句子

例題 前提:LL(1) 適用條件

image-20220616165155939

①求First(X)

image-20220616165438384

A ->Bc

B ->ε

則 First(A) = { c };

若 A ->B

B ->ε

則 First(A) = { ε };

②求Follow(X)

image-20220616171358707

③構(gòu)造分析表

image-20220616173215360

image-20220616173408649

④分析過(guò)程

image-20220616175857393

image-20220616175908255

2.3 LR(1) 分析

給出文法:①構(gòu)造拓廣文法 ②求First集合 ③構(gòu)造LR(1)項(xiàng)目集規(guī)范族 ④構(gòu)造LR(1)分析表并消除二義性 ⑤識(shí)別句子

構(gòu)造帶向前搜索符的DFA,無(wú)歸約-歸約沖突則是LR(1)文法。

例題1
構(gòu)造文法G[S]的LR(1)項(xiàng)目集規(guī)范族:
S ->aCaCb
S ->aDb
C ->a
D ->a
①構(gòu)造拓廣文法:
S' ->S
S ->aCaCb
S ->aDb
C ->a
D ->a
②求First集合:

image-20220617015244163

③構(gòu)造LR(1)項(xiàng)目集規(guī)范族:

image-20220617015341765

④構(gòu)造LR(1)分析表并消除二義性:

消除二義性需要認(rèn)為定義運(yùn)算優(yōu)先級(jí),發(fā)生移入-規(guī)約沖突時(shí)選擇正確的項(xiàng)填入。

⑤識(shí)別句子aaaabaab

image-20220617015635034

例題2

對(duì)下列文法做 LR(1) :

S ->AS | b
A ->SA | a

img

2.4 中間代碼生成

給出翻譯模式和高級(jí)語(yǔ)言程序,翻譯句子,一般涉及多種類型句子的綜合,也可能涉及聲明語(yǔ)句填寫符號(hào)表。

1. 過(guò)程中的說(shuō)明語(yǔ)句imgimg

image-20220617171901490

2.算術(shù)表達(dá)式的翻譯image-20220617171233909image-20220617171306138image-202206171726491693. 布爾表達(dá)式的翻譯

重點(diǎn):回填。

image-20220617204129295

image-20220617203954441

4. 控制流語(yǔ)句的翻譯

重點(diǎn):if 和 while 。

image-20220617210312858

image-20220617214337930

image-20220617214400974

2.5 目標(biāo)代碼生成

給出基本塊代碼:①構(gòu)造DAG ②寫出優(yōu)化后的中間代碼 ③寫出DAG目標(biāo)優(yōu)化后的中間代碼 ④根據(jù)變量活躍性和寄存器信息,寫出目標(biāo)代碼。

例題1

給出基本塊代碼為:

image-20220618174837303

①構(gòu)造DAG

image-20220618174926596

②寫出優(yōu)化后的中間代碼

image-20220618174945854

③寫出DAG目標(biāo)優(yōu)化后的中間代碼
(1) T6 = R - r
(2) T2 = R * r
(3) T4 = T2
(4) T1 = 6.28
(5) T3 = 6.28
(6) A = 6.28 * T2
(7) T5 = A
(8) B = A * T6
(9) T0 = 3.14
④根據(jù)變量活躍性和寄存器信息,寫出目標(biāo)代碼

假定B是基本塊出口之后活躍的,有寄存器R0R1可用,目標(biāo)代碼為:

DAG 優(yōu)化中,不活躍變量,目標(biāo)代碼依然要生成計(jì)算其值的代碼,只是不生成存儲(chǔ)到主存的代碼。計(jì)算代碼被優(yōu)化是后續(xù)優(yōu)化完成的,不是 DAG 完成的。

LD R0, R
SUB R0, r          R0: T6     R1: \
LD R1, R
MUL R1, r          R0: T6     R1: T2
ST R0, T6
LD R0, 6.28        R0: 6.28   R1: T2
MUL R0, R1         R0: A      R1: T2
MUL R0, T6         R0: B      R1: T2
ST R0, B
附:歷年考試回憶 2004-2005

image-20220621071345662

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-MmUNQHdO-1655768860486)(https://s2.loli.net/2022/06/21/kX5Cfm2ILzv4ibW.png)]

image-20220621071405483

2015-2016

一、簡(jiǎn)答(30 分)
1.給了一個(gè)文法(具體忘了),讓證明二義性。
2.寫出文法,表示{0、1}集上的所有正規(guī)式
3.解釋 S-屬性文法
4.說(shuō)出傳地址和傳質(zhì)這兩種參數(shù)傳遞方式的異同
5.結(jié)合具體例子談一談回填思想

二、(babbb)* 畫(huà) NFA 轉(zhuǎn) DFA ,最小化(15 分)

三、(1)一個(gè)文法,判斷是否為 LL(1)文法(10 分)

(2)上題中的文法是否為 SLR 文法,給出證明(15 分)
(與課本上例子不同之處在于有 B ——〉ε)

四、利用語(yǔ)法指導(dǎo)思想寫四元式(15 分)
(比較簡(jiǎn)單,就是一個(gè) while-do 語(yǔ)句)

五、給出一段中間代碼,畫(huà) DAG 圖;只有 R 在代碼塊外是活躍的,做優(yōu)化;如
果有寄存器 R0 和 R1,寫出目標(biāo)代碼。(15 分)

2016-2017

一、簡(jiǎn)答題
1.編譯流程圖及各部分的作用。⒉舉例說(shuō)明文法二義性。
3.什么是L屬性文法?
4.寫出允許過(guò)程嵌套的C活動(dòng)記錄結(jié)構(gòu)。5.中間代碼優(yōu)化有哪幾種?
6.符號(hào)表作用。

二、詞法分析
RE NFA DFA最小化DFA整個(gè)流程走一遍

三、自上而下文法分析
給了一個(gè)文法,證明文法是LL1的,畫(huà)表。

四、自下而上文法分析
給了一個(gè)文法,證明文法是LR1的,畫(huà)表。

五、中間代碼生成
—段代碼,四元式翻譯。涉及循環(huán)和判斷的嵌套。

六、代碼優(yōu)化和目標(biāo)代碼生成。
給了一個(gè)代碼段,
先畫(huà)DAG圖,然后優(yōu)化,最后輸出匯編代碼。

2017-2018

image-20220621071437139

2019-2020

一、五個(gè)小題(25分)

1.判斷一個(gè)文法是否二義

2.編譯的前端,后端,什么是一遍掃描

3.什么是S屬性

4.什么是語(yǔ)法制導(dǎo)翻譯

5.在語(yǔ)法制導(dǎo)翻譯中,空返產(chǎn)生式的作用(M->e)

二、自動(dòng)機(jī)(15分)

一個(gè)單詞表由a,b組成,請(qǐng)寫出代表偶數(shù)個(gè)a的正規(guī)式,NFA,并確定化、最小化

三、判斷一個(gè)文法是不是LL(1)的,如果是就寫出預(yù)測(cè)分析表,不是就說(shuō)明原因(15分)

四、判斷一個(gè)文法是不是SLR(1)的,如果是就寫出預(yù)測(cè)分析表,不是就說(shuō)明原因(15分)

五、中間代碼生成程序(15分)

while a

六、代碼優(yōu)化(15分)

DAG優(yōu)化,最后寫出四元式的形式(這個(gè)是一個(gè)坑,四元式是目標(biāo)代碼,也就是此時(shí)要做目標(biāo)代碼生成)

同時(shí)目標(biāo)代碼生成要列表(Rvalue 寄存器描述,Avalue地址描述)

2020-2021

image-20220621070322834

2021-2022

一、簡(jiǎn)答題

  1. 畫(huà)編譯流程圖;
  2. 判斷一個(gè)文法是不是二義文法;
  3. 給一個(gè)句型,找它的句柄;
  4. 中綴表達(dá)式轉(zhuǎn)后綴,比較長(zhǎng),最好使用算法一步步推導(dǎo);
  5. 消除循環(huán)左遞歸;
  6. 給一個(gè) DFA,把它轉(zhuǎn)換為正規(guī)式

二、計(jì)算題

  1. 詞法分析:給定正規(guī)式 ①構(gòu)造NFA ②確定化 ③最小化
  2. LL(1)分析,給出文法 ①構(gòu)造First集合 ②構(gòu)造Follow集合 ③構(gòu)造LL(1)分析表(可能涉及消除二義文法沖突)④識(shí)別句子
  3. LR(1)分析,給出文法 ①構(gòu)造拓廣文法 ②構(gòu)造拓廣文法的LR(1)項(xiàng)目集規(guī)范族 ③構(gòu)造LR(1)分析表(及消除二義文法沖突) ④識(shí)別句子
  4. 給出基本塊代碼 ①構(gòu)造DAG ②寫出優(yōu)化后的中間代碼 ③寫出DAG目標(biāo)優(yōu)化后的中間代碼 ④根據(jù)變量活躍性和寄存器信息,寫出目標(biāo)代碼
  5. 給出翻譯模式和高級(jí)語(yǔ)言程序,翻譯句子while a< b do if c >d then x = y * z,會(huì)給出翻譯規(guī)則。

整體比較簡(jiǎn)單,高分應(yīng)該挺多。把本文涉及到的知識(shí)點(diǎn)全部搞清楚,應(yīng)付考試游刃有余

后續(xù)同學(xué)們考完試,可以把回憶版私發(fā)給我,我在此文中持續(xù)更新。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


文章名稱:【編譯原理】山東大學(xué)編譯原理復(fù)習(xí)提綱-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://weahome.cn/article/djpipg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部