編譯原理總結(《編譯與反編譯技術》)

2021-10-13 21:24:57 字數 3208 閱讀 8832

詞法分析

語法將語義分析放到語法分析中

中間語言的表示與語法制導翻譯例項

符號表優化

目標**生成

目標**執行

什麼是編譯程式?

把某一種高階語言程式等價的轉換成另一種低階語言程式的程式

編譯過程都包括哪些階段?

詞法分析、語法分析、語義分析與中間**生成、中間**優化、目標**生成

畫出編譯程式的結構框圖.

符號表管理程式——詞法分析器 ————————錯誤處理程式

語法分析器

語義分析+中間**生成器

優化器目標**生成器

編譯程式和解釋程式的區別是什麼?

解釋程式或者直接一邊解釋一邊執行源程式,或者將源程式翻譯成某種中間表示形式後再加以執行。控制權在直譯器;

編譯程式則是將源程式翻譯成目標語言程式,然後在計算機上執行目標程式,控制權在目標程式。

遍和階段的概念,為什麼要用遍?

遍:對源程式或中間表示從頭到尾掃瞄一次,並作有關的加工處理,形程新的中間結果或目標程式

一遍可有若干階段,乙個階段可有若干遍

分成若干遍為了讓程式結構更清晰,使程式可讀性更強。

單詞分類、詞法分析的輸入輸出

分類:基本字、識別符號、常數、運算子、界符

輸入:源程式 輸出:單詞符號

單詞構詞規則

表示形式:單詞種別+單詞符號屬性值

單詞種別常用整數編碼表示:

1、若乙個種別只有乙個單詞符號:

則種別編碼就代表該單詞符號,

一般來說,基本字、運算子和界符都是一符一種。·若乙個種別有多個單詞符號,

2、若乙個種別多個單詞符號:

則對於每個單詞符號,給出種別編碼和屬性資訊。

識別符號單列一種:屬性就是存放它的有關資訊的指標。

常數按型別分種:常數的值則表示成標準的二進位制形式。

文法和語言的概念及其相互推導

語言:乙個字母表的任意子集l稱為該字母表的乙個語言,語言中的乙個值稱為乙個句子。

文法:用來描述語言語法結構的形式規則。

文法的語言:文法產生的所有終結符串構成的集合。

最左和最右推導,求語法樹

最左推導:每次替換最左非終結符

最右推導:每次替換最右非終結符

語法樹:每個節點是vt、vn,根節點是s、葉子節點是vt

二義性問題

文法二義性:乙個文法某個句子存在兩棵語法樹。

語言二義性:存在乙個文法有二義性問題。

文法分類:

如思維導圖

0、1、2、3型

正規表示式、正規集:

對字母表,若a是字母,a是乙個正規集

正規集的交、並、結合等都是正規集

自動機簡介:乙個模型,逐個讀取輸入的符號,依據輸入跳轉到狀態。

dfa和nfa的構造

1、正規式——dfa

2、nfa確定化

3、dfa最小化

輸入輸出

輸入:單詞符號

輸出:語法分析樹

自上而下的問題以及解決辦法

問題:左遞迴、回溯、虛假匹配、分析不成功,不知道出錯的位置、效率低,代價高

解決:左遞迴變右遞迴、提取左因子消除回溯、first+follow、ll(1)、**分析表

自下而上的核心問題

識別可規約串進行規約

規範歸約與最右推導

規範規約:最右推導逆過程

規範規約推導的句型:規範句型

規範規約實質:出現控制代碼,就規約

短語、直接短語、句型、控制代碼

短語:語法樹子樹

直接短語:語法樹同一層的短語

句型:含vt或vn的字串

控制代碼:最左直接短語

字首、活字首、有效專案

字首:字串字首

活字首:控制代碼的乙個字首

有效專案:活字首a推導出的字串b,b是a的有效專案

專案集規範族:一堆專案,專案通過->構成乙個dfa,dfa可以識別活字首

語法制導翻譯

將靜態語義檢查與中間**生成結合到語法分析中進行。

語法制導定義

在上下文無關文法的基礎上,為vt、vn配備了一組屬性 ,為 vn->vt配備了一套語義規則。

屬性文法

語義規則函式不具有***的語法制導定義。

非***:只計算屬性值

s-l屬性文法

綜合屬性:在分析樹節點n上的非終結符a,其綜合屬性只能通過n的子節點或n本身的屬性定義。

繼承屬性:在分析樹節點n上的非終結符a,其繼承屬性只能通過n的兄弟、父節點或n本身的屬性定義。

s屬性文法:乙個語法制導定義只使用綜合屬性。

l屬性文法:乙個語法制導定義只使用繼承屬性。

翻譯模式

將屬性(值)與文法符號(vt、vn)相關聯,並將語義規則用「{}」虧起來,插入產生式右部的合適位置來描述語言結構。

抽象語法樹

在語法樹中去掉對翻譯不必要的資訊,從而獲得更有效的源程式中間標識,這種經變換後的語法樹成為抽象語法樹。

為什麼要用中間語言

便於進行與機器無關的**優化工作

編譯一致

使程式的結構在邏輯上簡單明確

中間語言表示形式

逆波蘭表示式、三元式、間接三元式、四元式

語句的翻譯例項

說明語句的翻譯

賦值語句的翻譯

控制語句的翻譯

符號表構成

名稱欄資訊欄:記錄不同屬性(型別、種屬、大小、儲存指標)

符號表作用

1、登記識別符號屬性資訊

2、查詢符號屬性,檢查符號上下文語義合法性

3、作為目標**生成位址分配依據

目的:產生更高效的**

原則:等價、有效、經濟

常用技術:

如思維導圖

基本塊概念

程式中乙個順序執行的語句序列,其中只有乙個入口和乙個出口。入口是第乙個語句,出口是最後乙個語句

表示形式

機器語言,組合語言,待裝配機器語言模組

各個形式的特點

活動記錄

一段連續的儲存區,用以存放過程的一次執行所需動態資訊

儲存分配策略

靜態儲存分配

動態儲存分配

棧式儲存分配

1、靜態鏈和活動記錄

2、巢狀層次顯示表display

堆式儲存分配

允許資料物件自由分配和釋放

反編譯 PB反編譯 2020 PB反編譯大師

1 反編譯powerbuilder編譯後的pbd檔案,支援版本5,6.5,7,8,9,10,10.5,11,11.5,12,12.5,12.6,2017,2018,2019,pkb2.5,共計16個版本。2 主要用於工程文件丟失後的恢復,即工程恢復。3 在此demo中釋放出全部版本作為測試,囊括了5...

Python反編譯 pyc檔案反編譯

最近一直在研究python反編譯的問題,以前的decompyle只支援到2.2就不再公升級了,而且國內的depython 也不知道怎麼回事,上面說是支援2.4 2.5,但是每次我提交後,返回的內容都是空的。在網上找了乙個專案,自己改了很長時間,總算有點起色了,大部分的2.5特性都是支援的,只是2.5...

Android 反編譯方法 防止反編譯方法

android反編譯方法 android 防止反編譯的方法 1.自己的apk要簽名 簽名之後的apk 反編譯之前與之後的源 就會變成這樣 之前 public class mainactivity extends activity override public boolean oncreateopt...