/** * Constructor - creates constant with a given name and given value. * Additionally description is being set. * * @param constantName the constant name * @param constantValue the constant value * @param description the constant description */ public Constant(String constantName ,double constantValue ,String description) { super(Constant.TYPE_ID); relatedExpressionsList = new ArrayList<Expression>(); if ( mXparser.regexMatch(constantName, ParserSymbol.nameOnlyTokenOptBracketsRegExp) ) { this.constantName = constantName; this.constantValue = constantValue; this.description = description; syntaxStatus = NO_SYNTAX_ERRORS; errorMessage = NO_SYNTAX_ERROR_MSG; } else { syntaxStatus = SYNTAX_ERROR_OR_STATUS_UNKNOWN; errorMessage = "[" + constantName + "] " + "--> invalid constant name, pattern not mathes: " + ParserSymbol.nameOnlyTokenOptBracketsRegExp;; } } /**
/** * Constructor - creates constant with a given name and given value * * * @param constantName the constant name * @param constantValue the constant value */ public Constant(String constantName ,double constantValue) { super(Constant.TYPE_ID); relatedExpressionsList = new ArrayList<Expression>(); if ( mXparser.regexMatch(constantName, ParserSymbol.nameOnlyTokenOptBracketsRegExp) ) { this.constantName = constantName; this.constantValue = constantValue; description = ""; syntaxStatus = NO_SYNTAX_ERRORS; errorMessage = NO_SYNTAX_ERROR_MSG; } else { syntaxStatus = SYNTAX_ERROR_OR_STATUS_UNKNOWN; errorMessage = "[" + constantName + "] " + "--> invalid constant name, pattern not mathes: " + ParserSymbol.nameOnlyTokenOptBracketsRegExp;; } } /**
/** * Sets constant name. If constant is associated with any expression * then this operation will set modified flag to each related expression. * * @param constantName the constant name */ public void setConstantName(String constantName) { if ( mXparser.regexMatch(constantName, ParserSymbol.nameOnlyTokenOptBracketsRegExp) ) { this.constantName = constantName; setExpressionModifiedFlags(); } else { syntaxStatus = SYNTAX_ERROR_OR_STATUS_UNKNOWN; errorMessage = "[" + constantName + "] " + "--> invalid constant name, pattern not mathes: " + ParserSymbol.nameOnlyTokenOptBracketsRegExp;; } } /**
/** * Recognition of numeral system base in which number literal represents * number. * Examples: 2 for b2.1001 or b.1001, 1 for b1.111, 23 for b23.123afg * 16 for b16.123acdf or h.123acdf. * * @param numberLiteral Number literal string. * * Base format: b1. b2. b. b3. b4. b5. b6. b7. b8. o. b9. b10. b11. b12. * b13. b14. b15. b16. h. b17. b18. b19. b20. b21. b22. b23. b24. b25. b26. * b27. b28. b29. b30. b31. b32. b33. b34. b35. b36. * * Digits: 0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, 10:A, 11:B, 12:C, * 13:D, 14:E, 15:F, 16:G, 17:H, 18:I, 19:J, 20:K, 21:L, 22:M, 23:N, 24:O, 25:P, * 26:Q, 27:R, 28:S, 29:T, 30:U, 31:V, 32:W, 33:X, 34:Y, 35:Z * * @return If number literal fits numeral system definition then numeral * system base is returned (base between 1 and 36), otherwise * -1 is returned. */ public static final int getNumeralSystemBase(String numberLiteral) { for (int b = 0; b <= 36; b++) if (mXparser.regexMatch(numberLiteral, getRegExpForNumeralSystem(b))) return b; return -1; } /**
/** * 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); } /**
int tokenStrLength = token.tokenStr.length(); if (tokenStrLength < 3) return; if (!mXparser.regexMatch(token.tokenStr, ParserSymbol.FRACTION)) return; int underscore1stPos = token.tokenStr.indexOf('_'); int underscore2ndPos = token.tokenStr.indexOf('_', underscore1stPos + 1);
token = initialTokens.get(i); if (token.tokenTypeId == Token.NOT_MATCHED) { if (mXparser.regexMatch(token.tokenStr, ParserSymbol.unitOnlyTokenRegExp)) { token.looksLike = UNITCONST; } else if (mXparser.regexMatch(token.tokenStr, ParserSymbol.nameOnlyTokenRegExp)) { token.looksLike = ARGUMENT; if (i < initialTokens.size()-1) {
/** * 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 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; } /**
/** * 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); } } /**
if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.nameOnlyTokenRegExp) ) { argumentName = argumentDefinitionString; argumentValue = ARGUMENT_INITIAL_VALUE; argumentType = FREE_ARGUMENT; argumentExpression = new Expression(elements); } else if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.constArgDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(argumentDefinitionString); argumentName = headEqBody.headTokens.get(0).tokenStr; argumentType = DEPENDENT_ARGUMENT; } else if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.functionDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(argumentDefinitionString); argumentName = headEqBody.headTokens.get(0).tokenStr;
if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.function1ArgDefStrRegExp) ) { this.argumentType = RECURSIVE_ARGUMENT; baseValues = new ArrayList<Double>();
if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.nameOnlyTokenRegExp) ) { argumentName = argumentDefinitionString; argumentValue = ARGUMENT_INITIAL_VALUE; argumentType = FREE_ARGUMENT; argumentExpression = new Expression(elements); } else if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.constArgDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(argumentDefinitionString); argumentName = headEqBody.headTokens.get(0).tokenStr; } else if ( mXparser.regexMatch(argumentDefinitionString, ParserSymbol.functionDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(argumentDefinitionString); argumentName = headEqBody.headTokens.get(0).tokenStr;
if ( mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString); this.functionName = headEqBody.headTokens.get(0).tokenStr; functionBodyType = BODY_RUNTIME; addFunctions(this); } else if ( mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionVariadicDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString); this.functionName = headEqBody.headTokens.get(0).tokenStr;
super(Function.TYPE_ID); parametersNumber = 0; if ( mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString); this.functionName = headEqBody.headTokens.get(0).tokenStr; functionBodyType = BODY_RUNTIME; addFunctions(this); } else if ( mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionVariadicDefStrRegExp) ) { HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString); this.functionName = headEqBody.headTokens.get(0).tokenStr;
,String functionExpressionString, PrimitiveElement... elements) { super(Function.TYPE_ID); if ( mXparser.regexMatch(functionName, ParserSymbol.nameOnlyTokenRegExp) ) { this.functionName = functionName; functionExpression = new Expression(functionExpressionString, elements);
,String... argumentsNames) { super(Function.TYPE_ID); if ( mXparser.regexMatch(functionName, ParserSymbol.nameOnlyTokenRegExp) ) { this.functionName = functionName; functionExpression = new Expression(functionExpressionString);