計算機(jī)程序設(shè)計語言概述
程序設(shè)計語言是用于書寫計算機(jī)程序的語言。語言的基礎(chǔ)是一組記號和一組規(guī)則。根據(jù)規(guī)則由記號構(gòu)成的記號串的總體就是語言。在程序設(shè)計語言中,這些記號串就是程序。程序設(shè)計語言有3個方面的因素,即語法、語義和語用。語法表示程序的結(jié)構(gòu)或形式,亦即表示構(gòu)成語言的各個記號之間的組合規(guī)律,但不涉及這些記號的特定含義,也不涉及使用者。語義表示程序的含義,亦即表示按照各種方法所表示的各個記號的特定含義,但不涉及使用者。
雖然大多數(shù)的語言可以既可被編譯(Compiled)又可被解譯(interpreted),但大多數(shù)只在一種情況下能夠良好運(yùn)行。在一些編程系統(tǒng)中,程序要經(jīng)過幾個階段的編譯,一般而言,后階段的編譯往往更接近機(jī)器語言。這種常用的使用技巧最早在1960年代末用于BCPL,編譯程序先編譯一個叫做“0代碼”的轉(zhuǎn)換程序(representation),然后再使用虛擬器轉(zhuǎn)換到可以運(yùn)行于機(jī)器上的真實代碼。這種成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二進(jìn)制碼,雖然在很多時候,中間過渡的代碼往往是解譯,而不是編譯的。
如果所使用的翻譯的機(jī)制是將所要翻譯的程序代碼作為一個整體翻譯,并之后運(yùn)行內(nèi)部格式,那么這個翻譯過程就稱為編譯。因此,一個編譯器是一個將可閱讀的程序文本(叫做源代碼)作為輸入的數(shù)據(jù),然后輸出可執(zhí)行文件(object code)。所輸出的可執(zhí)行文件可以是機(jī)器語言,由計算機(jī)的中央處理器直接運(yùn)行,或者是某種模擬器的二進(jìn)制代碼。
如果程序代碼是在運(yùn)行時才即時翻譯,那么這種翻譯機(jī)制就被稱作解譯。經(jīng)解譯的程序運(yùn)行速度往往比編譯的程序慢,但往往更具靈活性,因為它們能夠與執(zhí)行環(huán)境互相作用。
計算機(jī)的程序設(shè)計語言可分為低級語言和高級語言兩類。
1.低級語言
低級語言是面向機(jī)器的程序設(shè)計語言,包括機(jī)器語言和匯編語言。
(1)機(jī)器語言
機(jī)器語言是第一代計算機(jī)程序設(shè)計語言,指令均由一串二進(jìn)制數(shù)組成,難以書寫、閱讀和記憶。機(jī)器語言程序能夠直接被計算機(jī)識別和執(zhí)行。機(jī)器語言是面向機(jī)器的程序設(shè)計語言,不同計算機(jī)的機(jī)器語言不同。
(2)匯編語言
匯編語言是第二代程序設(shè)計語言,將機(jī)器語言指令進(jìn)行了符號化,指令和地址均用符號表示,與機(jī)器語言相比,更便于識別、記憶和使用。但是,匯編語言程序不能被計算機(jī)直接識別和執(zhí)行,必須被匯編程序“翻譯”成機(jī)器語言代碼(即目標(biāo)代碼)后方可。該“翻譯”過程被稱為“匯編”,如圖8-1所示。雖然,與機(jī)器語言相比,匯編語言在易用性方面有所提高,但是其指令功能單一,程序煩瑣復(fù)雜,依然是一種難以使用和掌握的程序設(shè)計語言。
圖8-1匯編語言代碼的匯編
2.高級語言
高級語言是面向用戶的程序設(shè)計語言,也被稱為算法語言,其指令的表達(dá)方式接近于算法的表達(dá)方式,便于在計算機(jī)上表達(dá)和實現(xiàn)。高級語言程序簡潔、易于編寫和理解。常用的高級語言有C、C++、C#、FORTRAN和Pascal等。與匯編語言類似,高級語言程序被翻譯成目標(biāo)代碼后才可以被計算機(jī)識別和執(zhí)行。該“翻譯”操作可分為兩類,即編譯和解釋,分別由編譯軟件和解釋軟件完成。編譯軟件一次性將整個程序轉(zhuǎn)換為目標(biāo)代碼,如圖8-2a所示;而解釋軟件在程序執(zhí)行時將指令逐條翻譯成機(jī)器代碼,供計算機(jī)執(zhí)行,如圖8-2b所示。C51語言屬于編譯語言,C51程序在執(zhí)行前必須被編譯軟件轉(zhuǎn)換成目標(biāo)代碼,并形成目標(biāo)文件。
圖8-2高級語言向機(jī)器語言的轉(zhuǎn)換
a)程序的編譯b)程序的解釋