1.簡單介紹:編譯器是將一種語言翻譯成還有一種語言的程序。編譯器將源程序的代碼作為輸出,從而產生用目標語言編寫的等價程序。比如源碼為C/C++等高級語言,那么目標語言就是目標機器的機器代碼。也就是能夠直接執行的機器代碼(各種二進制)。
以下就是一個編譯過程的簡單樣例:
x=2 (高級語言)
MOV x,2 (匯編語言)
C7 06 0000 0002 (機器代碼)
2.相關程序
a.解釋程序(interpreter):它會馬上運行程序而不是編譯完畢后在運行,典型的解釋程序有Java,Lisp等
b.匯編程序(assembler):它將匯編語言翻譯成機器代碼
c.連接程序(linker):編譯器和匯編程序常常以來其它的頭文件或者資源,連接程序將他們收集到一個可運行文件里
d.裝載程序(loader):處理全部的與基地址和起始地址相關的可重定位地址
e.編輯器(editor):編寫源碼
f.調試程序(debugger):調試程序用的
g.描寫敘述器(profiler):描寫敘述程序的執行時間等信息
h.項目管理器(project manager):用於項目管理的程序
3.編譯的一般步驟
以字符流的形式掃描程序,進行詞法分析。然后進行語法分析,語義分析,源碼優化,代碼生成。目標代碼優化等一般性步驟(之后會重點分析)
4.主要數據結構
記號(token)。語法樹,符號表,常數表,中間代碼,暫時文件
5.TINY語言簡單介紹
a.語句序列用分號隔開
b.全部變量都是整形變量,且不須要聲明
c.僅僅有兩個控制語句。if和repeat
d.if推斷語句必須以end結束,且有可選的else語句
e.read和write完畢輸入輸出
f.花括號表示凝視,但不同意嵌套凝視
g.有<和=兩個比較運算符
h.有+、-、*、/簡單運算符
以下來看一個簡單樣例:
{ Sample program in TINY language - compute factorial } read x;{input an integer}if 0<x then {don't compute if x<=0}
fact := 1;
repeat
fact := fact*x。
x := x-1
until x = 0;
write fact{output factorial of x}
end
以后會對TINY語言編譯器進行具體介紹的