編譯原理-期末1


# chap 1

## 1. 編譯程序概念

把高級語言源程序翻譯成等價的低級語言目標程序的翻譯程序

## 編譯原理主要內容

見2

## 編譯程序重要性體現

屏蔽機器細節,使得程序設計獨立於機器.

## 2.!典型編譯程序划分,各階段基本任務

1. 詞法分析:從左到右一個字符一個字符地讀入源程序,對構成源程序的字符進行掃描和分解,識別出單詞;
2. 語法分析:將單詞序列分解成各類語法短語;
3. 語義分析:審查源程序有無語義錯誤,為代碼生成階段收集類型信息;
4. 中間代碼生成:將源程序變成一種易於翻譯成目標代碼的內部表示形式;
5. 代碼優化:是對前階段生成的中間代碼進行變換或改造,使生成的目標代碼更為高效;
6. 目標代碼生成:把中間代碼變換成特定機器上的目標代碼

## 常用的語言翻譯程序有哪些:匯編程序,解釋程序,編譯程序.

解釋與編譯的區別:

1. 工作模式:這是**根本區別**,編譯把源程序翻譯成目標代碼,而解釋直接得到計算結果,不生成目標代碼。
2. 存儲區內容:編譯方式翻譯和執行分開,解釋方式翻譯和執行同時並允許修改源程序,因此二者存儲組織不同。
3. 效率:解釋慢於編譯,很多語言兩種方式都有。

## 4.編譯過程再組織:前端:和源語言有關系,包括哪些東西(作業做過了),后端:

- 前端:詞法分析,語法分析,語義分析,中間代碼生成.(僅與源語言相關)
- 后端:代碼優化,目標代碼生成.(目標語言,運行環境有關)

目的:在多源語言,多目標語言開發中,可靈活搭配組合,消除重復開發工作量,提高編譯系統開發效率

組織以后有什么好處:提高編譯程序效率,方便移植.有些是單遍編譯,不是區別於程序設計而是取決於語言本身特點.   

## 遍/趟的划分依據,單遍與多遍

編譯程序趟划分的主要參考因素是源語言和目標機的特征.

####作業1.4. 貫穿編譯過程的兩個工作是什么?各自的主要任務是什么?



遍(PASS): 對輸入文件(源程序或其等價的中間語言程序)從頭到尾掃視,完成預定處理的過程。

一個多遍的編譯程序較之一遍的編譯程序可能少占內存,邏輯結構可能清晰些,但效率相對可能差點

(主要是作業里面)

------

# chap2

## 1.文法的直觀概念和形式概念.

### 直觀概念

- 有無窮句子的語言,無法列出全部句子,可以給出一些規則,用這些規則來說明(或者定義)句子的組成結構,這些規則成為判別句子結構合法與否的依據,可以看成是一種元語言,用來描述語言,僅僅涉及語言句子的結構描述,這樣的語言描述稱為文法。(例)
- 有了規則,可以用它們去推導或產生句子(例)
- 文法作為工具,嚴格地定義了句子的結構,也能夠用適當條數的規則把語言的全部句子描述出來,是以有窮集合刻划無窮集合的工具。

文法就是用來判定任何句子結構是否正確/推導句子的規則(有限的手段解決無窮的問題).   我們掌握形式概念(黑板寫下來了):四元組:$$G(S)=(V_T,V_N,S,P)$$

## 符號串和符號串集合的概念和運算

  給你兩個符號串集合,有可能求某種運算的結果,包含哪些串並,  寫出LM的連接:{st|s屬於L且t屬於M}

- 連接(乘積):$$=LM=\{st|s \in L  \  and \  t \in M\}$$

## 2.直接推導和推導的概念-最左,最右推導,規范推導,規范規約

#### 推導

$$
令G=(V_T,V_N,S,P),   若A \rightarrow γ∈P,且α,β∈(V_T∪V_N)^*,
若有符號v,w 滿足:v= αAβ,w= αγβ,則稱w是v的直接推導
$$





推導:星號或者加號.(兩者區別).直接推導序列.\alpha_0 ->(+) \alpha_n 
最左推導,最右推導,規范推導(就是**最右推導**)概念. **給你個文法,給你個串,讓你構造最右推導過程.**
規約 概念,最左規約(規范規約),最右規約.

## 3.句型,句子,語言 概念(作業做過,用形式化方式來描述)

- 設文法 $$G(S)=(V_T,V_N,S,P)$$。如果$$S\Rightarrow α, α∈V^*$$,則稱α是一個句型。
- 僅含終結符號的句型是一個句子。
- 語言 L(G)是由文法G產生的所有句子所組成的集合:$$=且L(G)=\{ α|S\Rightarrow α且α∈V_T^* \}$$

## 4.文法類型

根據文法產生式  分0-3型,上下文有關/無關/線性. 每個文法類型對產生式要求是什么.

*PPT30*



比如 2型文法對文法產生式在形式上滿足什么形式.-左部是非中介符號,右部是文法符號串. A是V_n,B屬於(V_T並V_n)*. 1,3型也是.

## 4.上下文無關文法 與 語法樹

- 上下文無關文法有足夠能力描述現今程序設計語言的語法結構.

 

### 語法樹-定義

  

設$$(,,,)G=(V_T,V_N,S,P)$$,G的一棵語法樹滿足如下條件:   

1. 每一個結點有一個標記,此標記是$$V_T∪V_N∪\{ε\}$$中的符號。
2. 根的標記是S。
3. 如果一個結點是內部結點,且有標記A,那么A必在V_N中。
4. 如果編號為n的結點有標記A,結點$$n_1,n_2,…,n_k$$是結點n的從左到右的兒子,並分別有標記$$X_1,X_2,…,X_k$$,則$$A \rightarrow X_1X_2…X_k$$必是P中的產生式
5. 如果結點n有標記ε,那么結點n是葉子,且是它父親唯一的兒子。

#### 語法樹的說明

- 語法樹表示了在推導過程中使用了哪個產生式和施用在哪個非終結符上,但並沒有表明使用產生式的順序

(什么一棵樹是語法樹,(它說了)五個條件:每個節點都有一個標記,文法開始符號(必須一一記住)) 內部節點是A

## 5.文法二義性和語言二義性(會證明)-(<u>Q1</u>)

(判斷題)如果一個文法沒有二義性,一個句型的語法樹是唯一的.  反過來,一個文法有二義性,語法樹不唯一.

#### 二義性文法(概念)

如果一個文法存在某個句子對應兩棵不同的語法樹,或者說,若一個文法中存在某個句子,它有兩個不同的最左(最右)推導,則說這個文法是二義的.

#### 考試-證明:二義性文法:找出這個文法的一個句型,找出兩棵以上語法樹,或者找到兩個最左推導.(PPT38)

例3.7表達式文法G[E],其產生式如下:

      E®E+E|E*E| (E)|a

       對於句子a+a*a, 有如下兩個最左推導:

 E->E+E -> a+E      ->  a+E*E       ->a+a * E ->a+a *a

E -> E *E ->E+E *E ->a+E *E ->a+a *E ->a+a *a

結論:該文法是二義的



- 文法的二義性和語言的二義性是兩個不同概念。因為有可能文法G和A不同,但L(G)=L(A),G是二義的,A是無二義的。

## 6.句型分析的概念,常用方法(他仔細說出答案了可能性比較大)

- 自上而下分析法,是從文法開始符號出發,反復使用產生式,逐步進行推導,直至推導出輸入符號串。-假定要被代換的最左非終結符號是A,且有n條產生式:A   a1|a2|…|an,那么如何確定用哪個產生式右部去替代A?   


- 自下而上分析法,是從輸入符號串開始,反復使用產生式,逐步進行歸約,直至歸約到文法的開始符號。-因為分析工作的每一步都是從當前串中選擇一個子串,將它歸約到某個非終結符,暫且把這個子串稱為可歸約串,問題是,每一步如何確定這個可歸約串?  

(說到底是語法分析:自下而上,自上而下:基本思想,解決關鍵問題是什么)那個子串先規約?

## 7.短語,直接短語及句柄(會求)-(**Q1**)-8'

#### 定義

- 短語:一棵子樹的所有葉子自左至右排列起來形成一個相對於子樹根的短語。
- 直接短語:僅有父子兩代的一棵子樹,它的所有葉子自左至右排列起來所形成的符號串。
- 句柄:一個句型的分析樹中最左那棵只有父子兩代的子樹的所有葉子的自左至右排列。


令G[S]是一個文法,如果有S(+)->αAδ 且A (*)-> β,則稱β是一個關於非終結符號A的,句型αβδ的短語。
其次如果有 S (*)-> αAδ 且 A->β,則稱β是句型αβδ相對於規則A->β直接短語。
 

給你文法之后,給你符號串,讓你說明是句型,然后指出短語,句柄,直接短語(作業做過,8分)
 
- PPT47/作業

## 7.實用文法的限制

#### 有關文法的實用限制(概念)

在實用中,限制文法中不得含有有害規則和多余規則.

- 有害規則是指形為 U->U (自身到自身)的產生式。會引起文法二義性 (會使推導陷入死循環,機器不知道使用多少次再出來) 。
- 多余規則是指文法中那些任何句子推導都用不到的規則,包括兩種規則,即不可到達的和不可終止的。
  - 不可達到的:不在文法的任何規則右部出現的非終結符。
  - 不可終止的:文法中那些不能從其推出終結符號串的非終結符。


- (判斷題) 一個二義性文法最后語言一定是二義性的嗎? - 不一定,有可能存在等價文法,e.g.表達式文法.

什么是二義性語言?概念

- 如果產生上下文無關語言的每一個文法都是二義的,則說此語言是先天二義的。

------

# Chap 3

## 1.詞法分析任務,單詞識別的依據,詞法和語法分析的接口方式

- 詞法任務:從左至右逐個字符地對源程序進行掃描,產生一個個單詞序列
- 單詞識別依據:程序設計語言的詞法描述規則
- 詞法分析程序與語法分析程序的接口方式
  - 詞法分析工作可以組織成獨立的一遍,把字符流的源程序變為單詞序列,輸出在一個中間文件上,這個文件作為語法分析程序的輸入而繼續編譯過程。
  - 將詞法分析程序設計成一個子程序,當語法分析程序需要一個單詞時,則調用該子程序,從源程序中讀入一些字符,直到識別出一個單詞,或說直到下一個單詞的第一個字符為止,這種設計方案是把詞法分析和語法分析程序放在同一遍,省掉了中間文件。

有哪兩種:語法分析的輸出和語法分析的輸入的接口.

#### (maybe簡答題)詞法本質上是語法,但為何要單獨把詞法拿出來?(給個簡答題~書上有)

1)為編譯程序結構的簡潔、清晰和有條理
2)改進編譯程序的效率
3)增強編譯程序的可移植性

## 2.詞法分析程序的輸出

二元組,每個單詞是二元組,單詞分哪五大類.
####單詞的種類 
1. 關鍵字:if、then、else、while、do等 
2. 標識符:表示變量名、過程名等 
3. 常數:無符號數、布爾常數、字符串常數等 
4. 運算符:+、-、*、/ 等 
5. 分界符:逗號、分號、括號等

單詞描述形式化工具3種:正規文法,正規式,有限自動機.(重點:建立三種的等價關系).
這章大題目:幾個轉換.

概念:正規式,正規集,正規集構造,正規集運算(連接,或,閉包)-就是正規式構造過程.
考試:r|s的正規集.

## 6.考試:正規文法和正規式的互相轉換(PPT18-20)

分解和合並.:r->G.  引入S,作為文法開始符號.寫成正規式S->r,看滿足不滿足正軌文法要求,不滿足要改寫.A->xy 重寫為:A->xB ,B->y.    A->x*y重寫為 A->xBA->y, B->xB, B->y.A->x|y   改寫 A->x,  A->y.
正規文法要求所有產生式在形式上滿足條件:左部都是非終結符號,右部要不是終結符+非終結符號或者是終結符.  合並方法   A->aB   A->a  (A屬於 V_N,a屬於V_T)   ; A->xB ,B->y 合並為 A->xy.     A->xA,A->y.A=x*y.  ;A->x,A->y  變為A=x|y. 

#### 正規文法到正規表達式

- A->xy    的正規式產生式,重寫成:        A->xB    B->y       
- A->x*y   的正規式產生式,重寫為:  A->xB    A->y     B->xB     B->y
- A->x|y   的正規式產生式,重寫為      A->x      A->y

#### 正規文法轉換成正規式

```
               文法產生式                                       正規式
```

規則1        A->xB   B->y                                    A=xy
規則2        A->xA|y                                            A=x*y
規則3        A->x   A->y                                      A=x|y

## 7.FA,DFA,NFA概念,表示方式



兩者區別:都是五元組(他寫下來了)(sigma,K,f,S,Z)   - (輸入符號字母表,有窮狀態集合,轉換函數/映像,初態,終態)  (  , , , 初態,終態集合).  f(k,a)=k_j(提現后繼唯一)   NFA會是一個狀態子集.(初態集合)

- DFA的確定性表現在轉換函數f: K× Σ->K是一個單值函數,即對任何狀態k ∈K,和輸入符號a ∈Σ,f(k,a)唯一地確定了下一個狀態。
- NFA  : f是一個從$$K\timesΣ$$到<u>K的子集</u>的映射;$$S \subset K$$,是一非空初態集。

#### DFA,NFA 三種表示方式(他說了)

1. 轉換函數
2. 狀態轉換圖
3. 轉移矩陣

狀態轉移矩陣,  對圖和矩陣的構造,在圖里面怎樣表示終態和初態.   說不定給你DFA函數表示,讓你構造圖或者矩陣.-見PPT23-例3.3-作業第二題...(擦聽起來肯定會考的樣子)

## 8.DFA,NFA解識別的字符串的定義\判別

對Σ*中的任何字符串t,若存在一條從某一初態結到某一終態結的道路,且這條路上所有弧的標記字依序連接成的串等於t,則稱t可為NFA M所接受,若M的某些初態結同時又是終態結,或存在一條從某個初態結到某個終態結的ε道路,則空字可為M所識別(接受)



DFA和NFA都是識別單詞的裝置,識別什么單詞?   T∈sigma*  就看有沒有從初態出發,’能到終態的一條通路.  要知道概念.

NFA確定化為DFA:子集構造法C(T_0,)   絕對會考.



- 多余狀態是指,從該自動機的開始狀態出發,任何輸入串都不能到達的那個狀態。
- 在有窮自動機中,兩個狀態s和t等價的條件是:
  - 一致性條件:即s和t必須同為終態或同為非終態
  - 蔓延性條件:即對所有輸入符號,s和t必須轉換到等價的狀態里。

最小化工作:消除多余,合並等價(狀態等價的兩個條件:一致性條件,蔓延新條件.  讓你證明S和T是否是終態或者非終態.   蔓延性:狀態S,T接收a,到達P/Q,如果P,Q滿足等價,那么S,T等價.  而且必須是所有接收符號到達)

等價狀態划分給你例子會做.他都當我們面寫了一遍,感覺肯定要考.

## 9.NFA->DFA,DFA->MFA(狀態等價定義與判別) -<u>Q2</u>

1. 設字母表={0,1},給出上的正規式r=(0|10)*,請完成以下任務:
a) 構造NFA N,使得L(N)=L(r);
b) 將NFA N確定化,得到最簡DFA M,使得L(M)=L(N);
c) 將DFA M最小化,得到MFA M`,使得L(M`)=L(M)。
(1)可以按照自己的理解構造NFA

 
 


 
 
 
#### 划分狀態集合成等價類的分割法(感覺肯定要考,他講了作業第二題的等價類划分)

1.先將M的狀態分成兩個子集:一個終態集,一個非終態集,得到一個初始划分P0;
2.再觀察划分P0中的每一個子集,把每一個子集中的在讀入輸入符號后轉向不等價狀態的狀態進一步划分,得到划分P1;
3.重復2中的工作,直到所得的划分中任意一個子集中的狀態都是不可划分的為止,即任意一個子集中的所有狀態都是等價的為止



## 10.FA->r ,  G->FA , G->r -Q2
 
 

作業題目
G1  S->0A|iB
A->1s|1

(2)應該從文法出發,構造,

------

# Chap4
####(判斷題-作業)
- 一個不含左遞歸文法提取左公共因子后所得一定是LL(1) -X
- 自頂向下,必須LL(1) -Y
- 每個文法都可改寫為LL(1)- X
- 一個語言文法唯一- X

## 1.自頂向下分析基本思想,確定的關鍵問題

,為解決關鍵問題給了三個集合的求法(要會求).   給你個文法,要會求.

## 2.First,Follow,Select集概念和求法
⑴設X∈(VN∪VT),FIRST(X)的構造 
①若X∈VT,則FIRST(X)={X}; 
②若X∈VN,其產生式為X→a…,a∈VT,則a∈FIRST(X);若它有產生式為X→ε,則ε∈FIRST(X); 
③如果它有產生式X→Y…,Y∈VN     則FIRST(Y)-{ε}∈FIRST(X);如果它有產生式X→Y1Y2…YK(其中,Y1,Y2,…Yi-1都是非終結符,且Y1,Y2,…,Yi-1     * =>ε),則FIRST(Yi)-{ε}∈ FIRST(X);
 如果Y1Y2…YK     ε,則ε∈ FIRST(X)。 
 
 
⑵ 設α∈(VN∪VT)*,α=X1X2…Xn,FIRST(α)的構造 
①若α=ε,顯然FIRST(α)={ε}; 
  ②若α≠ε,則FIRST(X1)-{ε}∈FIRST(α); 
  ③若X1X2…Xi-1 * =>ε ,則FIRST(Xi) -{ε} ∈ FIRST(α);     若X1X2…Xn * =>ε ,則ε∈ FIRST(α)。 
 
⑶設U∈VN,FOLLOW(U)的構造 
  ①若U是文法的識別符號,則$ ∈ FOLLOW(U); 
  ②若有產生式A→xUy,則 FIRST(y)-{ε} ∈ FOLLOW(U); 
  ③若有產生式A→xU,或 A→xUy,y * =>ε , 則FOLLOW(A) ∈ FOLLOW(U)。 
 
⑷集合SELECT(U→α)的構造 
① 當α不可空時SELECT(U→α)=FIRST(α) 
②當α可空時SELECT(U→α)=FIRST(α)∪FOLLOW(U)

## 3.LL(1)文法定義及判別.LL(k)的含義

## 4.非LL(1)文法的等價變換

## 5.LL(1)分析的實現(a.遞歸下降LL(1)分析; b.表驅動LL(1)分析)

**表驅動LL(1)分析-<u>Q4</u>**

如果是LL1,要會構造預測分析表(作業也做了)
要求掌握表驅動的LL(1)分析.(遞歸看一下就行).重點構造分析表.  用表格把分析畫出來.


 
 
 
 
------

# Chap 5,6

## 1.自底向上思想及關鍵問題,常用自底向上分析法

## 2.LR分析概述(對棧進行的操作)

1. **LR0  (只讓你掌握這個,最核心,做題目只涉及:直接給你個文法->DFA->構造LR0分析表->串分析過程)-Q5**

作業.給定拓展后的文法G如下:
0)S’->E
1)E->aA
2)E->bB
3)A->cA
4)A->d
5)B->cB
6)B->d
a)構造此文法的LR(0)項目集規范族,並給出識別活前綴的DFA;
b)構造其LR(0)分析表,並根據分析表說明該文法是否為LR(0)文法;
c)給出accd串的LR(0)分析過程。

 
 
 
2. SLR(1) (只要知道用什么辦法解決:沖突:往前看一個字符處理  LR(0)  移進-歸約沖突 )
3. LR(1)   (解決 SLR(1)  無效歸約(歸約產生式使用錯誤)
4. LALR1( LR(1)同心集分裂可能導致的狀態增多,存儲容量增大,使應用受到限制 )

## 3.項目,可歸前綴,活前綴.項目集的核 .項目類型沖突類型.

什么是項目,項目集,沖突類型,項目集的核,

- 可歸前綴:規范句型的前部分串

- 項目4種類型:移進,待約,歸約,接收

2種沖突:
1. 移進-歸約 沖突$$(A-?\alpha \dot  \alpha \beta ,B \rightarrow \gamma \dot)$$
2. 歸約-歸約 沖突

構造DFA從前面,往前移動的時候經過一個符號,后繼項目集的核是唯一項目嗎?關鍵看前面有多少個 點之后是B,如果是多個,后面不是一個(小題目)

------

# Chap 7,8,10

條件語句的翻譯(作業做了),條件語句給了以后翻譯成四元式,正確回填地址,  划分基本塊.

# 1.語義描述工具(屬性文法)
一個屬性文法包含一個上下文無關文法和一系列語義規則,這些語義規則附在文法的每個產生式上.

形式上講,一個屬性文法是一個三元組A=(G,V,F):一個上下文無關文法G,一個屬性的有窮集V,一個關於屬性的斷言或條件謂詞的有窮集F。每個屬性與文法的某個非終結符或終結符相聯。每個斷言與文法的某產生式相聯。如果對G的某一輸入串,A中的所有斷言對該輸入串的語法樹結點的屬性全為真,則該串是A語言的句子。編譯程序的靜態語義審查工作就是驗證關於所編譯的程序的斷言是否全部為真。

屬性分為兩類:繼承屬性和綜合屬性。在分析樹中,一個結點的綜合屬性值是從其子結點的屬性值計算出來的;而一個結點的繼承屬性值是由該結點兄弟結點和父結點的屬性值計算出來的。
注意:1)非終結符既可有綜合屬性也可有繼承屬性,但文法開始符號沒有繼承屬性;2)終結符只有綜合屬性,它們由詞法分析程序提供。


## 語法指導翻譯的概念
語法制導翻譯是指在語法分析過程中,完成附加在所使用的產生式上的語義規則描述的動作,從而實現語義處理。


## 程序正確,語言方面的要求?

滿足2個規則:結構上(語法規則),含義正確(語義規則).

## 2.L-屬性文法,S-屬性文法的概念.   結合LR分析的實現(書P168,感覺應該不會考)

- L-屬性文法通俗地講,是指文法符號可有綜合屬性,也可有繼承屬性,但某產生式右部符號的繼承屬性的計算只取決於該產生式該符號左邊符號的屬性(產生式左部符號只能是繼承屬性)
- S-屬性文法是L-屬性文法的特例,是指只含有綜合屬性的屬性文法。

S屬性結合LR 實現語法指導翻譯,如何作擴展:棧擴展,增加語義值棧,功能擴展(語法+語義分析,書上有表達式求值的例子.    求值這些東西要會做)

## 3.中間代碼常用形式
逆波蘭記號、三元式、四元式和樹形表示

## 4.條件語句翻譯.   四元式序列-Q3    . 基本塊划分
1.給出下面句:
   if  a<b and b<c then x:=x+1 else x:=x-1
1)    翻譯為等價的四元式序列,並正確填寫所有轉向地址,規定第一個四元式從地址(1)開始存放;,t1,_,x


基本塊的入口語句,嚴格地說就是:
A)程序的第一個語句;
B)條件轉移語句或無條件轉移語句的轉移目標語句;
C)緊跟在條件轉移語句后面的語句。

  1.  (j<,a,b,(3))  入口語句(程序的第一個語句)
  2. Jmp,_,_,(8)   入口語句(緊跟在條件轉移語句后面的語句)
  3. J<,b,c,(5)   入口語句(條件轉移語句或無條件轉移語句的轉移目標語句)
  4. Jmp,_,_,(8)  入口語句(緊跟在條件轉移語句后面的語句)
  5. +,x,1,t1     入口語句(條件轉移語句或無條件轉移語句的轉移目標語句)
  6. :=,t1,_,x
  7. Jmp,_,_,(10)
  8. _,x,1,t2,     入口語句(條件轉移語句或無條件轉移語句的轉移目標語句)
  9. :=,t2, ,x
  10. ...              入口語句(條件轉移語句或無條件轉移語句的轉移目標語句)

 
## 5.優化概念,優化時刻,級別,常用優化技術簡介.
優化,實質是對代碼進行等價變換,使得變換后的代碼運行結果與變換前代碼運行結果相同,而運行速度加快或占用存儲空間少,或兩者都有。

優化時間:    中間代碼生成之后和(或)目標代碼生成之后進行.


依據優化所涉及的程序范圍,可分為局部優化、循環優化和全局優化三個不同級別。局部優化是在只有一個入口、一個出口的基本程序塊上進行的優化;循環優化是對循環中的代碼進行的優化;全局優化是在整個程序范圍內進行的優化。


常用優化技術
1)刪除多余運算(刪除公共子表達式)
2)代碼外提
3)強度削弱
4)變換循環控制條件
5)合並已知量與復寫傳播
6)刪除無用賦值



 –小題目,應用題

------

# Chap 9



## 1.存儲分配策略. 對程序和語言的要求

知道概念:存儲分配條件:靜態,棧式動態,堆式動態,大概怎么做的.
每種對程序有什么要求,語言有什么要求.:考試填空題?如果一種語言的所有程序運行時的空間都可采用靜態分配策略,則要求這種程序設計語言必須不允許遞歸過程、不允許可變數組且不允許用戶自由申請和釋放空間。

## 2.棧式分配實現

棧:什么是活動記錄,給你程序結構,給你調用序列, 讓你畫出  空間??  畫出靜態動態漣.
 
- 活動記錄:一段連續的存儲區,用以存放過程的一次執行所需要的信息
- 控制鏈:也稱作老SP(又稱動態鏈),即調用該過程的那個過程的最新活動記錄的起點。-誰調用它的
存取鏈(又稱靜態鏈),指向包含該過程的直接外層過程的最新活動記錄的起始位置。-在哪定義的
## 3.參數傳遞

常用方法:傳值,傳地址.為什么有不同的結合方式,什么原因?:對實參的不同解釋:解釋為左值還是右值還是文本,對應:傳地址,傳名字,傳


形實參對應的方法分別有值調用、地址(引用)調用、名字調用和得結果等,即傳值、傳地址、傳名和得結果等。之所以存在不同的方法,源於一個表達式的表示是如何給予不同的解釋的。比如,在a[j]:=a[k]中,表達式a[k]表示一個值,而a[j]表示一個存儲位置,用於存放a[k]的值。通常術語左值指表達式代表的存儲,右值指存儲位置中含有的值。“左”和“右”來自賦值語句的“左”端和“右”端。參數傳遞方法的不同主要基於實參是表達一個右值、左值還是實參本身的文本(字)。


------



分量不輕.

填空15’’;判斷7’.簡答題20’.大題48'.

小題目在1,2,7,8,9章.大題目在23456.
---
##補充:不一定考
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM