是否有任何雨燕漂亮的数学解析器我想知道。 也就是说,可以采取一个字符串,并解决它。 我需要它有阶乘,指数,平方根,以及所有基本的算术运算符。 我希望它被内置到斯威夫特,而不是第三方(如DDMathParser和GCMathParser)这将是很好,如果你能他们夫妇。
Answer 1:
有一个在你的意思的方式没数学表达式解析器“建成雨燕”。
有包含在Foundation框架,这是iOS和Mac OS X上的一部分,是从两个Objective-C和夫特访问的表达式求值 。 这就是所谓的NSExpression
。
例:
let expression = NSExpression(format: "2+3*4")
print(expression.expressionValueWithObject(nil, context: nil))
// prints "14"
它不包括阶乘的功能,但本文介绍如何添加自己的功能,并且使用阶乘作为一个例子。 你必须从翻译的Objective-C斯威夫特自己的例子。
使用的主要问题NSExpression
是,如果表达式字符串中有任何错误,它只是崩溃。
:; xcrun swift
Welcome to Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2). Type :help for assistance.
1> import Foundation
2> let ex = NSExpression(format: "1+", argumentArray: [])
Process 78868 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = internal ObjC exception breakpoint(-5).
frame #0: 0x0000000100000e90 repl_swift`repl_swift.repl_main() -> Swift.Int
repl_swift`repl_swift.repl_main() -> Swift.Int:
-> 0x100000e90 <+0>: pushq %rbp
0x100000e91 <+1>: movq %rsp, %rbp
0x100000e94 <+4>: xorl %eax, %eax
0x100000e96 <+6>: popq %rbp
Target 0: (repl_swift) stopped.
ex: NSExpression = <extracting data from value failed>
Execution stopped at breakpoint. Enter LLDB commands to investigate (type help for assistance.)
(lldb)
所以,如果你想利用用户提供的字符串和解析它们的数学表达式,您必须编写自己的解析器,或者使用第三方解析器像DDMathParser
。
文章来源: Mathematical Parser in Swift [closed]