我正在做一些解析工作,太复杂到不了解细节,但有一件简单的事情我需要做(至少简单的概念,也许不是简单的答案)。我可能会在字符串中使用一个公式,例如下面的示例。我需要一个函数,它将采用松散格式的公式字符串,将其解析出来并计算结果。解析字符串公式为一个整数结果
样品:
(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年为你准备好!我知道我曾经做过其中一件作为作业。 –