我正在做一些解析工作,太複雜到不了解細節,但有一件簡單的事情我需要做(至少簡單的概念,也許不是簡單的答案)。我可能會在字符串中使用一個公式,例如下面的示例。我需要一個函數,它將採用鬆散格式的公式字符串,將其解析出來並計算結果。解析字符串公式爲一個整數結果
樣品:
(10/2)+(10/30)
5+(10/30)
5+3
8
或者:
(12.5 - (0.5 * 5))/2
(12.5 - 2.5)/2
10/2
5
規則:
- 空間將被忽略
- PEMDAS方法必須完全適用
- 結果應始終圓整
- 沒有變量會存在,已經轉換爲數字
- 十進制數可能是輸入
現有的解析我已經有工作剛剛得到這些公式的一個組成部分字符串 - 但從那裏,我不知道如何執行實際的計算。我在做什麼具體是做一個小行deliminated編劇畫在畫布,這裏的一些示例腳本:
Var W 50
Var H 50
Pen Style Clear
Pen Color $000000
Pen Width 3
Brush Style Solid
Brush Color {FORM_COLOR}
Rect 0 0 {WIDTH} {HEIGHT}
Brush Color $501010
Ellipse @W @H 450 450
Brush Color $602020
Ellipse 100 100 400 400
Brush Color $703030
Ellipse 150 150 350 350
Brush Color $804040
Ellipse 200 200 300 300
EllipseG 200 200 300 300 6 2
Pen Style Solid
Pen Width 2
Pen Color {FONT_COLOR}
MoveTo 0 0
LineTo 500 500
MoveTo 0 500
LineTo 500 0
所有已經工作,但現在我想說例如...
Var W
Var H
Set W 50
Set H 50
Brush Color $602020
Ellipse(@W, @H, 500 - @W, 500 - @H
Set W 100
Set H 100
Brush Color $703030
Ellipse(@W, @H, 500 - @W, 500 - @H
Set W 150
Set H 150
Brush Color $804040
Ellipse(@W, @H, 500 - @W, 500 - @H
所以500 - @W
我已經將它轉換爲500 - 50
,但現在我需要字符串500 - 50
送入這個函數來得到結果450
。
編輯:解決
我使用推薦parser10
因爲,它完全適用於什麼,我需要做的。下面是我的腳本代碼示例代碼段:
Var S 4
Var D @S
Var L 0
Var T 0
Var R {WIDTH}
Var B {HEIGHT}
Pen Style Clear
Pen Color $00000000
Pen Width 3
Brush Style Solid
Brush Color {FORM_COLOR}
Rect 0 0 {WIDTH} {HEIGHT}
Set D @[email protected]
Brush Color $00400000
Ellipse @[email protected] @[email protected] @R-(@D*2) @B-(@D*2)
Set D @[email protected]
Brush Color $00501010
Ellipse @[email protected] @[email protected] @R-(@D*2) @B-(@D*2)
Set D @[email protected]
Brush Color $00602020
Ellipse @[email protected] @[email protected] @R-(@D*2) @B-(@D*2)
Set D @[email protected]
Brush Color $00703030
Ellipse @[email protected] @[email protected] @R-(@D*2) @B-(@D*2)
Set D @[email protected]
Brush Color $00804040
Ellipse @[email protected] @[email protected] @R-(@D*2) @B-(@D*2)
Set D @[email protected]
Brush Color $00905050
Ellipse @[email protected] @[email protected] @R-(@D*2) @B-(@D*2)
Set D @[email protected]
Brush Color $00FB6060
Ellipse @[email protected] @[email protected] @R-(@D*2) @B-(@D*2)
任何開始的@是一個變量,這是我做的一個StringReplace()
轉換基於什麼是在Var
部分聲明所有。解析器
你到目前爲止嘗試過什麼?你想自己編寫表達式分析器,還是想使用第三方代碼? –
我試圖使用第三方解析代碼,這東西是一個荒謬的混亂。我相信至少有很多人已經制作了這樣的公式分析器 - 除了計算這些公式外,我至少已經做了這樣一個公式分析器 - 除了計算這些公式外,我還有一個空的函數shell'Calc(const Formula:String): Integer;' –
如果我有時間機器,我可以回到1985年爲你準備好!我知道我曾經做過其中一件作爲作業。 –