/// <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; }
/// <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; }
/// <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; }
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; }