我正在尋找一個用於解析和評估來自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