一千萬個為什麽

搜索

Ruby和Python如何實現他們的交互式控制臺?

在為我的編程語言實現解釋器時,我首先想到了一個簡單的控制臺窗口,它允許用戶輸入一些代碼,然後作為shell獨立程序執行。

但是存在嚴重的問題:如果用戶輸入的每一行代碼都作為獨立程序處理,它必須通過標記器和解析器,然後由解釋器執行 - 那麽函數呢?

  • Python/Ruby交互式控制臺(IDLE,irb)如何“共享”代碼?如何處理代碼?

例:

>> def x:
>>  print("Blah")
>> 
>> x()

函數存儲在哪裏,以便可以在任何時候再次調用它?

交互式控制臺如何將所有輸入的內容視為一個程序,而不是一遍又一遍地執行所有操作?

最佳答案

對於Python,在所有括號,括號等匹配之前,表達式不完整。這很容易檢測到。在輸入完全空行之前,函數/類定義不完整。然後編譯器編譯輸入的表達式或定義,並運行它。

與正常的函數,類,模塊等非常相似,REPL有自己的局部範圍。這個範圍用於輸入REPL的變量和定義。

轉載註明原文: Ruby和Python如何實現他們的交互式控制臺?