我已经在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
如何从字符串中获取特定标记?
答案 0 :(得分:0)
你获得了所有的代币。
//with toJSON
const a = {
b: 1,
toJSON: () => ({
c: 100
})
};
console.log(
JSON.stringify(a)
);
,OperatorToken
等都继承自DecimalNumberToken
超类。 RawToken
定义了RawToken
和.string
属性。
.range
是从源中提取或推断的实际.string
。 String
是令牌所在的原始字符串中的位置。
.range
转为3x
)时,令牌会由Tokenizer注入。
稍后添加:
如果你想要 final 树如何解析它,那么你想要3 * x
:
Expression
此时,您let expression = try Expression(string: "1 + ($a - (3 / 4))")
上的switch
。它应该是expression.kind
,number
或variable
。 function
表达式具有子表达式,表示函数的参数。