我正在寻找一个用于解析和评估String中的逻辑和数学表达式的库。主要特点我需要:
我找到了DDMathParser库,但它无法比较字符串。
答案 0 :(得分:0)
DDMathParser绝对可以比较字符串。您将启用“将字符串解释为变量”选项,然后添加自定义变量解析程序以将变量表达式与另一个变量表达式进行比较,并返回true / false结果。
我稍后会回来展示这是可能的。
答案 1 :(得分:0)
经过一段时间的调查,我决定使用CoreParse库。该库使用BNF语言来描述语法。在我的例子中,语法有下一种形式:
var expressionGrammar = "Expression ::= exprb@<BoolExpression> | exprm@<MathExpression> | exprs@<StringExpression>;\n" +
"MathExpression ::= term@<MathTerm> | expr@<MathExpression> op@<AddOp> term@<MathTerm>;\n" +
"MathTerm ::= fact@<MathFactor> | fact@<MathFactor> op@<MulOp> term@<MathTerm>;\n" +
"MathFactor ::= num@'Number' | '(' expr@<MathExpression> ')';\n" +
"MulOp ::= '*' | '/';\n" +
"AddOp ::= '+' | '-';\n" +
"StringExpression ::= fact@<StringFactor> | expr@<StringExpression> op@<AddOp> fact@<StringFactor>;\n" +
"StringFactor ::= str@'String' | '(' expr@<StringExpression> ')';\n" +
"BoolExpression ::= term@<BoolTerm> | term@<BoolTerm> op@<LogicOp> expr@<BoolExpression>;\n" +
"BoolTerm ::= fact@<BoolFactor> | fact@<BoolFactor> op@<CompareOp> term@<BoolTerm>;\n" +
"BoolFactor ::= value@<LogicValue> | '(' expr@<BoolExpression> ')' | factm1@<MathFactor> op@<CompareOp> factm2@<MathFactor> | facts1@<StringFactor> op@<CompareOp> facts2@<StringFactor>;\n" +
"CompareOp ::= '<' | '>' | '>=' | '<=' | '==' | '!=';\n" +
"LogicOp ::= '&&' | '||';\n" +
"LogicValue ::= val@'true' | val@'false';\n";