日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

传统编译原理

發(fā)布時(shí)間:2023/11/28 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传统编译原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

傳統(tǒng)編譯原理
計(jì)算機(jī)程序編譯原理,把程序員員容易理解的高級語言程序代碼流,翻譯成計(jì)算機(jī)可執(zhí)行的機(jī)器指令代碼流。可以使用“一斷、二比、三譯”形象說明實(shí)質(zhì)。
1、斷。按照語言的語法規(guī)則掃描斷詞,結(jié)合文法詞典,把程序字符串流,分解成為計(jì)算機(jī)語言能夠識別的基本單元(標(biāo)識詞、運(yùn)算符)。
2、比。從程序流中找出擴(kuò)展標(biāo)識詞的定義,建立標(biāo)識詞結(jié)構(gòu),放入文法詞典,服務(wù)于新的定義和函數(shù)程序代碼的編譯。程序語句、表達(dá)式里面使用的標(biāo)識可以從詞典中比較找到。
3、譯。把函數(shù)程序文本字符串流中的算術(shù)表達(dá)式、賦值語句、控制語句,翻譯成為計(jì)算機(jī)機(jī)器語言二進(jìn)制代碼流。
4、組裝函數(shù)翻譯后的二進(jìn)制代碼流,明確數(shù)據(jù)空間地址和大小,生成計(jì)算機(jī)裸機(jī)或操作系統(tǒng)可以執(zhí)行目標(biāo)代碼。


1、 翻譯——將語言L1轉(zhuǎn)換為邏輯上等價(jià)的語言L2
  編譯——將源程序(高級語言)翻譯成目標(biāo)程序(低級語言或機(jī)器語言)
  匯編——將低級語言翻譯成機(jī)器語言
  解釋(程序)——逐條翻譯語句,并立即執(zhí)行結(jié)果

2、 單詞——關(guān)鍵字、標(biāo)識符、常數(shù)、界符、運(yùn)算符
    單詞 = (單詞種別碼,單詞自身值)
  語法單位——短語、表達(dá)式、語句、子程序、程序
  中間代碼——四元式、三元式、逆波蘭式、樹式

3、 初等數(shù)據(jù)類型——邏輯、數(shù)值、字符、指針
  語法:是一組規(guī)則,規(guī)定了語言的形式結(jié)構(gòu),包括單詞結(jié)構(gòu),句子結(jié)構(gòu),程序結(jié)構(gòu)等。
     語法={詞法規(guī)則+句法規(guī)則}
  語義:也是一組規(guī)則,規(guī)定了各語法單位的確切含義。
  語句
    說明性語句——用于定義各種數(shù)據(jù)類型,變量,函數(shù)或過程.
    可執(zhí)行性語句——用于描述數(shù)據(jù)處理的過程和動(dòng)作
4、 參數(shù)傳遞——傳名、傳地址、傳值

5、正規(guī)式
6、狀態(tài)轉(zhuǎn)換圖

是一有向圖,由有限個(gè)結(jié)點(diǎn)及有向邊連接而成;
  每個(gè)結(jié)點(diǎn)稱為狀態(tài);
  狀態(tài)圖有一個(gè)初態(tài),多個(gè)終態(tài);
  每條邊上有相應(yīng)的字符.
  狀態(tài)轉(zhuǎn)換圖用于表示單詞結(jié)構(gòu)從狀態(tài)轉(zhuǎn)換圖的初態(tài)到終態(tài)間,每條路徑上字符的連接,就構(gòu)成了該狀態(tài)圖的合法單詞.
  可以表示單詞規(guī)則,也可以用于識別單詞
  由三種結(jié)構(gòu)構(gòu)成 —— 分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、終結(jié)點(diǎn)
7、 確定有限自動(dòng)機(jī)(DFM)和非確定有限自動(dòng)機(jī)(NFM)
  DFAM=(S, ∑, f,s0,Z)
  狀態(tài)集、符號集、單/多值映射函數(shù)、初態(tài)(1個(gè))、終態(tài)集
  DFAM 是 NFAM 的特例

DFAM案例:
 
   
NFAM案例:


8、 可識別單詞的全體記為:L(M)
  設(shè) V 為字集,且 V0={ε}, 令 V*=V0∪V1 ∪ V2 ∪… ,稱V* 為V的閉包。 V+= V* - {ε}, 稱V+ 為V的正則閉包。
9、 句子——由文法的開始符號出發(fā)通過0步或若干步推導(dǎo)產(chǎn)生的終結(jié)符號串
     若 S=>α,則α ∈VT *
   句型——由文法的開始符號出發(fā)通過0步或若干步推導(dǎo)產(chǎn)生的符號串
     若 S=>α,則α ∈(VT ∪ VN) *
10、語言——所有句子的集合,記為L(G)={α |S=>α, α ∈VT * }
    一個(gè)語言的文法是不唯一的
11、句柄——一個(gè)句型的最左直接短語
   簡單(直接)短語
   短語
   素短語——至少含有一個(gè)終結(jié)點(diǎn),且除自身外不含有更小的素短語

12、 上下文無關(guān)文法——它定義的語法單位獨(dú)立于該語法單位可能出現(xiàn)的環(huán)境
  自然語言不是上下文無關(guān)文法,程序語言是上下文無關(guān)文法
  G =(VT,VN,S,P)
  終結(jié)符集、非終結(jié)符集、開始符號、產(chǎn)生式

13、最左推導(dǎo)——每次直接推導(dǎo),對句型的最左非終結(jié)符實(shí)行替換
   最右推導(dǎo)——每次直接推導(dǎo),對句型的最右非終結(jié)符實(shí)行替換
   解決語法二義性:E—>i*i+i

14、語法分析方法_自下而上
  根據(jù)文法,對輸入字串進(jìn)行歸約,若能正確地歸約 為文法的初始符號,則表示輸入字串是合法的。典型方法是算符優(yōu)先分析法。
  規(guī)范歸約(歸約棧)——最右推導(dǎo)的逆過程(算符優(yōu)先分析法)
    (1)優(yōu)先關(guān)系表
?
o   aQb a=b
o   aQ a<FIRSTVT(Q)
o   Qb LASTVT(Q)>b
    (2)存在的問題
      1.文法的左遞歸
      2.文法的回溯

15、語法分析方法_自上而下
   從文法的初始符號進(jìn)行推導(dǎo),若能推導(dǎo)出與輸入字串相同的句子,則表示輸入字串是合法的。 典型方法是遞歸下降分析法。
   規(guī)范推導(dǎo)——最左推導(dǎo)的逆過程(遞歸下降分析法)

16、歸約串——棧頂形成的某產(chǎn)生式候選
   可歸約串(最左素短語)——可正確歸約的歸約串
17、語法樹 —— 可以表示同一句型的多種推導(dǎo),是多種推導(dǎo)的共性抽象;但未必代表了同一句型的所有推導(dǎo)
  LL(1)文法(無回溯文法)——無二義性、無左遞歸
  LR(0)<SLR(1)<LALR(1)<LR(1)


       
18、消除左遞歸
  若 P→P α | β ,則 P→ β P ’, P’ → αP ’ | ε
19、 符號表的作用:用于紀(jì)錄各種名字的信息, 并提供給編譯各階段使用
    種屬、類型、地址、長度、形參標(biāo)志、其它信息

20、中間代碼的特點(diǎn): 結(jié)構(gòu)簡單,功能明確,易于優(yōu)化,易于翻譯。
21、語法制導(dǎo)翻譯——在語法分析的每次歸約或推導(dǎo)時(shí),根據(jù)產(chǎn)生式的語義進(jìn)行翻譯的一種方法。
一些基本操作:
? newtemp( )   產(chǎn)生一臨時(shí)變量;
? gen(操作符,操作數(shù)1,操作數(shù)2,結(jié)果)    填入四元式表;
? fill( i,屬性)   填入符號表;
? entry( i )   查符號表,返回 i 在符號表中的位置;
? backpatch( m,n)    把 n 填入 四元式表第 m 個(gè)四元式中;
 
   
 
 
                  
22、語義動(dòng)作——描述了一定的輸入和一定的輸出之間的對應(yīng)關(guān)系。
24、基本塊——順序執(zhí)行的中間代碼序列,僅包含一個(gè)入口四元式和一個(gè)出口四元式。第一條四元式為入口四元式,最后一條四元式為出口四元式,中間部分不含轉(zhuǎn)移四元式。
 四元式程序中所有基本入口四元式,包括:
a) 程序的第一條四元式;
b) 轉(zhuǎn)移語句轉(zhuǎn)移到的四元式;
c) 條件語句之后的第一條四元式.
 基本塊內(nèi)可以進(jìn)行以下幾種優(yōu)化:(優(yōu)化手段: DAG )
    合并已知量,刪除多余運(yùn)算(公共子表達(dá)式),刪除無用賦值。

25、回邊——若有邊b->a且a是b的必經(jīng)結(jié)點(diǎn),則b->a是回邊
  控制流程圖——具有唯一首結(jié)點(diǎn)的有向圖,簡稱為流圖
  必經(jīng)結(jié)點(diǎn)——從流圖首結(jié)點(diǎn)出發(fā)到達(dá)b的通路都必須經(jīng)過點(diǎn)a,則稱a是b的必經(jīng)結(jié)點(diǎn),記a DOM b
  必經(jīng)結(jié)點(diǎn)集——D(n)
  
  
26、可歸約流圖——流圖中去除回邊后,構(gòu)成無環(huán)路流圖
   循環(huán)——對于回邊b->a,包括a、b在內(nèi)的,有通路到b而不經(jīng)過a的所有結(jié)點(diǎn)構(gòu)成一個(gè)循環(huán)
    (1) 結(jié)點(diǎn)序列為強(qiáng)連通的;(任意兩點(diǎn)間都有通路,且通路上的結(jié)點(diǎn)都屬于結(jié)點(diǎn)序列)
    (2) 結(jié)點(diǎn)序列中僅有一個(gè)入口結(jié)點(diǎn).
   三種循環(huán)優(yōu)化:代碼外提,強(qiáng)度削弱,刪除歸納變量。
27、引用–定值集ud[A]
    如在 u 處引用了變量 A,則凡能到達(dá) u 的 A 的所有定值點(diǎn),構(gòu)成了 A 在 u 處的引用–定值集 ,記為: ud[A].
?
o   IN[B] : 代表到達(dá)基本塊 B 入口點(diǎn)時(shí)的各變量的所有定值點(diǎn)集
o   OUT[B]:代表到達(dá)基本塊 B 出口點(diǎn)時(shí)的各變量的所有定值點(diǎn)集
o   GEN[B]:表示 B 中所定值的且到達(dá) B 之后的定值點(diǎn)集
o   KILL[B]: 表示屬于 B 外的定值點(diǎn),而這些定值點(diǎn)所定值的變量,在B中又被重新定值
這幾個(gè)集合滿足如下方程:
?
o   OUT[B]=(IN[B] - KILL(B)) ∪ GEN[B]
o   IN[B] = OUT[p1] ∪ OUT[p2] ∪… ∪ OUT[pk]
o   p1 , p2… pk 為B的前趨結(jié)點(diǎn)
   該方程即為到達(dá)–定值方程,求解該方程,得到IN[B]。
28、不變運(yùn)算——對于循環(huán)中的語句 A:= B op C, 若 B 及 C 均為常量,或者為循環(huán)中未改變的變量, 那么每次循環(huán) A的值都一樣,稱A:= B op C為不變運(yùn)算.
    運(yùn)算對象是常量;
    運(yùn)算對象的定值點(diǎn)均在循環(huán)外;
    運(yùn)算對象的再循環(huán)內(nèi)的定值點(diǎn)均已被標(biāo)記為不變運(yùn)算;
29、基本歸納變量——若循環(huán)中對 B 只有唯一的遞歸賦值 B:=B+C 且 C 為循環(huán)不變量,則稱 B 為循環(huán)的基本歸納變量
  歸納變量——若B為基本歸納變量,而A在循環(huán)中的定值可以化歸為B的線性函數(shù): A:=C1*B+C2(C1 , C2為循環(huán)不變量),則稱A 為歸納變量,并稱 A與 B同族
  待用信息表——指針指向下一個(gè)引用的地方
    設(shè)四元式(i) 對A定值且到達(dá)四元式( j) ,四元式 ( j) 中引用 A ,則稱 j 是四元式 i 的變量A 的待用信息; 滿足上述定義的所有 j, 構(gòu)成了 A 的待用信息集。
30、目標(biāo)代碼
  生成原則:
    (1) 生成的目標(biāo)代碼短而高效;
    (2) 充分利用寄存器,減少訪問內(nèi)存的次數(shù);
  形式:
  (1)能立即執(zhí)行的目標(biāo)代碼;
    (2)待裝配的浮動(dòng)目標(biāo)代碼;
    (3)匯編語言目標(biāo)代碼;
31、空間分配

參考鏈接:
https://www.cnblogs.com/sweetyu/p/4947030.html

總結(jié)

以上是生活随笔為你收集整理的传统编译原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。