基本介紹
- 中文名:自循環解釋器
- 外文名:Meta-circular evaluator
- 性質:元解釋器的一種
- 領域:計算機
簡介,Eval/Apply循環,實例,解釋器,
簡介
自循環解釋器(英語:Meta-circular evaluator)是元解釋器(Metainterpreter,或Self-interpreter)的一種。自循環解釋器不僅是在解釋型語言中寫成(如Scheme的自循環解釋器是在Scheme中寫成),而且通過底層語言的功能來實現解釋型語言的功能。因此,自循環解釋器不需擔心如何具體實現任何功能,而只需處理語言讀入與解釋,所以尤其適合作為教育用途。自循環解釋器一般在同像(即程式與數據為同一格式,如Lisp)的語言中出現。
Eval/Apply循環
- Eval,即將一個表示式轉換為其取值的函式。
- Apply,即將一個函式調用轉換為其返回值的函式。
這兩個元素互相調用,並最終將整個程式轉換為其取值。
實例
例如以下簡單的Scheme表示式(假設square是一個內置函式,其返回值為參數的平方):
(+ (square 2) (square 3))
其解釋過程如下:
- 解釋器首先將整個程式傳入Eval,而Eval辨認出整個程式是一個函式調用(被調用的函式是“+”,或加法函式)。因此,Eval會調用Apply來處理這一調用。
- Apply收到被調用函式為“+”,參數分別為(square 2)與(square 3)。因此,Apply分別調用Eval來處理這兩個參數。
- Eval收到表示式為(square 2),這是一個函式調用。因此Eval調用Apply。
- Apply收到被調用函式為“square”,參數為2(注意:這裡的“2”僅僅是一個符號,而不是數字)。現在Apply會調用Eval,將符號“2”轉換為數值2。Apply隨後調用square函式,並返回4。同樣地,Eval處理(square 3)並返回9。
- 現在解釋器回到了Apply函式,處理“+”的調用。現在Apply函式有了參數的具體取值(分別為4和9),並調用“+”函式而返回13。
- Eval函式收到返回值13,這個值是整個表示式的取值。注意以上過程中自循環解釋器並沒有關心具體如何實現“+”函式與“square”函式,這些細節都由底層的Scheme來處理。