示例#1
0
        public override AssociativeNode VisitRangeExprNode(RangeExprNode node)
        {
            var newFromNode = node.From.Accept(this);

            if (node.From != newFromNode)
            {
                node.From = newFromNode;
            }

            var newToNode = node.To.Accept(this);

            if (node.To != newToNode)
            {
                node.To = newToNode;
            }

            if (node.Step != null)
            {
                var newStepNode = node.Step.Accept(this);
                if (node.Step != newStepNode)
                {
                    node.Step = newStepNode;
                }
            }

            return(node);
        }
示例#2
0
            public AssociativeNode GetAstNode(Dictionary <string, AssociativeNode> idLookup)
            {
                var rangeExpr = new RangeExprNode
                {
                    From         = _start.GetAstNode(idLookup),
                    To           = _end.GetAstNode(idLookup),
                    Step         = _step.GetAstNode(idLookup),
                    StepOperator = GetRangeExpressionOperator()
                };

                return(rangeExpr);
            }
示例#3
0
            public AssociativeNode GetAstNode(Dictionary <string, AssociativeNode> idLookup)
            {
                var rangeExpr = new RangeExprNode
                {
                    From = _start.GetAstNode(idLookup),
                    To   = _count.GetAstNode(idLookup),
                    Step = _step.GetAstNode(idLookup),
                    HasRangeAmountOperator = true,
                    StepOperator           = RangeStepOperator.StepSize
                };

                return(rangeExpr);
            }
示例#4
0
            public override bool VisitRangeExprNode(RangeExprNode node)
            {
                if (forDefinition)
                {
                    return(false);
                }

                if (node.FromNode.Accept(this) || node.ToNode.Accept(this))
                {
                    return(true);
                }

                return(node.StepNode != null?node.StepNode.Accept(this) : false);
            }
示例#5
0
        public virtual void VisitRangeExprNode(RangeExprNode node)
        {
            node.From.Accept(this);
            node.To.Accept(this);

            if (node.Step != null)
            {
                node.Step.Accept(this);
            }

            if (node.ArrayDimensions != null)
            {
                node.ArrayDimensions.Accept(this);
            }
        }
示例#6
0
        private void EmitRangeExpNode(Func node, out AssociativeNode outnode)
        {
            Validity.Assert(node != null);
            Validity.Assert(node.isRange);

            RangeExprNode rangeNode = new RangeExprNode();

            // Set FromNode, ToNode, stepOperator and StepNode for rangeNode
            Dictionary <int, Node> nodes = node.GetChildrenWithIndices();
            //int numParams = node.numParameters;

            AssociativeNode startNode = null;
            AssociativeNode endNode   = null;
            AssociativeNode stepNode  = null;

            if (nodes.Count >= 1)
            {
                DFSTraverse(nodes[0], out startNode);
            }
            if (nodes.Count >= 2)
            {
                DFSTraverse(nodes[1], out endNode);
            }
            if (nodes.Count >= 3)
            {
                DFSTraverse(nodes[2], out stepNode);
            }
            rangeNode.FromNode = startNode;
            rangeNode.ToNode   = endNode;
            rangeNode.StepNode = stepNode;

            if (node.Name == "Range.ByIncrementValue")
            {
                rangeNode.stepoperator = ProtoCore.DSASM.RangeStepOperator.stepsize;
            }
            else if (node.Name == "Range.ByIntervals")
            {
                rangeNode.stepoperator = ProtoCore.DSASM.RangeStepOperator.num;
            }
            else
            {
                rangeNode.stepoperator = ProtoCore.DSASM.RangeStepOperator.approxsize;
            }

            outnode = rangeNode;
            //outnode = CreateBinaryExpNode(node, rangeNode);
        }
        public virtual bool VisitRangeExprNode(RangeExprNode node)
        {
            node.From.Accept(this);
            node.To.Accept(this);

            if (node.Step != null)
            {
                node.Step.Accept(this);
            }

            if (node.ArrayDimensions != null)
            {
                node.ArrayDimensions.Accept(this);
            }

            return(true);
        }
示例#8
0
文件: Parser.cs 项目: zjloscar/Dynamo
        void RangeExpr(out Node node)
        {
            rel(out node);
            if (la.kind == 17)
            {
                RangeExprNode rnode = new RangeExprNode();
                rnode.FromNode = node;

                Get();
                rel(out node);
                rnode.ToNode = node;
                if (la.kind == 17)
                {
                    RangeStepOperator op;
                    Get();
                    rangeStepOperator(out op);
                    rnode.stepoperator = op;
                    rel(out node);
                    rnode.StepNode = node;
                }
                node = rnode;
            }
        }
示例#9
0
        private void TraverseToSplit(AssociativeNode node, out AssociativeNode outNode, ref List <AssociativeNode> splitList)
        {
            if (node is BinaryExpressionNode)
            {
                BinaryExpressionNode ben = node as BinaryExpressionNode;

                BinaryExpressionNode newNode = new BinaryExpressionNode();
                AssociativeNode      lNode   = null;
                TraverseToSplit(ben.LeftNode, out lNode, ref splitList);
                newNode.LeftNode = lNode;
                newNode.Optr     = ben.Optr;

                AssociativeNode rNode = null;
                TraverseToSplit(ben.RightNode, out rNode, ref splitList);
                newNode.RightNode = rNode;

                if (ben.Optr == ProtoCore.DSASM.Operator.assign)
                {
                    if (NotEnlisted(splitList, newNode))
                    {
                        splitList.Add(newNode);
                    }
                    outNode = lNode;
                }
                else
                {
                    outNode = newNode;
                }
            }
            else if (node is FunctionCallNode)
            {
                FunctionCallNode funcCallNode = node as FunctionCallNode;
                AssociativeNode  statement    = null;
                foreach (AssociativeNode argNode in funcCallNode.FormalArguments)
                {
                    TraverseToSplit(argNode, out statement, ref splitList);
                }
                for (int i = 0; i < funcCallNode.FormalArguments.Count; i++)
                {
                    AssociativeNode argNode = funcCallNode.FormalArguments[i];
                    if (argNode is BinaryExpressionNode)
                    {
                        funcCallNode.FormalArguments[i] = (argNode as BinaryExpressionNode).LeftNode;
                    }
                }
                //if (statement is BinaryExpressionNode)
                //{
                //    splitList.Add(statement);
                //}
                outNode = funcCallNode;
            }
            else if (node is FunctionDotCallNode)
            {
                FunctionDotCallNode funcDotNode = node as FunctionDotCallNode;
                AssociativeNode     statement   = null;
                TraverseToSplit(funcDotNode.FunctionCall, out statement, ref splitList);
                funcDotNode.FunctionCall = (statement as FunctionCallNode);
                TraverseToSplit(funcDotNode.DotCall.FormalArguments[0], out statement, ref splitList);
                if (statement is BinaryExpressionNode)
                {
                    funcDotNode.DotCall.FormalArguments[0] = (statement as BinaryExpressionNode).LeftNode;
                }
                else
                {
                    funcDotNode.DotCall.FormalArguments[0] = statement;
                }
                outNode = funcDotNode;
            }
            else if (node is ProtoCore.AST.AssociativeAST.ImportNode)
            {
                outNode = node;
                splitList.Add(outNode);
            }
            else if (node is ProtoCore.AST.AssociativeAST.ArrayIndexerNode)
            {
                ArrayIndexerNode arrIdxNode = node as ArrayIndexerNode;
                AssociativeNode  statement  = null;
                TraverseToSplit(arrIdxNode.Array, out statement, ref splitList);
                arrIdxNode.Array = statement;
                outNode          = arrIdxNode;
            }
            else if (node is ProtoCore.AST.AssociativeAST.ExprListNode)
            {
                ExprListNode    exprListNode = node as ExprListNode;
                AssociativeNode statement    = null;
                //for (int i=0; i<exprListNode.list.Count; i++)
                foreach (AssociativeNode listNode in exprListNode.list)
                {
                    TraverseToSplit(listNode, out statement, ref splitList);
                }
                for (int i = 0; i < exprListNode.list.Count; i++)
                {
                    AssociativeNode argNode = exprListNode.list[i];
                    if (argNode is BinaryExpressionNode)
                    {
                        exprListNode.list[i] = (argNode as BinaryExpressionNode).LeftNode;
                    }
                }
                outNode = exprListNode;
            }
            //else if (node is ProtoCore.AST.AssociativeAST.ArrayNode)
            //{
            //    k
            //}
            else if (node is ProtoCore.AST.AssociativeAST.RangeExprNode)
            {
                RangeExprNode   rangeExprNode = node as RangeExprNode;
                AssociativeNode statement     = null;
                TraverseToSplit(rangeExprNode.FromNode, out statement, ref splitList);
                TraverseToSplit(rangeExprNode.StepNode, out statement, ref splitList);
                TraverseToSplit(rangeExprNode.ToNode, out statement, ref splitList);
                if (rangeExprNode.FromNode is BinaryExpressionNode)
                {
                    rangeExprNode.FromNode = (rangeExprNode.FromNode as BinaryExpressionNode).LeftNode;
                }
                if (rangeExprNode.StepNode is BinaryExpressionNode)
                {
                    rangeExprNode.StepNode = (rangeExprNode.StepNode as BinaryExpressionNode).LeftNode;
                }
                if (rangeExprNode.ToNode is BinaryExpressionNode)
                {
                    rangeExprNode.ToNode = (rangeExprNode.ToNode as BinaryExpressionNode).LeftNode;
                }
                outNode = rangeExprNode;
            }
            else
            {
                outNode = node;
            }
        }
示例#10
0
 public virtual TAssociative VisitRangeExprNode(RangeExprNode node)
 {
     return(VisitAssociativeNode(node));
 }
示例#11
0
 public RangeExprNode(RangeExprNode rhs) : base(rhs)
 {
     FromNode = ProtoCore.Utils.NodeUtils.Clone(rhs.FromNode);
     ToNode = ProtoCore.Utils.NodeUtils.Clone(rhs.ToNode);
     if (null != rhs.StepNode)
     {
         StepNode = ProtoCore.Utils.NodeUtils.Clone(rhs.StepNode);
     }
     stepoperator = rhs.stepoperator;
     HasRangeAmountOperator = rhs.HasRangeAmountOperator;
 }
示例#12
0
 public RangeExprNode(RangeExprNode rhs) : base(rhs)
 {
     From = NodeUtils.Clone(rhs.From);
     To = NodeUtils.Clone(rhs.To);
     if (null != rhs.Step)
     {
         Step = NodeUtils.Clone(rhs.Step);
     }
     StepOperator = rhs.StepOperator;
     HasRangeAmountOperator = rhs.HasRangeAmountOperator;
 }