2012-03-17 101 views
3

做了一些研究後,我瞭解了後綴表示法以及如何解析表達式。如何用sin,cos和其他函數來評估表達式?

我的代碼轉換爲後綴表示法,然後使用基於堆棧的方法對其進行評估。例如:

Initial expression: 5 + 2^(4 - 1) 
Postfix notation: 5 2 4 1 -^+ 
Result: 13 

現在我想擴大這個程序能夠與功能評估表情,像正弦,餘弦,日誌,例如:5 + sin (2 + log (2))。 我最初的想法是,在解析它之前,找到這些函數,評估它們的結果,並將它替換爲字符串。但我認爲這不是一個好主意......

那麼我該如何以有效的方式來做到這一點?

這裏有一些用c#編寫的代碼,如果它有任何用處:http://pastebin.com/7wB81fyQ,但我更喜歡一些僞代碼,以便我明白我寫得更好......我不是那些只需複製並粘貼即可。

+1

函數(例如'sin','cos'等等)以**前綴**符號表示。您只需要應用不同的分析規則。 – 2012-03-17 17:56:57

+2

這一切都由Shunting-Yard算法解釋,在這裏:http://en.wikipedia.org/wiki/Shunting-yard_algorithm – RBarryYoung 2012-03-17 18:05:21

+0

@RBarryYoung謝謝你,我會試試這個算法。 – Tibi 2012-03-17 18:11:03

回答

1

像處理其他操作符一樣使用大括號來處理這些函數。首先計算大括號中的內容,然後執行該函數。

Initial: 3 * Sin(4 + 5) 
Postfix: 4 5 + Sin 3 *  (that's how I would enter it in a HP calculator) 
or:  3 4 5 + Sin * 

除了+,消耗兩個數字,Sin消耗只有一個號碼。

+0

我不會使用字符串。 'System.Collections.Generics'中有一個很好的'Stack '類。 – 2012-03-17 21:20:58

+0

是的,但我需要Shunting-Yard算法來生成正確的後綴。 – Tibi 2012-03-20 16:50:41