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