我已经找到了解决我的堆叠溢出问题的方法,但它是客观的。请参阅此链接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如何从字符串中获取特定的令牌?
发布于 2017-11-18 01:58:28
你得到了所有的代币。
OperatorToken、DecimalNumberToken等都是从RawToken超类继承的。RawToken定义了.string和.range属性。
.string是从源中提取或推断的实际String。.range位于原始字符串中令牌的位置。
但是,需要注意的是,可能存在由令牌程序生成的令牌,而原始字符串中却不存在这些令牌。例如,托卡器在解析隐式乘法时注入令牌(3x转到3 * x)。
后加:
如果您想要最终的树来解析这一切,那么您就需要Expression。
let expression = try Expression(string: "1 + ($a - (3 / 4))")此时,您可以使用switch on expression.kind。它要么是number,要么是variable,要么是function。function表达式有子表达式,表示函数的参数。
https://stackoverflow.com/questions/47335141
复制相似问题