/// <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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
 /// <summary>
 /// Вычисление визита трёхпараметрового выражения
 /// </summary>
 /// <param name="expression">Объект выражения</param>
 public abstract void Visit(TrenaryExpression expression);