由于要實現的表達式的靈活性要求比較高,要求一步到位直接分析出表達式的結構有難度,這里我采用了三步分析拆解的方法。
第一步,先拆解括號和特殊運算符
把復雜的式子,先拆解成多個簡單的式子。
式子『3』:23 * 『2』- 1
經過4次分解之后,復雜的表達式轉換為簡單的表達式,括號也消失了,剩下只是一般的二元運算式(主式子,式子0 2 3)和特殊運算式(式子1)
第二步,式子成員分析
把式子的成員分解為Parameter(參數)和Operator(運算子),還有SubExprssion子表達式,其中參數包括Variable(變量)和Quantitative(定值)
那么上面的式子就變成:
第三步,轉換為OperationUnit(運算單元)進行運算
無論是子表達式SubExprssion,變量Variable,還是定值Quantitative,最終結果都是一個Value,那么以上式子都可以簡化為Operator(運算子,簡稱O)和Value(值,簡稱V)的關系。
①對于一般的二元運算式,基本結構就是V O V O V O V ..........
都是兩個V中間包含一個O,而最基本的單元V O V經歷運算之后的結果也是一個V,那么運算的情況就可以簡化為兩種情況:
1 V1 O1 V2
直接運算出結果
2 V1 O1 V2 O2 V3
比較O1和O2的運算優先級,當O1的優先級高于或等于O2的時候,運算V1 O1 V2,低于的時候則繼續取O2和O3(如果有的話)比較運算優先級
當經歷一次運算之后,重新排列V O V O V O V.......,再運算一次,知道最后的結果是一個V,然后把V作為結果輸出。
②對應特殊特殊運算式,基本機構就是O V1 V2 V3 V4。。。。。
那么直接調用對應的OperationUnit,運算就可以了。
現在還沒解決的問題就是,這套運算邏輯,沒有解決一元運算符,一元運算符在分析拆解上有一定難度。而很特殊的三元運算符顧及到應用的環境不是很多,就沒有歸入考慮之列
相關文章: 表達式解析運算器(一)