[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”)。
閱讀更多 中電網 的文章