/** * Constructor for function definition in natural math language, * for instance providing on string "f(x,y) = sin(x) + cos(x)" * is enough to define function "f" with parameters "x and y" * and function body "sin(x) + cos(x)". * * @param constantDefinitionString Constant definition in the form * of one String, ie "c = 2" or "c = 2*sin(pi/3)" * @param elements Optional parameters (comma separated) such as Arguments, Constants, Functions */ public Constant(String constantDefinitionString, PrimitiveElement...elements) { super(Constant.TYPE_ID); description = ""; syntaxStatus = SYNTAX_ERROR_OR_STATUS_UNKNOWN; relatedExpressionsList = new ArrayList<Expression>(); if ( mXparser.regexMatch(constantDefinitionString, ParserSymbol.constUnitgDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(constantDefinitionString); constantName = headEqBody.headTokens.get(0).tokenStr; Expression bodyExpression = new Expression(headEqBody.bodyStr, elements); constantValue = bodyExpression.calculate(); syntaxStatus = bodyExpression.getSyntaxStatus(); errorMessage = bodyExpression.getErrorMessage(); } else errorMessage = "[" + constantDefinitionString + "] " + "--> pattern not mathes: " + ParserSymbol.constUnitgDefStrRegExp; } /**
parametersNumber = 0; if ( mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString); this.functionName = headEqBody.headTokens.get(0).tokenStr; functionExpression = new Expression(headEqBody.bodyStr, elements); addFunctions(this); } else if ( mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionVariadicDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString); this.functionName = headEqBody.headTokens.get(0).tokenStr; functionExpression = new Expression(headEqBody.bodyStr, elements);
parametersNumber = 0; if ( mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString); this.functionName = headEqBody.headTokens.get(0).tokenStr; functionExpression = new Expression(headEqBody.bodyStr, elements); addFunctions(this); } else if ( mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionVariadicDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString); this.functionName = headEqBody.headTokens.get(0).tokenStr; functionExpression = new Expression(headEqBody.bodyStr, elements);
argumentExpression = new Expression(elements); } else if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.constArgDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(argumentDefinitionString); argumentName = headEqBody.headTokens.get(0).tokenStr; Expression bodyExpr = new Expression(headEqBody.bodyStr); HeadEqBody headEqBody = new HeadEqBody(argumentDefinitionString); argumentName = headEqBody.headTokens.get(0).tokenStr; argumentExpression = new Expression(headEqBody.bodyStr, elements);
argumentExpression = new Expression(elements); } else if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.constArgDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(argumentDefinitionString); argumentName = headEqBody.headTokens.get(0).tokenStr; Expression bodyExpr = new Expression(headEqBody.bodyStr); HeadEqBody headEqBody = new HeadEqBody(argumentDefinitionString); argumentName = headEqBody.headTokens.get(0).tokenStr; argumentExpression = new Expression(headEqBody.bodyStr, elements);