コード例 #1
0
        public void Visit(ExpressionNode expressionNode)
        {
            foreach (var x in expressionNode.Operands)
            {
                x.Accept(this);
            }

            if (expressionNode.IsUnary)
            {
                switch (expressionNode.OperatorName)
                {
                case Operator.PointerAddress:
                    InnerCode.Add(new AddressOf(expressionNode.Reference, expressionNode.Operands.First().Reference));
                    break;

                case Operator.PointerValue:
                    InnerCode.Add(new ContentOf(expressionNode.Reference, expressionNode.Operands.First().Reference));
                    break;
                }
            }
            else
            {
                var destination = expressionNode.Reference;
                var left        = expressionNode.Operands[0].Reference;
                var right       = expressionNode.Operands[1].Reference;

                IntermediateCode emitted;

                if (IsBoolean(expressionNode))
                {
                    emitted = new BoolExpressionAssignment(expressionNode.OperatorName.ToBooleanOperator(), destination, left, right);
                }
                else
                {
                    emitted = new ArithmeticAssignment(expressionNode.OperatorName.ToArithmeticOperator(), destination, left, right);
                }

                InnerCode.Add(emitted);
            }
        }
コード例 #2
0
 public void Visit(BoolExpressionAssignment boolExpressionAssignment)
 {
     AddReference(boolExpressionAssignment.Target);
     AddReference(boolExpressionAssignment.Left);
     AddReference(boolExpressionAssignment.Right);
 }