获取 DDMathParser 令牌和组令牌

Getting DDMathParser tokens and group tokens

我已经在 Whosebug 上找到了我的问题的解决方案,但它在 Objective-C 中。看到这个 link

我将其翻译成 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

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

您将获得所有代币。

OperatorTokenDecimalNumberToken 等都继承自 RawToken 超类。 RawToken 定义了一个 .string 和一个 .range 属性.

.string 是从源中提取或推断的实际 String.range 是原始字符串中标记所在的位置。

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


稍后添加:

如果您想要 final 树来了解所有内容的解析方式,那么您需要 Expression:

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

此时,您 switchexpression.kind。它将是 numbervariablefunctionfunction 表达式有子表达式,表示函数的参数。