public FormulaPart_Function(FormulaPart sub) { if (sub == null) { throw new ArgumentException("invalid formulapart"); } subFormula = sub; }
public FormulaPart_FncSin(FormulaPart sub) : base(sub) { }
static public FormulaPart ProcessString(string text) { if (text == "") { throw new ArgumentException("formula content empty"); } string breakable_text = text; FormulaPart root = null; FormulaPart last_oper = null; FormulaPart last_part = null; while (breakable_text != "") { if (isFunction(breakable_text)) { Tuple <FormulaPart_Function, string> result; try { result = getFunction(breakable_text); } catch (ArgumentException ex) { throw (new ArgumentException(ex.Message + " -> Builder")); } if (root == null) { root = result.Item1; } else if (last_oper is FormulaPart_Operator) { (last_oper as FormulaPart_Operator).Right = result.Item1; } else { throw new ArgumentException("Function found, Operator expected @ " + breakable_text); } last_part = result.Item1; breakable_text = result.Item2; continue; } if (isOperator(breakable_text)) { if (last_part is FormulaPart_Operator) { throw new ArgumentException("Operator found, Operand expected @ " + breakable_text); } Tuple <FormulaPart_Operator, string> result; try { result = getOperator(breakable_text); } catch (ArgumentException ex) { throw (new ArgumentException(ex.Message + " -> Builder")); } if (root is FormulaPart_Operator) { if ((root as FormulaPart_Operator).GetPrecedence() >= result.Item1.GetPrecedence()) { result.Item1.Left = root; root = result.Item1; } else { result.Item1.Left = (root as FormulaPart_Operator).Right; (root as FormulaPart_Operator).Right = result.Item1; } } else if (root != null) { result.Item1.Left = root; root = result.Item1; } else { root = result.Item1; } last_oper = result.Item1; last_part = result.Item1; breakable_text = result.Item2; continue; } if (isVariable(breakable_text)) { Tuple <FormulaPart, string> result = getVariable(breakable_text); if (root == null) { root = result.Item1; } else if (last_oper is FormulaPart_Operator) { (last_oper as FormulaPart_Operator).Right = result.Item1; } else { throw new ArgumentException("Variable found, Operator expected @ " + breakable_text); } last_part = result.Item1; breakable_text = result.Item2; continue; } if (isValue(breakable_text)) { Tuple <FormulaPart, string> result = getValue(breakable_text); if (root == null) { root = result.Item1; } else if (last_oper is FormulaPart_Operator) { (last_oper as FormulaPart_Operator).Right = result.Item1; } else { throw new ArgumentException("Function found, Operator expected @ " + breakable_text); } last_part = result.Item1; breakable_text = result.Item2; continue; } throw new ArgumentException("Statement not found @ " + breakable_text); } return(root); }
public FormulaPart_FncHks(FormulaPart sub) : base(sub) { }
public FormulaPart_Operator() { Left = new FormulaPart_Value(0); Right = new FormulaPart_Value(0); }