教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

高級(jí)語(yǔ)言是如何被翻譯成機(jī)器語(yǔ)言代碼的?

更新時(shí)間:2023年04月20日18時(shí)04分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

高級(jí)語(yǔ)言被廣泛應(yīng)用于眾多領(lǐng)域,但使用高級(jí)語(yǔ)言編寫的程序無(wú)法被計(jì)算機(jī)識(shí)別與執(zhí)行。在執(zhí)行之前需要先將高級(jí)語(yǔ)言代碼翻譯成機(jī)器語(yǔ)言代碼。根據(jù)不同的翻譯方式,執(zhí)行分為編譯執(zhí)行和解釋執(zhí)行兩種。

1.編譯執(zhí)行

編譯執(zhí)行是指通過(guò)編譯程序(也稱為編譯器)將源代碼(source code)一次性編譯成目標(biāo)程序(object code),再由計(jì)算機(jī)運(yùn)行目標(biāo)程序的過(guò)程,其中源代碼指由高級(jí)語(yǔ)言編寫的代碼。編譯執(zhí)行過(guò)程如圖。

編譯執(zhí)行過(guò)程

“執(zhí)行”指計(jì)算機(jī)運(yùn)行程序的一次過(guò)程,其中編譯器內(nèi)部的執(zhí)行過(guò)程大致可分為以下5個(gè)階段。

(l)詞法分析。詞法分析程序逐個(gè)讀取源代碼中的字符產(chǎn)生助記符表,例如逐個(gè)讀取的5個(gè)字符w、h、i、l、e會(huì)被作為助記符while放人助記符表,x、a等無(wú)法串成字符串的字符也會(huì)被視為由單個(gè)字符構(gòu)成的助記符放入助記符表。詞法分析完成后,源程序由單個(gè)字符組成的字符串轉(zhuǎn)換成由助記符串聯(lián)而成的符號(hào)串。

(2)語(yǔ)法分析。語(yǔ)法分析程序以詞法分析程序生成的單詞符號(hào)串作為輸入,分析單詞符號(hào)串是否能夠形成指令。例如num、=、5這3個(gè)助記符經(jīng)語(yǔ)法分析后構(gòu)成賦值語(yǔ)句“num=5”。

(3)語(yǔ)義檢查和中間代碼生成。語(yǔ)義分析程序?qū)φZ(yǔ)法分析程序生成的語(yǔ)句進(jìn)行檢查,確保語(yǔ)句不存在二義性,之后生成中間代碼。中間代碼也稱為中間語(yǔ)言,是源程序在計(jì)算機(jī)內(nèi)部的一種表現(xiàn)形式,其作用是幫助編譯程序優(yōu)化代碼、產(chǎn)生目標(biāo)代碼。常用的中間語(yǔ)言有逆波蘭記號(hào)、四元式、三元式和樹。

(4)代碼優(yōu)化。代碼優(yōu)化是指對(duì)程序進(jìn)行多種等價(jià)變換,在不改變程序運(yùn)行結(jié)果的前提下提升代碼運(yùn)行效率、降低代碼所占空間。經(jīng)優(yōu)化后的代碼更易于生成有效的目標(biāo)代碼。

(5)目標(biāo)代碼生成。目標(biāo)代碼生成程序?qū)⒔?jīng)語(yǔ)法分析或優(yōu)化后的中間代碼轉(zhuǎn)換成目標(biāo)代碼并存儲(chǔ)在計(jì)算機(jī)中。大多數(shù)編譯程序直接生成由機(jī)器語(yǔ)言編寫的目標(biāo)代碼,但也有編譯程序先生成匯編語(yǔ)言代碼,再調(diào)用匯編程序?qū)R編語(yǔ)言代碼翻譯成機(jī)器語(yǔ)言編寫的目標(biāo)代碼。

簡(jiǎn)而言之,編譯即編譯器讀取源代碼至生成目標(biāo)程序的過(guò)程。編譯執(zhí)行方式的特點(diǎn)是:一次解釋,多次執(zhí)行。源程序經(jīng)編譯后不再需要編譯器和源代碼,目標(biāo)程序可以在同類型操作系統(tǒng)中自由使用。編譯過(guò)程只執(zhí)行一次。相比編譯速度,更重要的是編譯后生成的目標(biāo)代碼的執(zhí)行效率。因此編譯器一般會(huì)集成盡可能多的優(yōu)化技術(shù),以提高目標(biāo)代碼的性能。

2.解釋執(zhí)行

解釋執(zhí)行(interpreter)與編譯執(zhí)行主要的區(qū)別是翻譯時(shí)的解釋程序不產(chǎn)生目標(biāo)代碼,且解釋器在翻譯源代碼的同時(shí)執(zhí)行中間代碼。解釋執(zhí)行過(guò)程如圖所示。

解釋執(zhí)行流程圖

解釋器在讀入源程序時(shí)會(huì)先調(diào)用語(yǔ)言分析程序進(jìn)行詞法分析和部分語(yǔ)法檢查,建立助記符表,將源程序字符串轉(zhuǎn)換為中間代碼;再調(diào)用解釋執(zhí)行程序進(jìn)行語(yǔ)法檢查,并逐條解釋執(zhí)行中間代碼。簡(jiǎn)而言之,解釋器逐條讀取源程序中的語(yǔ)句并翻譯,同時(shí)逐條執(zhí)行翻譯好的代碼。

解釋執(zhí)行的特點(diǎn)是:邊解釋,邊執(zhí)行。解釋器中通常不會(huì)集成過(guò)多優(yōu)化技術(shù),以免解釋過(guò)程過(guò)多耗費(fèi)時(shí)間,影響程序的執(zhí)行速度。與編譯執(zhí)行相比,解釋執(zhí)行主要具有以下優(yōu)點(diǎn)。

(l保留源代碼、程序維護(hù)和糾錯(cuò)比較方便

(2)可移植性好、只要存在解釋器,源代碼可以在任意系統(tǒng)主運(yùn)行。

高級(jí)語(yǔ)言的分類

根據(jù)不同的翻譯執(zhí)行方式,高級(jí)語(yǔ)言被分為靜態(tài)語(yǔ)言和腳本語(yǔ)言兩類。靜態(tài)語(yǔ)言采用編譯執(zhí)行方式,常見的靜態(tài)語(yǔ)言有C、Java等;腳本語(yǔ)言采用解釋執(zhí)行方式,常見的腳本語(yǔ)言有JavaScript、PHP等。

0 分享到:
和我們?cè)诰€交談!