/** * Sets function name. * * @param functionName the function name */ public void setFunctionName(String functionName) { if ( mXparser.regexMatch(functionName, ParserSymbol.nameOnlyTokenRegExp) ) { this.functionName = functionName; setExpressionModifiedFlags(); } else functionExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + functionName + "]" + "Invalid function name, pattern not matches: " + ParserSymbol.nameTokenRegExp); } /**
/** * Sets (modifies) argument name. * Each expression / function / dependent argument associated * with this argument will be marked as modified * (requires new syntax checking). * * @param argumentName the argument name */ public void setArgumentName(String argumentName) { if ( mXparser.regexMatch(argumentName, ParserSymbol.nameOnlyTokenRegExp) ) { this.argumentName = argumentName; setExpressionModifiedFlags(); } else if (argumentExpression != null) argumentExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + argumentName + "] " + "Invalid argument name, pattern not match: " + ParserSymbol.nameOnlyTokenRegExp); } /**
/** * Constructor - creates free argument. * * @param argumentName the argument name * @param argumentValue the argument value */ public Argument(String argumentName, double argumentValue) { super(Argument.TYPE_ID); argumentExpression = new Expression(); if ( mXparser.regexMatch(argumentName, ParserSymbol.nameOnlyTokenRegExp) ) { this.argumentName=new String(argumentName); this.argumentValue=argumentValue; argumentType = FREE_ARGUMENT; } else { this.argumentValue = ARGUMENT_INITIAL_VALUE; argumentExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + argumentName + "] " + "Invalid argument name, pattern not match: " + ParserSymbol.nameOnlyTokenRegExp); } setSilentMode(); description = ""; } /**
/** * Constructor for function definition based on * your own source code - this is via implementation * of FunctionExtensionVariadic interface. * * @param functionName Function name * @param functionExtensionVariadic Your own source code */ public Function(String functionName, FunctionExtensionVariadic functionExtensionVariadic) { super(Function.TYPE_ID); if ( mXparser.regexMatch(functionName, ParserSymbol.nameOnlyTokenRegExp) ) { this.functionName = functionName; functionExpression = new Expression("{body-ext-var}"); isVariadic = true; parametersNumber = -1; description = ""; this.functionExtensionVariadic = functionExtensionVariadic; functionBodyType = BODY_EXTENDED; } else { parametersNumber = 0; description = ""; functionExpression = new Expression(""); functionExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + functionName + "]" + "Invalid function name, pattern not matches: " + ParserSymbol.nameTokenRegExp); } } /**
/** * Constructor - creates dependent argument(with hidden * argument expression). * * @param argumentName the argument name * @param argumentExpressionString the argument expression string * @param elements Optional parameters (comma separated) * such as Arguments, Constants, Functions * * @see Expression * @see PrimitiveElement */ public Argument(String argumentName, String argumentExpressionString, PrimitiveElement... elements) { super(Argument.TYPE_ID); if ( mXparser.regexMatch(argumentName, ParserSymbol.nameOnlyTokenRegExp) ) { this.argumentName=new String(argumentName); argumentValue=ARGUMENT_INITIAL_VALUE; argumentExpression = new Expression(argumentExpressionString, elements); argumentExpression.setDescription(argumentName); argumentType = DEPENDENT_ARGUMENT; } else { this.argumentValue = ARGUMENT_INITIAL_VALUE; argumentExpression = new Expression(); argumentExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + argumentName + "] " + "Invalid argument name, pattern not match: " + ParserSymbol.nameOnlyTokenRegExp); } setSilentMode(); description = ""; } /**
/** * Constructor for function definition based on * your own source code - this is via implementation * of FunctionExtension interface. * * @param functionName Function name * @param functionExtension Your own source code */ public Function(String functionName, FunctionExtension functionExtension) { super(Function.TYPE_ID); if ( mXparser.regexMatch(functionName, ParserSymbol.nameOnlyTokenRegExp) ) { this.functionName = functionName; functionExpression = new Expression("{body-ext}"); isVariadic = false; parametersNumber = functionExtension.getParametersNumber(); description = ""; this.functionExtension = functionExtension; functionBodyType = BODY_EXTENDED; } else { parametersNumber = 0; description = ""; functionExpression = new Expression(""); functionExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + functionName + "]" + "Invalid function name, pattern not matches: " + ParserSymbol.nameTokenRegExp); } } /**
} else { super.argumentExpression = new Expression(); super.argumentExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + argumentDefinitionString + "] " + "Invalid argument definition (patterns: f(n) = f(n-1) ... ).");
this.functionExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + functionName + "] incorrect number of function parameters (expecting " + getParametersNumber() + ", provided " + parameters.length + ")!"); return Double.NaN;
description = ""; functionExpression = new Expression(""); functionExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + functionName + "]" + "Invalid function name, pattern not matches: " + ParserSymbol.nameTokenRegExp);
functionExpression.setDescription(functionDefinitionString); String errorMessage = ""; errorMessage = errorMessage + "\n [" + functionDefinitionString + "] " + "--> pattern not mathes: f(x1,...,xn) = ... reg exp: " + ParserSymbol.functionDefStrRegExp; functionExpression.setSyntaxStatus(Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN, errorMessage);
functionExpression.setDescription(functionDefinitionString); String errorMessage = ""; errorMessage = errorMessage + "\n [" + functionDefinitionString + "] " + "--> pattern not mathes: f(x1,...,xn) = ... reg exp: " + ParserSymbol.functionDefStrRegExp; functionExpression.setSyntaxStatus(Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN, errorMessage);
this.functionExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + functionName + "] incorrect number of function parameters (expecting " + getParametersNumber() + ", provided " + arguments.length + ")!"); return Double.NaN;
argumentType = FREE_ARGUMENT; argumentExpression = new Expression(); argumentExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + argumentDefinitionString + "] " + "Invalid argument definition (patterns: 'x', 'x=5', 'x=5+3/2', 'x=2*y').");
argumentType = FREE_ARGUMENT; argumentExpression = new Expression(); argumentExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + argumentDefinitionString + "] " + "Invalid argument definition (patterns: 'x', 'x=5', 'x=5+3/2', 'x=2*y').");
description = ""; functionExpression = new Expression(""); functionExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + functionName + "]" + "Invalid function name, pattern not matches: " + ParserSymbol.nameTokenRegExp);