解釋系統基本原理概述
- 解釋程式是一種語言處理程式,它實際是一台虛拟的機器,直接了解執行源程式或源程式的内部形式(中間代碼)。是以,解釋程式并不産生目标程式,這是它和編譯程式的主要差別。
- 如圖顯示了解釋程式實作的3種可能情況。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0mWXpVc5wmY2h2RkVjQzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuYzM1ADMygDM0IzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
類型A的實作方案
- 概述:解釋程式直接對源程式進行解釋執行。這種解釋程式對源程式進行逐字元的檢查,然後執行程式指令表示的動作。
- 例如,當解釋程式掃描到字元串序列:GOTO Label
- 解釋程式意識到GOTO指令代表無條件跳轉至所辨別的位置,于是就開始搜尋源程式中标号Label後面緊跟冒号“:”的出現位置,然後跳轉至該位置繼續執行。
- 不足:這類系統在實作時需要反複掃描源程式,是以按類型A方案實作的解釋程式效率很低,早期的解釋性Basic語言就是采取該方案實作的。
類型B的實作方案
- 概述:翻譯程式先将源程式翻譯成較貼近進階語言的進階中間代碼, 然後再掃描進階中間代碼,對進階中間代碼進行解釋執行。
- 較貼近進階語言的進階中間代碼:指中間代碼與進階語言的語句形式相像,兩者存在着一一對應的關系。APL和 SNOBOL 4的實作很多都采用這種方法。
類型C的實作方案
- 類型C的解釋程式和類型B的解釋程式的不同:類型C的解釋程式首先将源程式轉化成和機器代碼十分接近的低級中間代碼,然後再解釋執行這種低級中間代碼。
- 一般說來,在這種實作方案下,進階語言的語句和低級中間代碼之間存在着1-n對應關系。例如微軟的C#語言,首先被編譯成一種形式上較類似彙編語言的中間語言IL表示的代碼,然後通過通用語言運作時解釋執行IL程式。
- +優勢:這類系統具有良好的可移植性。
解釋系統結構描述
- 系統通常可以分成兩部分:
- 第一部分包括通常的詞法分析程式,以及句法和語義分析程式,它的作用仍是把源程式翻譯成中間代碼;
- 第二部分是解釋部分,用來對第一部分所産生的中間代碼進行解釋。