逆波蘭表示式

2021-09-02 06:29:06 字數 1714 閱讀 1962

表示式一般由運算元(operand)、運算子(operator)組成,例如算術表示式中,通常把運算子放在兩個運算元的中間,這稱為中綴表示式(infix expression),如a+b。

波蘭數學家jan lukasiewicz提出了另一種數學表示法,它有兩種表示形式:

把運算子寫在運算元之前,稱為波蘭表示式(polish expression)或字首表示式(prefix expression),如+ab;

把運算子寫在運算元之後,稱為逆波蘭表示式(reverse polish expression)或字尾表示式(suffix expression),如ab+;

其中,逆波蘭表示式在編譯技術中有著普遍的應用。

演算法:一、 將中綴表示式轉換成字尾表示式演算法:

1、從左至右掃瞄一中綴表示式。

2、若讀取的是運算元,則判斷該運算元的型別,並將該運算元存入運算元堆疊

3、若讀取的是運算子

(1) 該運算子為左括號"(",則直接存入運算子堆疊。

(2)

該運算子為右括號")",則輸出運算子堆疊中的運算子到運算元堆疊,直到遇到左括號為止。

(3) 該運算子為非括號運算子:

(a)

若運算子堆疊棧頂的運算子為括號,則直接存入運算子堆疊。

(b)若比運算子堆疊棧頂的運算子優先順序高或相等,則直接存入運算子堆疊。

(c)

若比運算子堆疊棧頂的運算子優先順序低,則輸出棧頂運算子到運算元堆疊,並將當前運算子壓入運算子堆疊。

4、當表示式讀取完成後運算子堆疊中尚有運算子時,則依序取出運算子到運算元堆疊,直到運算子堆疊為空。

二、逆波蘭表示式求值演算法:

1、迴圈掃瞄語法單元的專案。

2、如果掃瞄的專案是運算元,則將其壓入運算元堆疊,並掃瞄下乙個專案。

3、如果掃瞄的專案是乙個二元運算子,則對棧的頂上兩個運算元執行該運算。

4、如果掃瞄的專案是乙個一元運算子,則對棧的最頂上運算元執行該運算。

5、將運算結果重新壓入堆疊。

6、重複步驟2-5,堆疊中即為結果值。

所謂的標準的表示式如"a+b",它在數學上學名叫中綴表示式(infix notation),原因是:

運算符號在兩個運算物件的中間。

其優勢:在於只:用兩種簡單操作,入棧和出棧就可以搞定任何普通表示式(僅包含:+-*/和()的表示式)的運算。

其基本運算方式:如果當前字元為變數或者為數字,則壓棧,如果是運算子,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表示式掃瞄完後,棧裡的就是結果。

為什麼說逆波蘭式產生機器碼的效率高:因為逆波蘭式非常易於計算機的處理。原因是這樣的。

逆波蘭表示式雖然看起來比較繁瑣,其實在計算機中很有用。計算機可不知道先乘除後加減,先括號內後括號外,它要把你輸入的式子變成逆波蘭表示式,它就可以不斷地執行上面兩個固定的規則,直至把結果算出來告訴你。

正常的表示式 逆波蘭表示式

a+b ---> a,b,+

a+(b-c) ---> a,b,c,-,+

a+(b-c)*d ---> a,b,c,-,d,*,+

a+d*(b-c)--->a,d,b,c,-,*,+

a=1+3 ---> a=1,3 +

附件是做platinum 產品時做的運算工具類。分為三塊

1.解析

2.計算

3.優先順序,運算子類」+-*/()sin cos tan等「

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

波蘭逆波蘭表示式

實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...

波蘭表示式與逆波蘭表示式

2018年09月03日 11 29 15 jitwxs 閱讀數 70 標籤 波蘭 字首 更多 個人分類 演算法與資料結構 常見的算術表示式,稱為中綴表示式,例如 5 6 4 2 3波蘭表示式也稱為字首表示式,以上面的例子為例,其波蘭表示式為 5 6 4 2 3中綴表示式轉換字首表示式的操作過程為 1...