我希望创建一个可以在iOS应用程序中使用的基本表达式语言。我将在运行时从文件中提取这些值。在过去,我只是利用正则表达式,但它有自己的局限性(因为我基本上只有两个操作数和一个运算符)。我希望对以下表达式提供更强大的支持:
一些例子:
valueA != valueB
(valueA == valueB) && (valueC != valueD)
valueA >= valueB
基本上,我想为这个表达式求值程序提供一个字典,让它从该字典中提取变量的值。
有关有效方法的任何想法吗?我今天早上在CoreParse和ParseKit上做了大约5分钟的研究,但我对两者都是新手(和整个解析器生成器)。
答案 0 :(得分:4)
您可以使用NSPredicate
,例如:
NSString *expr = @"($valueA == $valueB) && ($valueC != $valueD)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:expr];
NSDictionary *vars = @{@"valueA": @7, @"valueB" : @7, @"valueC": @3, @"valueD": @4};
BOOL result = [predicate evaluateWithObject:nil substitutionVariables:vars];
请注意,所有变量都必须以谓词字符串中的$
开头。