如何用程式 寫一個 類似 4+5*6+4+(4*5)
去解析這樣的東西呢?
這個就需要一點巧思 , 其實我也有去參考一些文件及 看一些書才了解的
會想寫這個東西是因為,之前這個東西寫過好幾次,但寫過之後,又要再回想,然後好像腦袋沒有很顥像的畫面,想想乾脆把他寫出文章,之後記憶也比較深刻
首先需要幾個東西
1.取得解析字串
2.取得解析字串類型
類型有
運算式字符 "+-*/()="
數字 0~9 還有小數點
目前就這二個類型
首先流程是
A. 先開始解析字串 取得 是什麼類型 ,然後如果是數字 一開始也得到一組數字
B.
進入 + - 的運算 , 然後進入這個函式的一開時
再進入 * / 的函式 , 然後一樣進入 * / 的函式的一開始
再進入 判斷 開頭是否有 + 或 - 的運算式 , 比如 -5 * 4
然後再判斷是否有 "(" 開頭 , 如果有 再進入 判斷 +- 的函式
然後 +- 跟 */ 再進入判斷運算時 還要再往下一個運算走一次
也就是 比如
4+5*3
一開始我們 取得 4
然後進入 +- 判斷 再進入*/ 再進入判斷開頭是否有+- 然後再進入 判斷是否有 (
然後 接下來我們取得 +
然後再回到 判斷是否有 ( , 回到 開頭是否有 +- 回到 */ 但沒有
再回到 +- 有 , 這時 我們存下運算子 + , 再取得運算式 , 然後 我們又再一次進入 判斷是否有 */
然後 又再跑一次 剛剛的流程 , 重複 最後運算 , 得到結果
可以參考一下我寫的幾篇文章 parser的技術
回覆刪除http://good-ed.blogspot.tw/2012/11/parser.html
好.. 翔哥
刪除