詞法分析
語法將語義分析放到語法分析中
中間語言的表示與語法制導翻譯例項
符號表優化
目標**生成
目標**執行
什麼是編譯程式?
把某一種高階語言程式等價的轉換成另一種低階語言程式的程式
編譯過程都包括哪些階段?
詞法分析、語法分析、語義分析與中間**生成、中間**優化、目標**生成
畫出編譯程式的結構框圖.
符號表管理程式——詞法分析器 ————————錯誤處理程式
語法分析器
語義分析+中間**生成器
優化器目標**生成器
編譯程式和解釋程式的區別是什麼?
解釋程式或者直接一邊解釋一邊執行源程式,或者將源程式翻譯成某種中間表示形式後再加以執行。控制權在直譯器;
編譯程式則是將源程式翻譯成目標語言程式,然後在計算機上執行目標程式,控制權在目標程式。
遍和階段的概念,為什麼要用遍?
遍:對源程式或中間表示從頭到尾掃瞄一次,並作有關的加工處理,形程新的中間結果或目標程式
一遍可有若干階段,乙個階段可有若干遍
分成若干遍為了讓程式結構更清晰,使程式可讀性更強。
單詞分類、詞法分析的輸入輸出
分類:基本字、識別符號、常數、運算子、界符
輸入:源程式 輸出:單詞符號
單詞構詞規則
表示形式:單詞種別+單詞符號屬性值
單詞種別常用整數編碼表示:
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...