一、輸入和輸出
輸入是一個用字符串表達的四則運算,比如 1 + 2 * 3 。目的是試圖去理解這個字符串表達的運算指令,然後計算出結果 7。之所以是一個解釋器 Interpreter,而不是一個編譯器 Compiler,是因為程序是去理解指令並且執行指令,而不是把指令編譯成機器代碼來運行;後者是編譯器的目標。
在解釋的過程中,要能夠分辨出不合法的指令:比如非法的字符 abc,非法的數字 2.3.1.4,非法的運算指令 2 * + 3,還有等等。
整個程序可以分為兩個部分:
第一個部分,是截取輸入字符串,然後返回單元指令。比如,對於指令 1 + 2 * 3 – 4 / 5,就需要被分解成如下所示的單元指令集:
第二個部分,是把單元指令集(上圖橙色包含部分)組成一個樹結構,稱之為 Abstract Syntax Tree。按照將來需要解釋的順序,優先執行的指令會放在樹的葉的位置,最後執行的指令會是樹的根 Root。
在上圖所示的 Abstract Syntax Tree 中,最先執行的指令是位於樹上最深的子樹,也就是 * ,然後是第二級的 + 和 / ,最後執行的位於根的指令 – 。