/** * Parse the given expression * @param new_expr A string containing an expression, for example "2+3" * @return JongFunction */ public JongFunction Parse(String new_expr, ICheckModelName checkModelName, JongErrWarn errW) { try { _checkModelName = checkModelName; // initialize all variables expr = new_expr; ans = 0.0; // Pare the expression into a function tree format JongFunction function = parse_start(); //TODO: Equations: Commented out for C# //@SuppressWarnings("unused") String dbgString = FuncToString(function, " ", "++++", errW); dbgString += "\n"; // System.out.print(dbgString); return(function); } catch (JongError err) { errW.Init(ErrWStat.UNKNOWN_ERROR, err.get(), false); return(null); } }
/** * Parse the given expression * @param new_expr A string containing an expression, for example "2+3" * @return ans A string containing the answer, or an error when * an error occurred */ public String ParseAndEval(String new_expr, ICheckModelName checkModelName, JongErrWarn errW) { try { _checkModelName = checkModelName; // initialize all variables expr = new_expr; ans = 0.0; // Pare the expression into a function tree format JongFunction function = parse_start(); String dbgString = FuncToString(function, " ", "----", errW); dbgString += "\n"; //System.out.print(dbgString); // evaluate the expression ans = function.eval(); if (function is JongFunctionAssign) { // function assignment JongFunctionAssign fa = (JongFunctionAssign)function; String desc = ""; desc += fa.getName(); desc += "("; for (int i = 0; i < fa.getVariables().Count(); i++) { if (i > 0) { desc += ", "; } desc += fa.getVariables().ElementAt(i).getName(); } desc += ")"; ans_str = "Function " + desc + " defined"; } else if (function is JongVariableAssign) { // variable assignment JongVariableAssign JongVariableAssign = (JongVariableAssign)function; ans_str = string.Format("%s = %g", JongVariableAssign.getName(), ans); // add the answer to memory as variable "Ans" variablelist["ANS"] = ans; } else { //DecimalFormat formatter = new DecimalFormat("#.##########"); ans_str = string.Format("{0:#.##########}", ans); // add the answer to memory as variable "Ans" variablelist["ANS"] = ans; } } catch (JongError err) { errW.Init(ErrWStat.UNKNOWN_ERROR, err.get(), false); ans_str = err.get(); expr = ""; } return(ans_str); }
private List <JongLocalVariable> localvariablelist = new List <JongLocalVariable>(); // list with local function variables (used during function assignment) public static String FuncToString(JongFunction func, String strSpaceIndent, String strLineIndent, JongErrWarn errW) { try { String retStr = ""; if (func.name() == "Value") { retStr += func.eval(); } else if (func.name() == "VariableGet") { retStr += ((JongVariableGet)func).getName(); } else if (func.name() == "VariableAssign") { retStr += ((JongVariableAssign)func).getName(); retStr += " = "; } else { retStr += func.name(); } List <JongFunction> argFuncs = func.get(); String nextSpaceIndent = (strSpaceIndent + strSpaceIndent); foreach (JongFunction argFunc in argFuncs) { retStr += "\n"; retStr += (strSpaceIndent + strLineIndent); String subStr = FuncToString(argFunc, nextSpaceIndent, strLineIndent, errW); retStr += subStr; } return(retStr); } catch (JongError err) { errW.Init(ErrWStat.UNKNOWN_ERROR, err.get(), false); return(""); } }