コード例 #1
0
        private Tuple <bool, ISymbol> TransformBinary(BinaryOperation op)
        {
            BinaryOperation output       = op;
            var             transformOp1 = TransformGeneric(output.Operand1);

            if (transformOp1.Item1)
            {
                output = op.ReplaceOperand1(transformOp1.Item2) as BinaryOperation;
            }

            var transformOp2 = TransformGeneric(output.Operand2);

            if (transformOp2.Item1)
            {
                output = op.ReplaceOperand2(transformOp2.Item2) as BinaryOperation;
            }

            var transformOccurred = transformOp1.Item1 || transformOp2.Item1;

            if (!output.Matches(_constraint))
            {
                return(new Tuple <bool, ISymbol>(transformOccurred, output));
            }

            var transformed = RunTransformOn(output);

            return(new Tuple <bool, ISymbol>(true, transformed));
        }