获取DDMathParser令牌和组令牌

时间:2017-11-16 16:51:24

标签: swift ddmathparser

我已经在stackoverflow上找到了我的问题的解决方案,但它在Objective-C中。看到这个链接 DDMathParser - Getting tokens

我把它翻译成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

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

1 个答案:

答案 0 :(得分:0)

你获得了所有的代币。

//with toJSON const a = { b: 1, toJSON: () => ({ c: 100 }) }; console.log( JSON.stringify(a) );OperatorToken等都继承自DecimalNumberToken超类。 RawToken定义了RawToken.string属性。

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

然而,重要的是要注意,可能存在由原型字符串中不存在的令牌化器产生的令牌。例如,在解析隐式乘法(.range转为3x)时,令牌会由Tokenizer注入。

稍后添加:

如果你想要 final 树如何解析它,那么你想要3 * x

Expression

此时,您let expression = try Expression(string: "1 + ($a - (3 / 4))") 上的switch。它应该是expression.kindnumbervariablefunction表达式具有子表达式,表示函数的参数。