什么是解釋程序
解釋程序是一種語(yǔ)言處理程序,在詞法、語(yǔ)法和語(yǔ)義分析方面與編譯程序的工作原理基本相同,但在運(yùn)行用戶程序時(shí),它直接執(zhí)行源程序或源程序的內(nèi)部形式(中間代碼)。因此,解釋程序并不產(chǎn)生目標(biāo)程序,這是它和編譯程序的主要區(qū)別。
工作原理
解釋程序由一個(gè)總控程序和若干個(gè)執(zhí)行子程序組成。解釋程序的工作過(guò)程如下:首先,由總控程序執(zhí)行初始準(zhǔn)備工作,置工作初態(tài);然后,從源程序中取一個(gè)語(yǔ)句S,并進(jìn)行語(yǔ)法檢查。如果語(yǔ)法有錯(cuò),則輸出錯(cuò)誤信息;否則,根據(jù)所確定的語(yǔ)句類型轉(zhuǎn)去執(zhí)行相應(yīng)的執(zhí)行子程序。返回后檢查解釋工作是否完成,如果未完成,則繼續(xù)解釋下一語(yǔ)句;否則,進(jìn)行必要的善后處理工作。
組成模塊
解釋程序的一般結(jié)構(gòu)可以分為解釋模塊和運(yùn)行模塊兩個(gè)主要模塊。前者的職能是按源程序動(dòng)態(tài)執(zhí)行順序逐個(gè)輸入語(yǔ)句,并對(duì)單個(gè)語(yǔ)句進(jìn)行分析和解釋,包括語(yǔ)法和語(yǔ)義的正確性檢驗(yàn)、生成等價(jià)的中間代碼或機(jī)器語(yǔ)言代碼,以及錯(cuò)誤信息提供等處理。后者的職能是運(yùn)行語(yǔ)句的翻譯代碼,并輸出中間結(jié)果或最終結(jié)果。由于解釋程序的設(shè)計(jì)思想不同,運(yùn)行模塊的執(zhí)行方式也不同。一種方法是解釋模塊直接生成源程序語(yǔ)句等價(jià)的機(jī)器語(yǔ)言代碼;通常一個(gè)語(yǔ)句生成多條機(jī)器指令的代碼段。運(yùn)行模塊負(fù)責(zé)控制這段代碼的執(zhí)行并處理中間結(jié)果(保存或輸出)。另一種方法是,解釋模塊生成語(yǔ)句等價(jià)的中間代碼(但不是機(jī)器語(yǔ)言代碼),如程序調(diào)用及其參數(shù)形式。運(yùn)行模塊負(fù)責(zé)選擇相應(yīng)功能部分并控制中間代碼的執(zhí)行,并處理相關(guān)運(yùn)行結(jié)果。
特點(diǎn)
解釋程序的工作方式非常適于人通過(guò)終端設(shè)備與計(jì)算機(jī)會(huì)話,如在終端上打一條命令或語(yǔ)句,解釋程序就立即將此語(yǔ)句解釋成一條或幾條指令并提交硬件立即執(zhí)行且將執(zhí)行結(jié)果反映到終端,從終端把命令打入后,就能立即得到計(jì)算結(jié)果。
這的確是很方便的,很適合于一些小型機(jī)的計(jì)算問(wèn)題。但解釋程序執(zhí)行速度很慢,例如源程序中出現(xiàn)循環(huán),則解釋程序也重復(fù)地解釋并提交執(zhí)行這一組語(yǔ)句,這就造成很大浪費(fèi)。
對(duì)源程序邊解釋翻譯成機(jī)器代碼邊執(zhí)行的高級(jí)語(yǔ)言程序。所以,解釋程序的功能是:解釋執(zhí)行高級(jí)語(yǔ)言程序。由于它的方便性和交互性較好,早期一些高級(jí)語(yǔ)言采用這種方式,如BASIC、dBASE。但它的弱點(diǎn)是運(yùn)行效率低,程序的運(yùn)行依賴于開(kāi)發(fā)環(huán)境,不能直接在操作系統(tǒng)下運(yùn)行。
解釋程序的突出優(yōu)點(diǎn)是可簡(jiǎn)單地實(shí)現(xiàn),且易于在解釋執(zhí)行過(guò)程中靈活、方便地插入修改和調(diào)試措施,但最大缺點(diǎn)是執(zhí)行效率很低。例如,需要多次重復(fù)執(zhí)行的語(yǔ)句,采用編譯程序時(shí)只需要翻譯一次;但在解釋程序中卻需要重復(fù)翻譯,重復(fù)執(zhí)行。
適用范圍
1、有些語(yǔ)言中的大多數(shù)語(yǔ)句,如字符串加工語(yǔ)言中的字符串查找語(yǔ)句和加工語(yǔ)句,其執(zhí)行時(shí)間比翻譯時(shí)間長(zhǎng)得多。對(duì)于這種語(yǔ)言,采用生成性方案,效果甚微,而采用解釋性方案則易于實(shí)現(xiàn)。
2、為了便于用戶調(diào)試和修改程序,又能保證程序高效運(yùn)行,很多程序設(shè)計(jì)語(yǔ)言配置兩個(gè)加工系統(tǒng),一個(gè)用于調(diào)試,一個(gè)用于有效地運(yùn)行。調(diào)試用的系統(tǒng)一般用解釋程序?qū)崿F(xiàn),以便及時(shí)監(jiān)視運(yùn)行情況、動(dòng)態(tài)地輸出調(diào)試信息和靈活地修改錯(cuò)誤。
3、交互式會(huì)話語(yǔ)言(如BASIC,APL),要為用戶提供并行、交錯(cuò)編寫(xiě)、執(zhí)行、調(diào)試和修改源程序的功能。采用解釋程序易于實(shí)現(xiàn)這些功能。
命令解釋程序的工作流程
命令解釋程序的作用
在聯(lián)機(jī)操作方式下,終端處理程序把用戶鍵入的信息送鍵盤(pán)緩沖區(qū)中保存。一旦用戶鍵入回車符,便立即把控制權(quán)交給命令處理程序。顯然,對(duì)于不同的命令,應(yīng)有能完成特定功能的命令處理程序與之對(duì)應(yīng)??梢?jiàn),命令解釋程序的主要作用,是在屏幕上給出提示符,請(qǐng)用戶鍵入命令,然后讀入該命令,識(shí)別命令,再轉(zhuǎn)到相應(yīng)命令處理程序的入口地址,把控制權(quán)交給該處理程序去執(zhí)行,并將處理結(jié)果送屏幕上顯示。若用戶鍵入的命令有錯(cuò),而命令解釋程序未能予以識(shí)別,或在執(zhí)行中間出現(xiàn)問(wèn)題時(shí),則應(yīng)顯示出某一出錯(cuò)信息。
命令解釋程序的組成
1、常駐部分
這部分包括一些中斷服務(wù)子程序。例如,正常退出中斷INT 20,它用于在用戶程序執(zhí)行完畢后,退回操作系統(tǒng);駐留退出中斷INT 27,用這種方式,退出程序可駐留在內(nèi)存中;還有用于處理和顯示標(biāo)準(zhǔn)錯(cuò)誤信息的INT 24等。常駐部分還包括這樣的程序:當(dāng)用戶程序終止后,它檢查暫存部分是否已被用戶程序覆蓋,若已被覆蓋,便重新將暫存部分調(diào)入內(nèi)存。
2、初始化部分
它跟隨在常駐內(nèi)存部分之后,在啟動(dòng)時(shí)獲得控制權(quán)。這部分還包括對(duì)AUTOEXEC.BAT文件的處理程序,并決定應(yīng)用程序裝入的基地址。每當(dāng)系統(tǒng)接電或重新啟動(dòng)后,由處理程序找到并執(zhí)行AUTOEXEC.BAT文件。由于該文件在用完后不再被需要,因而它將被第一個(gè)由COMMAND.COM裝入的文件所覆蓋。
3、暫存部分
這部分主要是命令解釋程序,并包含了所有的內(nèi)部命令處理程序、批文件處理程序,以及裝入和執(zhí)行外部命令的程序。它們都駐留在內(nèi)存中,但用戶程序可以使用并覆蓋這部分內(nèi)存,在用戶程序結(jié)束時(shí),常駐程序又會(huì)將它們重新從磁盤(pán)。
命令解釋程序的工作流程
系統(tǒng)在接通電源或復(fù)位后,初始化部分獲得控制權(quán),對(duì)整個(gè)系統(tǒng)完成初始化工作,并自動(dòng)執(zhí)行AUTOEXEC.BAT文件,之后便把控制權(quán)交給暫存部分。暫存部分首先讀入鍵盤(pán)緩沖區(qū)中的命令,判別其文件名、擴(kuò)展名及驅(qū)動(dòng)器名是否正確。若發(fā)現(xiàn)有錯(cuò),在給出出錯(cuò)信息后返回;若無(wú)錯(cuò),再識(shí)別該命令。一種簡(jiǎn)單的識(shí)別命令的方法是基于一張表格,其中的每一表目都是由命令名及其處理程序的入口地址兩項(xiàng)所組成。如果暫存部分在該表中能找到鍵入的命令,且是內(nèi)部命令,便可以直接從對(duì)應(yīng)表項(xiàng)中獲得該命令處理程序的入口地址 ,然后把控制權(quán)交給該處理程序去執(zhí)行該命令。
評(píng)論