編譯原理考點中概念整理


1.編譯程序構成:

P6圖1.10(回去加上)

2.編譯程序和解釋程序的區別:

  編譯程序是一個語言處理程序,它把一個高級語言程序翻譯成某個機器語言的匯編程序或二進制代碼程序,這個二進制代碼程序在機器上運行以生成結果。

  解釋程序接受某個語言的程序並立即運行這個源程序。它的工作模式是一個個的獲取、分析並執行源程序語句,一旦第一個語句分析結束,源程序便開始運行並生成結果。

3.詞法分析、語法分析、語義分析及其任務:

  詞法分析是編譯過程的第一個階段。這個階段的主要任務是從左到右一個字符一個字符的讀入源程序,對構成源程序的字符流進行掃描和分解,從而識別出一個個單詞。

  語法分析是編譯過程的第二個階段。語法分析的任務是在詞法分析的基礎上將單詞序列分解成各類語法短語。語法分析所依據的是語言的語法規則,即描述程序結構的規則。通過語法分析確定整個輸入串是否構成一個語法上正確的程序。

  語義分析是審查源程序有無語義錯誤,為代碼生成階段收集類型信息。

4.文法 句型 句子 短語

  文法:以有窮的集合刻畫無窮的集合的一個工具。是一類描述規則的語言。

  句型:G[S]是一個文法,如果符號串x是從識別符號推導出來的,則稱x是文法G[S]的句型。

  句子:若句型x僅由終結符組成,則稱x為G[S]的句子。

  短語:給定一個句型,其分析樹的邊緣成為該句型的一個短語。

5.文法的類型:

  0型文法:A→B,A中至少含有一個非終結符。也成為短語文法。“0型語言都是遞歸可枚舉的,反之遞歸可枚舉集必定是0型語言。”

  1型文法:A→B,|B|>=|A|(B→空除外)也稱為上下文有關的。

  2型文法:A→B,A是一個非終結符。也稱為上下文無關的。

  3型文法:A→aB|a (右線性) A→Ba|ao(左線性)。也成為正規文法。

6.可歸前綴 活前綴:

  可歸前綴:對於一個合法的句子而言,每次規約后得到的都是由已規約部分和輸入剩余部分合起來構成文法的規范句型,而用哪個產生式繼續規約僅取決於當前句型的前部,規范句型的這種前部稱作可歸前綴。

  活前綴:把在規范句型中形成可歸前綴之前包括可歸前綴在內的所有前綴都成為活前綴。

7.綜合屬性 繼承屬性:

  綜合屬性:對關聯於產生式A→a的語義動作 b:=f(c1,c2,...,ck),如果b是A的某個屬性,則稱b是A的一個綜合屬性。

  繼承屬性:對關聯於產生式A→a的語義動作 b:=f(c1,c2,...,ck),如果b是產生式右部某個文法符號X的某個屬性,則稱b是X的一個繼承屬性。

8.符號表作用:

  符號表自創建后便開始被用於收集符號(標識符)的屬性信息,不同階段會有不同的信息。

  在語義分析中,符號表所登記的內容是進行上下文語義合法性檢查的依據。

  在目標代碼生成階段,符號表是對符號名進行地址分配的依據。

9.靜態語義分析任務:

  編譯器在靜態語義分析階段收集程序結構(控制結構和數據結構)相關的語義信息,在此過程中同時進行靜態語義檢查。若程序可以順利通過靜態語義檢查,則部分語義信息會進一步用於中間或目標代碼生成。

  靜態語義檢查包括:控制流檢查、唯一性檢查、名字的上下文相關性檢查、類型檢查

10.存儲分配策略:

  靜態存儲分配:在編譯期間為對象分配存儲空間。要求在編譯期間就可確定數據對象的大小,同時還可以確定數據對象的數目。

  棧式存儲分配:運行棧數據空間的存儲和管理方式。它將數據對象的運行時存儲按照棧的方式來管理,常用於有效實現可動態嵌套的程序結構。因為是動態分配,所以運行的時候才能確定數據對象的存儲分配結果。(當數據對象的生存期與創建他的過程/函數執行期無關時不適合進行棧式存儲分配。)

  堆式存儲分配:可以在任意時刻以任意次序從數據段的堆區分配和分配數據對象的運行時存儲空間。 

11.過程活動記錄:

  過程活動記錄是指運行棧上的棧幀,他在函數/過程調用時被創建,在函數/過程運行過程中被訪問和修改,在函數/過程返回時被撤銷。棧幀包含局部變量、函數實參、臨時值(用於表達式計算的中間單元)等數據信息以及必要的控制信息。

12.Display表:

  記錄各嵌套層當前過程的活動記錄在運行棧上的起始位置(基地址)。

 

 

 

 

 

 

 

  

 


免責聲明!

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



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