我正在寻找一个用于解析和评估来自String的逻辑和数学表达式的库。其主要特点是什么,我需要:IOS。解析和评估逻辑和数学表达式
- 检查表达式的类型(逻辑或数学)
- 分析和计算数学表达式。例如:“3 *(2 + 1)”
- 解析和评估逻辑表达式。例如:“(2 + 1 == 0)||(5> = 10)”
- 必须与字符串一起工作。例如: “(! 'B'= 'A')& &(! 'K'= 'K')”
我发现DDMathParser库,但它сan't比较字符串。
我正在寻找一个用于解析和评估来自String的逻辑和数学表达式的库。其主要特点是什么,我需要:IOS。解析和评估逻辑和数学表达式
我发现DDMathParser库,但它сan't比较字符串。
经过调查一段时间我决定使用CoreParse库。这个库使用BNF语言来描述语法。在我的情况下,语法有一个表格:
var expressionGrammar = "Expression ::= [email protected]<BoolExpression> | [email protected]<MathExpression> | [email protected]<StringExpression>;\n" +
"MathExpression ::= [email protected]<MathTerm> | [email protected]<MathExpression> [email protected]<AddOp> [email protected]<MathTerm>;\n" +
"MathTerm ::= [email protected]<MathFactor> | [email protected]<MathFactor> [email protected]<MulOp> [email protected]<MathTerm>;\n" +
"MathFactor ::= [email protected]'Number' | '(' [email protected]<MathExpression> ')';\n" +
"MulOp ::= '*' | '/';\n" +
"AddOp ::= '+' | '-';\n" +
"StringExpression ::= [email protected]<StringFactor> | [email protected]<StringExpression> [email protected]<AddOp> [email protected]<StringFactor>;\n" +
"StringFactor ::= [email protected]'String' | '(' [email protected]<StringExpression> ')';\n" +
"BoolExpression ::= [email protected]<BoolTerm> | [email protected]<BoolTerm> [email protected]<LogicOp> [email protected]<BoolExpression>;\n" +
"BoolTerm ::= [email protected]<BoolFactor> | [email protected]<BoolFactor> [email protected]<CompareOp> [email protected]<BoolTerm>;\n" +
"BoolFactor ::= [email protected]<LogicValue> | '(' [email protected]<BoolExpression> ')' | [email protected]<MathFactor> [email protected]<CompareOp> [email protected]<MathFactor> | [email protected]<StringFactor> [email protected]<CompareOp> [email protected]<StringFactor>;\n" +
"CompareOp ::= '<' | '>' | '>=' | '<=' | '==' | '!=';\n" +
"LogicOp ::= '&&' | '||';\n" +
"LogicValue ::= [email protected]'true' | [email protected]'false';\n";
DDMathParser可以绝对比较字符串。您将启用“将字符串解释为变量”选项,然后添加自定义变量解析器以将变量表达式与另一个变量表达式进行比较并返回true/false结果。
我会稍后回来,并说明如何做到这一点。
相反,它张贴作为*答案*张贴到您自己的问题,如果有更好的回答没有一起在两天来,你会被允许接受回答。人们未来会更快找到。 – clearlight 2015-03-24 17:28:37