算術表示式的求值法
如(6*2+5*9)/2的這類表示式稱為中序表示法,這是一般人所習慣的的寫法。不過由於中序法優先權和結合性的問題,在計算機編譯程式的處理上很不方便,所以在計算機的上的解決之道是將其換成後序法(較常用)和前序法,這種表示式的種類,依據運算子在表示式中的位置,可以將其分為中序法、前序法、後續法。
- 中序法:<運算元1><運算子><運算元2>
- 前序法:<運算子><運算元1><運算元2>
- 後序法:<運算元1><運算元2><運算子>
以下介紹幾種解析算術表示式的方法以及求值方法:
一、括號法
1、中序轉前序
(1)將中序表示式根據順序用括號完整的括起來
(2)移動所有的運算子來取代所有的左括號,並以最近者為原則
(3)將所有的右括號去掉
2、中序轉後序
(1)將中序表示式根據順序用括號完整的括起來
(2)移動所有的運算子來取代所有的右括號,並以最近者為原則
(3)將所有的左括號去掉
3、分析
例如2*3+4*5,中序轉前序:
第一步:((2*3)+(4*5))
第二步:+*23)*45))
第三步:+*23*45
中序轉後序:
第一步:((2*3)+(4*5))
第二步:((23*(45*+
第三步:23*45*+
二、堆疊法
這裡只介紹中序轉後序,中序轉前序類似,篇幅限制不再介紹。
1、中序轉後序步表示式的步驟
(1)從左向右依次取得資料ch。
(2)如果ch是運算元,直接輸出。
(3)如果ch是運算子(含左右括號),則:
a:如果ch = '(',放入堆疊。
b:如果ch = ')',依次輸出堆疊中的運算子,直到遇到'('為止。
c:如果ch不是')'或者'(',那麼就和堆疊頂點位置的運算子top做優先順序比較。
1:如果ch優先順序比top高,那麼將ch放入堆疊。
2:如果ch優先順序低於或者等於top,那麼輸出top,然後將ch放入堆疊。
(4)如果表示式已經讀取完成,而堆疊中還有運算子時,依次由頂端輸出。
2、分析
以A-B*(C+D)/E為例進行分析: