private SyntaxToken EvalUnary(ConstantSyntaxToken value, UnaryOperationType type) { switch (type) { case UnaryOperationType.Factorial: return SyntaxToken.Constant(MathEx.Factorial(value.Value)); default: throw new NotSupportedException(); } }
private SyntaxToken EvalBinary(ConstantSyntaxToken left, ConstantSyntaxToken right, BinaryOperationType type) { double lval = left.Value; double rval = right.Value; switch (type) { case BinaryOperationType.Add: return SyntaxToken.Constant(lval + rval); case BinaryOperationType.Subtract: return SyntaxToken.Constant(lval - rval); case BinaryOperationType.Multiply: return SyntaxToken.Constant(lval * rval); case BinaryOperationType.Divide: return SyntaxToken.Constant(lval / rval); case BinaryOperationType.Modulus: return SyntaxToken.Constant(lval % rval); case BinaryOperationType.Power: return SyntaxToken.Constant(Math.Pow(lval, rval)); default: throw new NotSupportedException(); } }
protected override SyntaxToken VisitConstant(ConstantSyntaxToken token) { return(SyntaxToken.Constant(0)); }
protected override SyntaxToken VisitConstant(ConstantSyntaxToken token) { return(new NullSyntaxToken()); }
protected override SyntaxToken VisitConstant(ConstantSyntaxToken token) { return token; }
protected abstract SyntaxToken VisitConstant(ConstantSyntaxToken token);