預先處理一: 先將運算式文字 (個符號之間必須以空格分開) 轉換成一個符號的串列,若遇到括號則建成包括運算子 ( + - * / ^次方 大於 小於 不等於 等等)與運算元 (數字或變數) 子串列
例如 A * (B + C)
變成
A * ()
|
B + C
預先處理二
算數運算子符號的階級 (從高到低 )
^
* 或 /
+ 或 -
邏輯運算子的符號階級 (從高到低)
邏輯比較 (大於 小於)
邏輯運算 (且 或 互斥或 and or )
正處理:
從串列開頭處理每個符號,直到沒有未處理的符號
若該符號是 "() " 則用本程序進入遞迴處理 括號內的內容,並將處理結果依序加入輸出串列中
若該符號是 "^" 將該符號 加入 輸出串列的倒數第二個位置
若該符號是 "邏輯運算子" 將該符號 加入 到輸出串列的最前面位置
若該符號是 "邏輯比較運算子"(例如:大於 小於 相等 不等) 從輸出串列最尾端向前尋找出最靠近的連續運算子群 "階級" 低於c或等於 自己的"運算子" 在該位置上 加入輸出串列
若該符號是 "+" 或 "-" 從輸出串列的最前面開始比較運算元
若沒有任何運算元存在 把自己加入輸出串列的最前面位置
若該符號的階級大於輸出串列目前位置的運算子
改成從輸出串列最後位置向前尋早運算元,並移動到相接續運算子的最前端然後加入
若該符號是 "*" 或 "/"
從輸出符號最尾端尋找連續運算子群,到運算群的最前端位置,
若該位置運算子的階級高於或等於自己的符號, 在該位置加入自己
若該位置運算子的階級小於自記,則將自己加入輸出串列的倒數第二個位置
若找不到任何運算子,也是將自己加入輸出串列的倒數第二個位置
若以上皆非 (表示自己是運算元)
將自己加入到輸出串列的尾端
限會員,要發表迴響,請先登入