/// <summary> /// Вычисление визита трёхпараметрового выражения /// </summary> /// <param name="expression">Объект выражения</param> public override void Visit(TrenaryExpression expression) { expression.Expression1.Accept(this); object res1 = _result; expression.Expression2.Accept(this); object res2 = _result; expression.Expression3.Accept(this); object res3 = _result; _result = Convert.ToBoolean(res1) ? Convert.ToDouble(res2) : Convert.ToDouble(res3); }
/// <summary> /// Возвращает объект выражения /// </summary> /// <param name="items">Колекция элементов выражений сомпиляции</param> /// <param name="indexEvent">Индек начала проверки</param> public Expression GetExpression(List <CompiledItem> items, int index) { if (_operatorItemList[0].Kind == eCompiledItemKind.Expression) { index--; } List <Expression> expressionList = new List <Expression>(); for (int i = 0; i < _operatorItemList.Count; i++) { if (items[index].Kind == eCompiledItemKind.Expression) { expressionList.Add(items[index].Expression); } items.RemoveAt(index); } Expression expression; if (Kind == eOperatorKind.Operator) { switch (expressionList.Count) { case 1: expression = new UnaryExpression(Name, expressionList[0]); break; case 2: expression = new BinaryExpresssion(Name, expressionList[0], expressionList[1]); break; case 3: expression = new TrenaryExpression(Name, expressionList[0], expressionList[1], expressionList[2]); break; default: throw new CompiledException("Not Find class for type expression."); } } else { expression = new FunctionExpression(Name, expressionList); } items.Insert(index, new CompiledItem(expression)); return(expression); }
/// <summary> /// Вычисление визита трёхпараметрового выражения /// </summary> /// <param name="expression">Объект выражения</param> public abstract void Visit(TrenaryExpression expression);