1. 編譯原理:真子串、前綴的問題
Let X be a set, and w∈X? be a word, i.e. an element of the free monoid on X. A word v∈X? is called prefix of w when a second word z∈X? exists such thatx=vz. A proper prefix of a word u is a prefix v of u not equal to u (sometimes v is required to be non-empty).。
2. 編譯原理全部的名詞解釋
書上有別那么懶!.編譯過程的六個階段:詞法分析,語法分析,語義分析,中間代碼生成,代碼優化,目標代碼生成解釋程序:把某種語言的源程序轉換成等價的另一種語言程序——目標語言程序,然后再執行目標程序.解釋方式是接受某高級語言的一個語句輸入,進行解釋并控制計算機執行,馬上得到這句的執行結果,然后再接受下一句.編譯程序:就是指這樣一種程序,通過它能夠將用高級語言編寫的源程序轉換成與之在邏輯上等價的低級語言形式的目標程序(機器語言程序或匯編語言程序).解釋程序和編譯程序的根本區別:是否生成目標代碼句子的二義性(這里的二義性是指語法結構上的.):文法G[S]的一個句子如果能找到兩種不同的最左推導(或最右推導),或者存在兩棵不同的語法樹,則稱這個句子是二義性的.文法的二義性:一個文法如果包含二義性的句子,則這個文法是二義文法,否則是無二義文法.LL(1)的含義:(LL(1)文法是無二義的; LL(1)文法不含左遞歸)第1個L:從左到右掃描輸入串 第2個L:生成的是最左推導1 :向右看1個輸入符號便可決定選擇哪個產生式某些非LL(1)文法到LL(1)文法的等價變換: 1. 提取公因子 2. 消除左遞歸 文法符號的屬性:單詞的含義,即與文法符號相關的一些信息.如,類型、值、存儲地址等.一個屬性文法(attribute grammar)是一個三元組A=(G, V, F)G:上下文無關文法.V:屬性的有窮集.每個屬性與文法的一個終結符或非終結符相連.屬性與變量一樣,可以進行計算和傳遞.F:關于屬性的斷言或謂詞(一組屬性的計算規則)的有窮集.斷言或語義規則與一個產生式相聯,只引用該產生式左端或右端的終結符或非終結符相聯的屬性.綜合屬性:若產生式左部的單非終結符A的屬性值由右部各非終結符的屬性值決定,則A的屬性稱為綜合屬繼承屬性:若產生式右部符號B的屬性值是根據左部非終結符的屬性值或者右部其它符號的屬性值決定的,則B的屬性為繼承屬性.(1)非終結符既可有綜合屬性也可有繼承屬性,但文法開始符號沒有繼承屬性.(2) 終結符只有綜合屬性,沒有繼承屬性,它們由詞法程序提供.在計算時: 綜合屬性沿屬性語法樹向上傳遞;繼承屬性沿屬性語法樹向下傳遞. 語法制導翻譯:是指在語法分析過程中,完成附加在所使用的產生式上的語義規則描述的動作.語法制導翻譯實現:對單詞符號串進行語法分析,構造語法分析樹,然后根據需要構造屬性依賴圖,遍歷語法樹并在語法樹的各結點處按語義規則進行計算.中間代碼(中間語言)1、是復雜性介于源程序語言和機器語言的一種表示形式.2、一般,快速編譯程序直接生成目標代碼.3、為了使編譯程序結構在邏輯上更為簡單明確,常采用中間代碼,這樣可以將與機器相關的某些實現細節置于代碼生成階段仔細處理,并且可以在中間代碼一級進行優化工作,使得代碼優化比較容易實現.何謂中間代碼:源程序的一種內部表示,不依賴目標機的結構,易于代碼的機械生成.為何要轉換成中間代碼:(1)邏輯結構清楚;利于不同目標機上實現同一種語言. (2)便于移植,便于修改,便于進行與機器無關的優化.中間代碼的幾種形式:逆波蘭記號 ,三元式和樹形表示 ,四元式 符號表的一般形式:一張符號表的的組成包括兩項,即名字欄和信息欄. 信息欄包含許多子欄和標志位,用來記錄相應名字和種種不同屬性,名字欄也稱主欄.主欄的內容稱為關鍵字(key word).符號表的功能:(1)收集符號屬性 (2) 上下文語義的合法性檢查的依據: 檢查標識符屬性在上下文中的一致性和合法性.(3)作為目標代碼生成階段地址分配的依據符號的主要屬性及作用:1. 符號名 2. 符號的類型 (整型、實型、字符串型等))3. 符號的存儲類別(公共、私有)4. 符號的作用域及可視性 (全局、局部) 5. 符號變量的存儲分配信息 (靜態存儲區、動態存儲區)存儲分配方案策略:靜態存儲分配;動態存儲分配:棧式、堆式. 靜態存儲分配1、基本策略在編譯時就安排好目標程序運行時的全部數據空間,并能確定每個數據項的單元地址.2、適用的分配對象:子程序的目標代碼段;全局數據目標(全局變量)3、靜態存儲分配的要求:不允許遞歸調用,不含有可變數組.FORTRAN程序是段結構,不允許遞歸,數據名大小、性質固定. 是典型的靜態分配動態存儲分配 1、如果一個程序設計語言允許遞歸過程、可變數組或允許用戶自由申請和釋放空間,那么,就需要采用動態存儲管理技術.2、兩種動態存儲分配方式:棧式,堆式棧式動態存儲分配分配策略:將整個程序的數據空間設計為一個棧. 【例】在具有遞歸結構的語言程序中,每當調用一個過程時,它所需的數據空間就分配在棧頂,每當過程工作結束時就釋放這部分空間.過程所需的數據空間包括兩部分一部分是生存期在本過程這次活動中的數據對象.如局部變量、參數單元、臨時變量等;另一部分則是用以管理過程活動的記錄信息(連接數據).活動記錄(AR) 一個過程的一次執行所需要的信息使用一個連續的存儲區來管理,這個區 (塊)叫做一個活動記錄.構成1、臨時工作單元;2、局部變量;3、機器狀態信息;4、存取鏈;5、控制鏈;6、實。
轉載請注明出處華閱文章網 » 編譯原理串句子詞句子集