コード例 #1
0
        public override bool Evaluate(IModel m)
        {
            IComparable a = LeftHandSide.GetResult(m);
            IComparable b = RightHandSide.GetResult(m);

            return(a.CompareTo(b) <= 0);
        }
コード例 #2
0
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            var production = obj as Production;

            if (production == null)
            {
                return(false);
            }
            if (!LeftHandSide.Equals(production.LeftHandSide))
            {
                return(false);
            }
            var rightHandSideCount = RightHandSide.Count;

            if (rightHandSideCount != production.RightHandSide.Count)
            {
                return(false);
            }
            for (int i = 0; i < rightHandSideCount; i++)
            {
                if (!RightHandSide[i].Equals(production.RightHandSide[i]))
                {
                    return(false);
                }
            }
            return(true);
        }
コード例 #3
0
        public Equation Clone()
        {
            Expression lhs = LeftHandSide.Clone();
            Expression rhs = RightHandSide.Clone();

            return(new Equation(lhs, ComparisonOperator, rhs));
        }
コード例 #4
0
 /// <summary>
 ///     Returns whether the value(s) contained by the given other LRItem equals this object.
 /// </summary>
 /// <param name="other"></param>
 /// <returns></returns>
 public bool Equals(LRItem <T> other)
 {
     if (LookaheadElement != null &&
         other.LookaheadElement != null)
     {
         return(LeftHandSide.Equals(other.LeftHandSide) && DotIndex == other.DotIndex && ProductionElements.SequenceEqual(other.ProductionElements) && LookaheadElement.Equals(other.LookaheadElement));
     }
     return(LeftHandSide.Equals(other.LeftHandSide) && DotIndex == other.DotIndex && ProductionElements.SequenceEqual(other.ProductionElements));
 }
コード例 #5
0
ファイル: Sequent.cs プロジェクト: poz1/Poz1.LogicProver
        public Sequent Clone()
        {
            var clone = (Sequent)MemberwiseClone();

            clone.LeftHandSide  = LeftHandSide.Clone();
            clone.RightHandSide = RightHandSide.Clone();

            return(clone);
        }
コード例 #6
0
        private int ComputeHashCode()
        {
            var hash = HashCode.ComputeIncrementalHash(LeftHandSide.GetHashCode(), 0, true);

            for (var s = 0; s < RightHandSide.Count; s++)
            {
                var symbol = RightHandSide[s];
                hash = HashCode.ComputeIncrementalHash(symbol.GetHashCode(), hash);
            }
            return(hash);
        }
コード例 #7
0
ファイル: Sequent.cs プロジェクト: poz1/Poz1.LogicProver
        public override string ToString()
        {
            var stringBuilder = new StringBuilder();

            stringBuilder.Append(LeftHandSide.ToString());
            stringBuilder.Append(" ← ");
            stringBuilder.Append(RightHandSide.ToString());

            if (Justification != null)
            {
                stringBuilder.Append("  :: ");
                stringBuilder.Append(Justification);
            }

            return(stringBuilder.ToString());
        }
コード例 #8
0
        /// <summary>
        /// Sets up the command
        /// </summary>
        public override void Setup()
        {
            ILGenerator Generator = Utilities.Reflection.Emit.BaseClasses.MethodBase.CurrentMethod.Generator;

            if (LeftHandSide is FieldBuilder || LeftHandSide is IPropertyBuilder)
            {
                Generator.Emit(OpCodes.Ldarg_0);
            }
            LeftHandSide.Load(Generator);
            if (RightHandSide is FieldBuilder || RightHandSide is IPropertyBuilder)
            {
                Generator.Emit(OpCodes.Ldarg_0);
            }
            RightHandSide.Load(Generator);
            if (ComparisonType == Comparison.Equal)
            {
                Generator.Emit(OpCodes.Ceq);
                Generator.Emit(OpCodes.Ldc_I4_0);
            }
            Generator.Emit(ComparisonOpCodes[ComparisonType], EndIfLabel);
        }
コード例 #9
0
ファイル: If.cs プロジェクト: xiaoxiongnpu/Rule-Engine
        /// <summary>
        ///     Sets up the command
        /// </summary>
        public override void Setup()
        {
            ILGenerator generator = MethodBase.CurrentMethod.Generator;

            if (LeftHandSide is FieldBuilder || LeftHandSide is IPropertyBuilder)
            {
                generator.Emit(OpCodes.Ldarg_0);
            }
            LeftHandSide.Load(generator);
            if (RightHandSide is FieldBuilder || RightHandSide is IPropertyBuilder)
            {
                generator.Emit(OpCodes.Ldarg_0);
            }
            RightHandSide.Load(generator);
            if (ComparisonType == Comparison.Equal)
            {
                generator.Emit(OpCodes.Ceq);
                generator.Emit(OpCodes.Ldc_I4_0);
            }
            generator.Emit(ComparisonOpCodes[ComparisonType], EndIfLabel);
        }
コード例 #10
0
        public override void Setup()
        {
            ILGenerator Generator = Utilities.Reflection.Emit.BaseClasses.MethodBase.CurrentMethod.Generator;

            if (RightHandSide.DataType.IsValueType &&
                !LeftHandSide.DataType.IsValueType)
            {
                RightHandSide = Utilities.Reflection.Emit.BaseClasses.MethodBase.CurrentMethod.Box(RightHandSide);
            }
            else if (!RightHandSide.DataType.IsValueType &&
                     LeftHandSide.DataType.IsValueType)
            {
                RightHandSide = Utilities.Reflection.Emit.BaseClasses.MethodBase.CurrentMethod.UnBox(RightHandSide, LeftHandSide.DataType);
            }
            else if (!RightHandSide.DataType.IsValueType &&
                     !LeftHandSide.DataType.IsValueType &&
                     RightHandSide.DataType != LeftHandSide.DataType)
            {
                RightHandSide = Utilities.Reflection.Emit.BaseClasses.MethodBase.CurrentMethod.Cast(RightHandSide, LeftHandSide.DataType);
            }
            if (LeftHandSide is FieldBuilder || LeftHandSide is IPropertyBuilder)
            {
                Generator.Emit(OpCodes.Ldarg_0);
            }
            if (RightHandSide is FieldBuilder || RightHandSide is IPropertyBuilder)
            {
                Generator.Emit(OpCodes.Ldarg_0);
            }
            RightHandSide.Load(Generator);
            if (RightHandSide.DataType != LeftHandSide.DataType)
            {
                if (ConversionOpCodes.ContainsKey(LeftHandSide.DataType))
                {
                    Generator.Emit(ConversionOpCodes[LeftHandSide.DataType]);
                }
            }
            LeftHandSide.Save(Generator);
        }
コード例 #11
0
        public override void Setup()
        {
            ILGenerator Generator = Utilities.Reflection.Emit.BaseClasses.MethodBase.CurrentMethod.Generator;

            if (LeftHandSide is FieldBuilder || LeftHandSide is IPropertyBuilder)
            {
                Generator.Emit(OpCodes.Ldarg_0);
            }
            LeftHandSide.Load(Generator);
            if (RightHandSide is FieldBuilder || RightHandSide is IPropertyBuilder)
            {
                Generator.Emit(OpCodes.Ldarg_0);
            }
            RightHandSide.Load(Generator);
            if (LeftHandSide.DataType != RightHandSide.DataType)
            {
                if (ConversionOpCodes.ContainsKey(LeftHandSide.DataType))
                {
                    Generator.Emit(ConversionOpCodes[LeftHandSide.DataType]);
                }
            }
            Generator.Emit(OpCodes.Rem);
            Result.Save(Generator);
        }
コード例 #12
0
ファイル: Subtract.cs プロジェクト: xiaoxiongnpu/Rule-Engine
        /// <summary>
        ///     Sets up the command
        /// </summary>
        public override void Setup()
        {
            ILGenerator generator = MethodBase.CurrentMethod.Generator;

            if (LeftHandSide is FieldBuilder || LeftHandSide is IPropertyBuilder)
            {
                generator.Emit(OpCodes.Ldarg_0);
            }
            LeftHandSide.Load(generator);
            if (RightHandSide is FieldBuilder || RightHandSide is IPropertyBuilder)
            {
                generator.Emit(OpCodes.Ldarg_0);
            }
            RightHandSide.Load(generator);
            if (LeftHandSide.DataType != RightHandSide.DataType)
            {
                if (ConversionOpCodes.ContainsKey(LeftHandSide.DataType))
                {
                    generator.Emit(ConversionOpCodes[LeftHandSide.DataType]);
                }
            }
            generator.Emit(OpCodes.Sub);
            Result.Save(generator);
        }
コード例 #13
0
 public override string ToString()
 {
     return(string.Join(" ", new string[] { LeftHandSide.ToString(), ComparisonOperator.AsString(), RightHandSide.ToString() }));
 }
コード例 #14
0
 public override IProjection[] GetProjections()
 {
     return(LeftHandSide.GetProjections().Concat(RightHandSide.GetProjections()).ToArray());
 }
コード例 #15
0
 protected override bool ThisEquals(Production other)
 {
     return(LeftHandSide.Equals(other.LeftHandSide) && this.rightHandSide.SequenceEqual(other.rightHandSide));
 }
コード例 #16
0
 public override string ToString()
 {
     Debug.Assert(_leftHandSide != null);
     Debug.Assert(_rightHandSide != null);
     return(string.Format("{0}({1},{2})", Operator, LeftHandSide.ToString(), RightHandSide.ToString()));
 }