構建計算器,第 1 部分(1)

構建計算器,第 1 部分(1)

構建計算器,第 1 部分(1)

[size=0.875]1

[size=0.875]2

[size=0.875]3

[size=0.875]4

[size=0.875][size=0.875]// This is Java using the Calculator

[size=0.875]String s = "((5 * 10) + 7)";

[size=0.875]double result = com.tedneward.calcdsl.Calculator.evaluate(s);

[size=0.875]System.out.println("We got " + result); // Should be 57

  • 解析器,用於獲取輸入的文本並將其轉換成 Abstract Syntax Tree(AST)。
  • 代碼生成器(在編譯器的情況下),用於獲取 AST 並從中生成所需字節碼;或是求值器(在解釋器的情況下),用於獲取 AST 並計算它在 AST 裡面所發現的內容。

[size=1.0625]擁有 AST 就能夠在某種程度上優化結果樹,如果意識到這一點的話,那麼上述區別的原因就變得更加顯而易見了;對於計算器,我們可能要仔細檢查表達式,找出可以截去表達式的整個片段的位置,諸如在乘法表達式中運算數 為 “0” 的位置(它表明無論其他運算數是多少,運算結果都會是 “0”)。


分享到:


相關文章: