透過語法樹分析圖可見,變量 `n` 採用引用方式儲存。未賦值時其值為空、類型為未初始化,但 PropertyGrid 顯示的是最後一次賦值結果。這揭示了變量字典儲存的是 TokenRecord 物件引用,而非單純數值。
不同於左括號「(」僅作為表達式分隔,賦值運算符「=」被保留為語法樹的根節點。這項設計至關重要:
引入變量 `n`,在程式中初始化後依設定範圍遞增。定義 X、Y 兩個含 `n` 的表達式,預先完成語法分析獲得頂層節點,迴圈中僅更新 `n` 的值並呼叫 Execute() 計算座標點,最後以 `Graphics.DrawLines()` 連線成形。
傳統寫法:
for(int n = 1; n < 360; n++) {
X = n*sin(n);
Y = n*cos(n);
PointCollection.Add(new Point(X, Y));
}
myGraphics.DrawLines(myPen, PointCollection);
本程式語法樹複用寫法:
strN = "n=0";
strX = "n*sin(n)";
strY = "n*cos(n)";
TokenN = mySyntaxAnalyse.Analyse(strN);
TokenX = mySyntaxAnalyse.Analyse(strX);
TokenY = mySyntaxAnalyse.Analyse(strY);
for(int index = 1; n < 360; n++) {
TokenN.TokenValue = index;
TokenX.Execute();
TokenY.Execute();
PointCollection.Add(new Point(TokenX.TokenValue, TokenY.TokenValue));
}
myGraphics.DrawLines(myPen, PointCollection);
語法樹複用策略將時間複雜度從 O(N × Parse) 降為 O(N × Evaluate),當變量值域較大時效能提升顯著,這是支援即時波形繪製的關鍵技術。