表達式解析運算器(二)-- 算法實現

先看看支援的表示的示例
" 1 "
" 1 + 2 "
" {0} + 2 "
" 1 + 2 *3 "
" (1 + 2) * 3 "
" Round[145.26 , 0] "
" Round[145.26 , 1 + {0}] "
" 1 + 2 * ((3 -2) * 6 - 1) + Round[ (-24.344) , 4 / 2 ^ 2]  "

由于要實現的表達式的靈活性要求比較高,要求一步到位直接分析出表達式的結構有難度,這里我采用了三步分析拆解的方法。

第一步,先拆解括號和特殊運算符
把復雜的式子,先拆解成多個簡單的式子。
主式子:  " ( {0} + 3.0 ) * ( 23 * ( 8 + Round[{1} , 2]) - 1) "
第一次分解后變成:
主式子:  " 『0』 * ( 23 * ( 8 + Round[{1} , 2]) - 1) "
式子『
0 』: "  {0} + 3.0  "
第二次分解后變成:
主式子:  " 『0』 * ( 23 * ( 8 + 『1』) - 1) "
式子『
0 』: "  {0} + 3.0  "
式子『 1 』: Round[{1} , 2]
第三次分解后變成:
主式子:  " 『0』 * ( 23 * 『2』- 1) "
式子『
0 』: "  {0} + 3.0  "
式子『 1 』: Round[{1} , 2]
式子『 2 』: 8 + 『1』
第四次分解后變成:
主式子:  " 『0』 * 『3』 "
式子『
0 』: "  {0} + 3.0  "
式子『 1 』: Round[{1} , 2]
式子『 2 』: 8 + 『1』
  式子『 3 』: 23 * 『2』- 1

經過4次分解之后,復雜的表達式轉換為簡單的表達式,括號也消失了,剩下只是一般的二元運算式(主式子,式子0 2 3)和特殊運算式(式子1)

第二步,式子成員分析
把式子的成員分解為Parameter(參數)和Operator(運算子),還有SubExprssion子表達式,其中參數包括Variable(變量)和Quantitative(定值)
那么上面的式子就變成:
主式子: S1 O1 S4
(S1)式子『
0 』:V1 O2 Q1
(S2)式子『
1 』:O3 V2 Q2
(S3)式子『
2 』:Q3 O4 S2
(S4)式子『
3 』:Q4 O5 S3 O6 Q5
S -- SubExpression   O -- Operator   Q -- Quantitative  V -- Variable

第三步,轉換為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,運算就可以了。



現在還沒解決的問題就是,這套運算邏輯,沒有解決一元運算符,一元運算符在分析拆解上有一定難度。而很特殊的三元運算符顧及到應用的環境不是很多,就沒有歸入考慮之列

相關文章: 表達式解析運算器(一)


转载于:https://www.cnblogs.com/helldog/archive/2008/05/27/1208281.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值