Пример #1
0
 /// <summary>
 /// Represents simple binary expressions which involve identifier on left and literal on the right
 /// </summary>
 /// <param name="i1"></param>
 /// <param name="o"></param>
 /// <param name="i2"></param>
 internal BinExprNode(IdentNode i1, Operator o, LiteralNode i2)
     : base(i1.Name + o.Name + i2.Name, o.Guid)
 {
     op = o;
     left = i1;
     right = i2;
 }
Пример #2
0
 /// <summary>
 /// Represents compound binary expressions which involve other expressions on the left and right side
 /// </summary>
 /// <param name="e1"></param>
 /// <param name="o"></param>
 /// <param name="e2"></param>
 internal BinExprNode(Expr e1, Operator o, Expr e2)
     : base(o.Name, o.Guid)
 {
     op = o;
     left = e1;
     right = e2;
 }
        private void EmitBinaryExpNode(Operator node, out AssociativeNode outnode)
        {
            Validity.Assert(node != null);

            Dictionary<int, Node> nodes = node.GetChildrenWithIndices();
            Validity.Assert(nodes.Count <= 2);

            BinaryExpressionNode expressionNode = new BinaryExpressionNode();

            // Create operator from input node
            switch (node.Name)
            {
                case "=":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.assign;
                    break;
                case "+":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.add;
                    break;
                case "-":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.sub;
                    break;
                case "*":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.mul;
                    break;
                case "/":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.div;
                    break;
                case "%":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.mod;
                    break;
                case "==":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.eq;
                    break;
                case "!=":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.nq;
                    break;
                case ">=":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.ge;
                    break;
                case ">":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.gt;
                    break;
                case "<=":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.le;
                    break;
                case "<":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.lt;
                    break;
                case "&&":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.and;
                    break;
                case "||":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.or;
                    break;
                case "&":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.bitwiseand;
                    break;
                case "|":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.bitwiseor;
                    break;
                case "^":
                    expressionNode.Optr = ProtoCore.DSASM.Operator.bitwisexor;
                    break;
                default: break;
            }

            AssociativeNode identNode1 = new NullNode();
            AssociativeNode identNode2 = new NullNode();

            if (nodes.Count == 2)
            {
                // Create BinaryExpressionNode from identNode1, identNode2 and operator                
                DFSTraverse(nodes[0], out identNode1);
                DFSTraverse(nodes[1], out identNode2);
                
            }
            else if (nodes.Count == 1)
            {
                // Create BinaryExpressionNode from identNode1, null 
                DFSTraverse(nodes[0], out identNode1);
            }
            expressionNode.LeftNode = identNode1;
            expressionNode.RightNode = identNode2;

            //(AstRootNode as CodeBlockNode).Body.Add(expressionNode);
            BinaryExpressionNode assignmentNode = new BinaryExpressionNode();
            assignmentNode.LeftNode = new IdentifierNode(node.tempName);
            assignmentNode.Optr = ProtoCore.DSASM.Operator.assign;
            assignmentNode.RightNode = expressionNode;
            assignmentNode.Guid = node.Guid;

            Validity.Assert(gc != null);
            gc.HandleNewNode(assignmentNode);

            outnode = assignmentNode;
        }
Пример #4
0
 /// <summary>
 /// Represents binary expressions which involve identifier on the left and compound expression on the right
 /// </summary>
 /// <param name="e1"></param>
 /// <param name="op"></param>
 /// <param name="e2"></param>
 public BinExprNode(IdentNode e1, Operator op, Expr e2)
     : base(op.Name, op.Guid)
 {
     left = e1;
     this.op = op;
     right = e2;
 }
Пример #5
0
        public bool CreateOperatorNode(uint guid, string opSymbol, string tempName, string replicationGuide)
        {
            if (guid < 0)
                throw new ArgumentException("Invalid argument value!", "guid");
            if (String.IsNullOrEmpty(opSymbol))
                throw new ArgumentException("Invalid argument value!", "opSymbol");

            Operator op = new Operator(opSymbol, guid, replicationGuide);
            op.tempName = tempName;
            graph.AddNode(op);
            return true;
        }