public void TestAppendString(double value, string expected)
        {
            var expr = new FloatConstantExpression((float)value);

            var builder = new StringBuilder();

            expr.AppendString(builder);
            Assert.That(builder.ToString(), Is.EqualTo(expected));
        }
        public void TestAppendStringCulture(double value, string expected)
        {
            using (var cultureOverride = new CultureOverride("fr-FR"))
            {
                var expr = new FloatConstantExpression((float)value);

                var builder = new StringBuilder();
                expr.AppendString(builder);
                Assert.That(builder.ToString(), Is.EqualTo(expected));
            }
        }
        private static bool MergeFields(Field field, Term term, MathematicOperation operation)
        {
            ExpressionBase right;

            if (field.Type == FieldType.Value)
            {
                right = new IntegerConstantExpression((int)field.Value);
            }
            else if (field.Type == FieldType.Float)
            {
                right = new FloatConstantExpression(field.Float);
            }
            else
            {
                return(false);
            }

            ExpressionBase left = null;

            if (term.multiplier == 1.0)
            {
                if (term.field.Type == FieldType.Value)
                {
                    left = new IntegerConstantExpression((int)term.field.Value);
                }
                else if (term.field.Type == FieldType.Float)
                {
                    left = new FloatConstantExpression(term.field.Float);
                }
            }

            if (left == null)
            {
                FloatConstantExpression floatRight;
                switch (operation)
                {
                case MathematicOperation.Multiply:
                    floatRight = FloatConstantExpression.ConvertFrom(right) as FloatConstantExpression;
                    if (floatRight == null)
                    {
                        return(false);
                    }

                    term.multiplier *= floatRight.Value;
                    return(true);

                case MathematicOperation.Divide:
                    floatRight = FloatConstantExpression.ConvertFrom(right) as FloatConstantExpression;
                    if (floatRight == null)
                    {
                        return(false);
                    }

                    term.multiplier /= floatRight.Value;
                    return(true);

                default:
                    return(false);
                }
            }

            var mathematicExpression = new MathematicExpression(left, operation, right);

            term.field = AchievementBuilder.CreateFieldFromExpression(mathematicExpression.MergeOperands());
            return(true);
        }
Exemple #4
0
        private Expression Factor()
        {
            Expression expr = null;

            switch (look.Tag)
            {
            case '(':
                Move();
                expr = Bool();
                Match(')');
                return(expr);

            case Tags.NUMBER:
                IntegerToken token = (IntegerToken)look;
                expr = new IntConstantExpression(token.Value);
                Move();
                return(expr);

            case Tags.REAL:
                RealToken realToken = (RealToken)look;
                expr = new FloatConstantExpression(realToken.Value);
                Move();
                return(expr);

            case Tags.TRUE:
                Move();
                return(BoolConstantExpression.True);;

            case Tags.FALSE:
                Move();
                return(BoolConstantExpression.False);

            case Tags.ID:
                Move();

                if (look.Tag == '(')
                {
                    return(FuncCallExpression());
                }
                else
                {
                    VariableUseExpression varUseExpr = VariableUseExpression();
                    if (look.Tag == Tags.INCR)
                    {
                        Expression incrExpr = UnaryArithmeticExpression.CreatePostIncrement(varUseExpr);
                        Move();
                        return(incrExpr);
                    }
                    if (look.Tag == Tags.DECR)
                    {
                        Expression decrExpr = UnaryArithmeticExpression.CreatePostDecrement(varUseExpr);
                        Move();
                        return(decrExpr);
                    }
                    if (look.Tag == '=')
                    {
                        Move();
                        return(new VariableAssignExpression(varUseExpr, Bool()));
                    }

                    return(varUseExpr);
                }
            }

            Error("Syntax error");
            return(null);
        }