工作原理
解釋程式由一個總控程式和若干個執行
子程式組成。解釋程式的工作過程如下:首先,由總控程式執行初始準備工作,置工作初態;然後,從
源程式中取一個語句S,並進行語法檢查。如果語法有錯,則輸出錯誤信息;否則,根據所確定的語句類型轉去執行相應的執行子程式。返回後檢查解釋工作是否完成,如果未完成,則繼續解釋下一語句;否則,進行必要的善後處理工作。
組成模組
解釋程式的一般結構可以分為解釋模組和運行模組兩個主要模組。前者的職能是按源程式動態執行順序逐個輸入語句,並對單個語句進行分析和解釋,包括語法和語義的正確性檢驗、生成等價的
中間代碼或機器語言代碼,以及錯誤信息提供等處理。後者的職能是運行語句的翻譯代碼,並輸出中間結果或最終結果。由於解釋程式的設計思想不同,運行模組的執行方式也不同。一種方法是解釋模組直接生成源程式語句等價的機器語言代碼;通常一個語句生成多條
機器指令的
代碼段。運行模組負責控制這段代碼的執行並處理中間結果(保存或輸出)。另一種方法是,解釋模組生成語句等價的中間代碼(但不是
機器語言代碼),如程式調用及其參數形式。運行模組負責選擇相應功能部分並控制中間代碼的執行,並處理相關運行結果。
實現方法
解釋程式與編譯程式的主要區別是解釋程式不產生目標代碼,它逐條地取出源程式中的語句,邊解釋,邊執行。實現解釋程式可以分為兩遍掃描完成;
·對源程式進行詞法檢查和部分語法檢查;
·把源程式字元串轉化為內部形式的源程式(單詞符號串);
·建立各種符號表,為解釋執行階段做準備。
第二遍解釋執行,由解釋執行程式完成,其主要工作是:
·使用第一階段形成的
符號表對內部源程式逐條解釋執行;
·在解釋執行過程中,進行全部語法檢查。
工作過程
解釋程式的工作過程如下:
①由總控程式完成初始化工作。
②依次從源程式中取出一條語句進行語法檢查,如有錯,輸出錯誤信息;如果通過了語法檢查,則根據語句翻澤成相應的指令並執行它。
③檢查源程式是否已經全部解釋執行完畢,如果未完成則繼續解釋並執行下一條語句,直到全部語句都處理完畢。
特點
解釋程式的工作方式非常適於人通過
終端設備與計算機會話,如在終端上打一條命令或語句,解釋程式就立即將此語句解釋成一條或幾條指令並提交硬體立即執行且將執行結果反映到終端,從終端把命令打入後,就能立即得到計算結果。
這的確是很方便的,很適合於一些
小型機的計算問題。但解釋程式執行速度很慢,例如
源程式中出現循環,則解釋程式也重複地解釋並提交執行這一組語句,這就造成很大浪費。
對源程式邊解釋翻譯成機器代碼邊執行的高級語言程式。所以,解釋程式的功能是:
解釋執行高級語言程式。由於它的方便性和
互動性較好,早期一些高級語言採用這種方式,如
BASIC、
dBASE。但它的弱點是運行效率低,程式的運行依賴於
開發環境,不能直接在作業系統下運行。
解釋程式的突出優點是可簡單地實現,且易於在解釋執行過程中靈活、方便地插入修改和調試措施,但最大缺點是執行效率很低。例如,需要多次重複執行的語句,採用
編譯程式時只需要翻譯一次;但在解釋程式中卻需要重複翻譯,重複執行。
適用範圍
根據這些特點,解釋程式適用於如下場合:
有些語言中的大多數語句,如字元串加工語言中的字元串查找語句和加工語句,其執行時間比翻譯時間長得多。對於這種語言,採用生成性方案,效果甚微,而採用解釋性方案則易於實現。
為了便於用戶調試和修改程式,又能保證程式高效運行,很多
程式設計語言配置兩個加工系統,一個用於調試,一個用於有效地運行。調試用的系統一般用解釋程式實現,以便及時監視運行情況、動態地輸出調試信息和靈活地修改錯誤。
互動式會話語言(如
BASIC,APL),要為用戶提供並行、交錯編寫、執行、調試和修改
源程式的功能。採用解釋程式易於實現這些功能。
隨著超大規模積體電路的迅速發展,不少人提出用微程式設計方法實現高級程式設計語言解釋程式的想法,隨之出現了如 “
FORTRAN機”之類的高級語言機器的概念。