コード例 #1
0
 public Expr Multiply(MultiplyExpr multi)
 {
     var tail = multi.Tail();
     var expr1 = Builder.Multiply(multi.Args.First().Visit(this), tail);
     var expr2 = Builder.Multiply(multi.Args.First(), tail.Visit(this));
     return Builder.Add(expr1, expr2);
 }
コード例 #2
0
ファイル: CheckExpressions.cs プロジェクト: Nisha1990/poly-ql
        protected IType CheckExpr(MultiplyExpr expr)
        {
            IType a = CheckExpr(expr.Expr1);
            IType b = CheckExpr(expr.Expr2);

            if (!(a is NumericType) || !a.CompatibleWith(b))
            {
                AddError(String.Format("Multiplication not possible. Incompatible types: '{0}', '{1}'. Only numeric types are supported.",
                    a.ToString(), b.ToString()), true, expr.SourcePosition);

                return NumericType.Instance;
            }

            return (a is RealType || b is RealType) ? (IType)RealType.Instance : (IType)IntType.Instance;
        }
コード例 #3
0
 public Number Multiply(MultiplyExpr multi)
 {
     return EvaluateMulti(multi, (x1, x2) => x1 * x2);
 }