編譯原理 學習記錄1 程式編譯過程

2021-07-29 11:13:13 字數 3071 閱讀 6653

前端:該階段的編譯工作主要依賴源程式,與目標機無關。

【語法分析】

在詞法分析基礎上,將單詞序列分解成各類語法短語(也稱語法單位,如:「程式」「語句」「表示式」)。可表示成語法樹(推導樹)。

通過語法分析,確定乙個輸入串是否構成乙個語法上正確的程式。

即:經語法分析可以得到乙個分析樹。

問:如何根據單詞序列構造語法分析樹?經過怎樣的語法分析?

【語義分析】

審查源程式是否含有語義錯誤,即是否符合語言規範,為**生成階段收集型別資訊。

如,判斷每個算符的運算物件型別是否符合語言規範:

在語法分析樹上增加語義處理結點,進行一些型別轉換。

問:依據語法分析樹中的算符型別,判斷該算符的運算物件型別是否符合該算符的語言規範?

【中間**生成】

中間**:一種結構簡單、含義明確的記號系統。(有些編譯程式不需要該過程)

如,類似「三位址指令」的「四元式」中間**:

(算符,運算物件1,運算物件2,結果)

問:是否是對符合語言規範的語法分析樹,進行一定規則的處理計算,得到對應處理結果,並記錄?

後端:依賴於目標機,而不依賴源語言。

【目標**生成】

目標**:由中間**變換成的,特定機器上的絕對指令**、可重定位的指令**、彙編指令**。

問:按照何種規則,將中間**(或者符合語言規範的語法分析樹)轉換成指令?

貫穿整個編譯過程:

【**管理】

編譯過程中源程式的各種資訊被保留在種種不同的**裡;

【出錯處理】

源程式中的錯誤出現,記錄錯誤性質和錯誤地點,縮小出錯影響,甚至自動糾正錯誤。

文法:

將擁有有窮或無窮語句的語言,通過制定有限規則有窮表示出來,嚴格定義句子的結構。

即:以有窮集合刻畫無窮集合的乙個工具。

匹配規則左端的符號,替換成規則右邊的符號串。(規則,也稱重寫規則、產生式或生成式,用於形式化表示句子)

文法描述的語言是該文法下一切句子的集合(句子只包含終結符,句型可包含非終結符)。

#文法的描述

【語法圖】

即語法描述圖,用來直觀易讀地描述語法規則

【ebnf】巴科斯-瑙爾正規化

【語義處理】

編譯中的語義處理,用於

檢查語法結構合法的程式是否真正有意義(審查每個語法結構的靜態語義——靜態語義分析或靜態審查);

翻譯成中間**,或者直接翻譯成目標**(翻譯)。

【屬性文法】

#屬性

編譯程式使用的語法樹的結點,可以用「型別」「值」「儲存位置」等來描述它。

每個屬性與文法中的 某個非終結符或終結符相關聯;

每個斷言與文法中的 某個產生式相關聯。

語義規則與產生式相關聯。

問:產生式與語義規則有何種聯絡?在乙個文法中的作用是?

問:如何判斷某個句子是否屬於該文法描述的語言?

答:針對某一輸入串(句子)而言,屬性文法中所有斷言對該輸入串的語法樹結點的屬性全為真,那麼,這個句子就是在該語言中的。

【語法制導翻譯】

基於屬性文法的處理過程,即語法制導翻譯

對單詞符號串進行語法分析,構造語法分析樹,根據需要構造屬性依賴圖

遍歷語法樹,並在語法樹各結點處,按語義規則進行計算。

(在語法制導的定義中,一條語義規則完成乙個計算屬性值的動作。對於乙個終結符,只使用綜合屬性,且其屬性值由詞法分析器提供,通常不計算其屬性值)

tip:關於綜合屬性和繼承屬性的理解

繼承屬性是 從上而下傳遞資訊。綜合屬性自下而上傳遞資訊。

終結符只有綜合屬性,非終結符既有綜合屬性也可有繼承屬性。

綜合屬性可以在分析輸入符號串的同時自下而上的計算。

問:什麼是屬性依賴圖?如何構造屬性依賴圖?

答:屬性依賴圖是乙個有向圖,用於描述語法分析樹中,各屬性和屬性間的相互依賴關係。

具體如何構造參看屬性依賴圖的構造演算法

為分析樹中的每個結點的文法符號的每個屬性,建立乙個結點(為文法符號的各屬性建立結點);

依據分析樹中每個結點所用產生式對應的每乙個語義規則,

將該產生式文法符號的屬性結點,用一條有向邊連線起來(根據產生式對應語法規則,構造各屬性間的有向邊)。

問:屬性依賴圖的作用是什麼?

答:根據屬性依賴圖的拓撲排序,可以得到計算語義規則的順序

按照這個拓撲排序得到的語義規則計算順序進行計算,就可以得到輸入串的翻譯

問:如何進行屬性計算?

樹遍歷:採用某種遍歷方法遍歷語法樹,直至計算出各個屬性(最常用的是深度優先遍歷,從左到右遍歷的方法)。

一遍掃瞄:在語法分析的同時計算屬性值(不是先構建語法分析樹,再進行屬性計算)。

編譯原理 學習記錄4

直接遞迴 呈現出u x uy u rightarrow xuy u xu y形式的文法產生式 間接遞迴 具有u xu yu mathop rightarrow limits xuy u xuy 形式的推導 產生式呈u u yu rightarrow uy u uy 形式如果是經過多步推導得到,則稱之...

編譯原理 學習記錄11

上回,為了解決移進 規約時的幾個問題,引入了幾個定義 短語 設有文法g z w xuy是它的乙個句型,如果有 z xu yz mathop rightarrow limits xuy z xuy 並且u uu mathop rightarrow limits u u u 則稱句型xuy中子串u為句型...

編譯原理 學習記錄6

正規集 字母表 sigma 上的正規表示式e,所描述的語言集合l e 從e到l e 的變換有如下規則 el e epsilon empty a e 1e 1 e1 l e 1e 1 e1 e 1e 2e 1e 2 e1 e2 l e 1e 1 e1 l e 2e 2 e2 e 1e 1 e1 e 2...