0

我已经在 stackoverflow 上找到了解决问题的方法,但它在 Objective-C 中。请参阅此链接 DDMathParser - 获取令牌

我将其翻译成 Swift,如下所示。那么从字符串中获取令牌并获取分组令牌的最新方法是什么?

例如:1 + ($a - (3 / 4))

这是我的尝试:

do{
    let token = try Tokenizer(string: "1 + ($a - (3 /4))").tokenize()
    for element in token {
        print(element)
    }
} catch {
    print(error)
}

但我收到以下消息:

MathParser.DecimalNumberToken
MathParser.OperatorToken
MathParser.OperatorToken
MathParser.VariableToken
MathParser.OperatorToken
MathParser.OperatorToken
MathParser.DecimalNumberToken
MathParser.OperatorToken
MathParser.DecimalNumberToken
MathParser.OperatorToken
MathParser.OperatorToken

如何从我的字符串中获取特定标记?

4

1 回答 1

0

你得到了所有的令牌。

OperatorToken, DecimalNumberToken, 等都继承自RawToken超类。RawToken定义一个.string和一个.range属性。

.string是实际的,String从源中提取或推断。这是令.range牌在原始字符串中的位置。

但是,重要的是要注意,标记器生成的标记可能不存在于原始字符串中。例如,在解析隐式乘法时,Tokenizer 会注入标记(3x变成3 * x)。


后来补充:

如果您想要如何解析所有内容的最终Expression树,那么您需要:

let expression = try Expression(string: "1 + ($a - (3 / 4))")

此时,您switchexpression.kind. 它将是 a number、 avariable或 a functionfunction表达式有子表达式,代表函数的参数。

于 2017-11-18T01:58:28.363 回答