示例#1
0
        public static ValueList CalculateList(ExpressionNode[] nodes)
        {
            if (nodes.Length == 0)
                return new ValueList();

            for (var i = 1; i < nodes.Length; i++)
            {
                var filter = nodes[i];

                if (filter.Operator == ',')
                    return CalculateCommaList(nodes);
            }

            for (var i = 1; i < nodes.Length; i++)
            {
                var filter = nodes[i];

                if (filter.Operator == ' ')
                    return CalculateSpaceList(nodes);
            }

            return new ValueList(CalculateTree(nodes));
        }
示例#2
0
        public static ExpressionNode CalculateTree(ExpressionNode[] nodes)
        {
            if (nodes.Length == 0)
                return null;

            if (nodes.Length == 1) return nodes[0];

            if (nodes.Length == 2) return new CombineNode(nodes[0], nodes[1], nodes[1].Operator);

            var president = int.MaxValue;

            for (var i = 1; i < nodes.Length; i++)
            {
                var filter = nodes[i];
                var sortIndex = getOperatorIndex(filter.Operator);

                if (sortIndex < president) president = sortIndex;
            }

            var index = 0;
            var op = '+';
            for (index = 1; index < nodes.Length; index++)
            {
                var filter = nodes[index];
                if (getOperatorIndex(filter.Operator) == president)
                {
                    op = filter.Operator;
                    break;
                }
            }

            var a = CalculateTree(nodes.Take(index).ToArray());
            var b = CalculateTree(nodes.Skip(index).ToArray());

            return new CombineNode(a, b, op);
        }
示例#3
0
 public ElseNode()
 {
     _condition = new ValueNode("true");
 }
示例#4
0
 public ElseNode(ValueList condition)
 {
     _condition = condition;
 }
示例#5
0
        private static ValueList CalculateSpaceList(ExpressionNode[] nodes)
        {
            var result = new ValueList();
            var skip = 0;
            for (var i = 1; i < nodes.Length; i++)
            {
                var filter = nodes[i];

                if (filter.Operator == ' ')
                {
                    var a = CalculateList(nodes.Skip(skip).Take(i - skip).ToArray());
                    result.Add(a);
                    skip = i;
                }
            }

            result.Add(CalculateList(nodes.Skip(skip).ToArray()));

            return result;
        }
示例#6
0
 public Expression(ExpressionNode root)
 {
     Root = root;
 }
示例#7
0
 public VariableNode(string name, ExpressionNode expression)
 {
     Name = name;
     Expression = new Expression(expression);
 }
示例#8
0
 public IfNode(ValueList condition)
 {
     _condition = condition;
     Elses = new List<ElseNode>();
 }
示例#9
0
 public CombineNode(ExpressionNode a, ExpressionNode b, char op)
 {
     A = a;
     B = b;
     CombineOperator = op;
 }