原创 第五章 語法制導翻譯及中間代碼生成(1)

      由於編譯程序工作的最終目標是將源程序翻譯成可供計算機直接執行的目標程序,所以從整個編譯過程來看,詞法分析與語法分析僅僅是編譯程序工作的一小部分。在早期的一些編譯程序中,是在語法分析的基礎上根據源程序中各語法成分的語義,直接產生

原创 第六章 符號表(1)

      在編譯程序工作的過程中,需要不斷收集、記錄和使用源程序中一些語法符號(簡稱爲符號)的類型和特徵等相關信息。爲方便起見,一般的做法是讓編譯程序在其工作過程中,建立並保持一批表格,如常數表、變量名錶、數組名錶、過程或子程序名錶及標

原创 const放在函數頭和放在函數參數表和函數體之間的區別

1、const放在函數頭。例如: const int Fun1();      const放在函數頭表示該函數的返回值是不可修改的。 2、const放在函數參數表和函數體之間。例如:int Fun1() const ;       

原创 返回值優化

      通過傳值方式返回要創建新對象時,應注意使用的形式,例如在operator+: return Integer(left.l / right.l) ;      咋看起來這像是一個“對一個構造函數的調用”,其實並非如此。這是臨時對

原创 第四章 語法分析和語法分析程序(1)

       一個字符串形式的源程序經詞法分析之後,即被轉換爲一串單詞符號,且其中的每一單詞都按它們的內部形式來編碼。        語法分析程序以單詞串形式的源程序作爲輸入或分析的對象。它的基本任務是:根據語言的語法規則(即根據描述該語

原创 私有派生

基類的私有派生指使用關鍵字private。例如: #include <iostream> using namespace std ; class Father { public: void room() { cout << "父親的

原创 第七章 運行時的存儲組織和分配(1)

        編譯程序在其工作過程中,必須爲源程序中所出現的一些量(常量、變量及某些數組等等)分配運行時的存儲空間。存儲分配方案的選擇是否得當,將關係到計算機資源的合理使用,從而也將對編譯系統的解題能力產生一定的影響。        存

原创 第一章 編譯原理緒論(4)——編譯程序的組織

       圖1(文章《編譯原理緒論——編譯過程的邏輯結構》中的圖1)所示的編譯程序的邏輯結構,是指它們之間的邏輯關係,而不一定是執行時間上的先後順序。事實上,可按不同的執行流程來組織上述各部分的工作,這在很大程度上依賴於編譯過程中對源

原创 第七章 運行時的存儲組織和分配(2)——存儲組織

1、存儲組織 1.1、運行時內存的劃分   在運行時,系統將爲目標程序分配一塊存儲空間,這個存儲空間按用途可以劃分爲下面幾個部分: ( 1 )、目標程序區,用來存放所生成的目標程序; ( 2 )、靜態數據區,用來存放編譯程序本身就可以確定

原创 基類對象和派生類對象之間的賦值關係

        基類對象和派生類對象之間的賦值關係具體是指:基類的對象可不可以賦值給子類對象或者子類對象可不可以賦值給基類對象。         一般來說,只有派生類的對象可以賦值給基類的對象,反之,則不可以。例如: Father a ;

原创 位域

       有些信息在存儲時,並不需要佔用一個完整的字節(一個字節是8位), 而只需佔幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。爲了節省存儲空間,並使處理簡便,C語言又提供了一種數據結構,稱爲

原创 第三章 詞法分析及詞法分析程序(1)

       編譯程序的整個工作過程,是從接收字符串形式的源程序文件作爲輸入,並對此輸入串進行詞法分析開始的。詞法分析的任務就在於依次掃視輸入串中的各個字符,並從其中識別出一系列具有獨立意義的基本語法單位—單詞(token,也稱爲記號)。

原创 c++空類實例大小不是0原因

《深度探索c++對象模型》中是這樣說的:那是被編譯器插進去的一個char ,使得這個class的不同實體(object)在內存中配置獨一無二的地址。也就是說這個char是用來標識類的不同對象的        初學者在學習面向對象的程序設計

原创 系統是如何調用虛函數

                                              系統是如何調用虛函數的?        每個對象創建虛函數時,對象都記得記錄這個虛函數,因此編譯器建立一個叫做T表的虛函數表。每個對象都有一個指向

原创 C/C++中的聯合 union

       聯合(union)在C/C++裏面見得並不多,但是在一些對內存要求特別嚴格的地方,聯合又是頻繁出現,那麼究竟什麼是聯合、怎麼去用、有什麼需要注意的地方呢?就這些問題,我試着做一些簡單的回答,裏面肯定還有不當的地方,歡迎指出!