2012-05-08 37 views
2

我想讓我的檸檬解析器驅動的應用程序中的數學變量。例如,如果用戶輸入x^2 + y,那麼我希望能夠對x和y的100000個不同對值進行評估,希望不必每次重新分析。我能想到的唯一方法就是讓解析器生成一個對象樹,然後在給定輸入時評估表達式。有更好/更簡單/更快的方法嗎?在檸檬分析器中使用變量?

表現可能是一個問題。但我也關心編碼和代碼維護的簡易性。

回答

0

這的確是你通常會這麼做的,除非你想生成實際的(真實的或虛擬的)代碼。 x和y只是你的情況下的變量,所以你可以填寫實際值,然後調用你的Evaluate函數來評估表達式。然後,樹節點將包含指向變量x和y的指針,依此類推。不需要爲每對測試值進行解析。

1

如果您想要最可維護的代碼,請在解析時評估表達式。不要建樹。

如果你想重新執行表達式,表達式很複雜,你需要避免重新分析(按照大多數到最不可維護的順序):構建樹並評估,生成線程代碼和評估,生成本地代碼並進行評估。

如果表達式通常與您的示例一樣簡單,那麼即時評估的遞歸下降手動編碼解析器可能會非常快速並且工作得非常好,即使對於100,000次迭代也是如此。與檸檬相比,這樣的解析器可能需要更少的時間來執行。

相關問題