示例#1
0
        static void Main(string[] args)
        {
            // Expression expr = new BinaryOperation(
            //  new Value(15),
            //  new BinaryOperation(new Value(3), new Value(9), multiplication),
            //	addittion
            // );
            BinaryExpressionBuilder rightExprBuilder = new BinaryExpressionBuilder();

            rightExprBuilder.Left      = new Value(3);
            rightExprBuilder.Operation = multiplication;
            rightExprBuilder.Right     = new Value(9);
            Expression rightExpr = rightExprBuilder.Get();

            BinaryExpressionBuilder exprBuilder = new BinaryExpressionBuilder();

            exprBuilder.Left      = new Value(15);
            exprBuilder.Operation = addition;
            exprBuilder.Right     = rightExpr;

            Expression expr = exprBuilder.Get();

            Console.WriteLine(expr.GetValue());

            Console.WriteLine("Enter an expression:");
            Console.WriteLine(ParseExpression(Console.In).GetValue());
        }
示例#2
0
        static void Main(string[] args)
        {
            ArrayBuilder <int> builder = new ArrayBuilder <int>();

            for (int i = 0; i < 20; i += 1)
            {
                builder.Add(i * 10);
            }

            int[] array = builder.Get();
            Console.WriteLine(String.Join(", ", array));


            // Expression expr = new Addition(
            //  new Value(15),
            //  new Multiplication(new Value(3), new Value(9))
            // );
            BinaryExpressionBuilder rightExprBuilder = new BinaryExpressionBuilder();

            rightExprBuilder.Left      = new Value(3);
            rightExprBuilder.Operation = BinaryExpressionBuilder.Operations.Multiplication;
            rightExprBuilder.Right     = new Value(9);
            Expression rightExpr = rightExprBuilder.Get();

            BinaryExpressionBuilder exprBuilder = new BinaryExpressionBuilder();

            exprBuilder.Left      = new Value(15);
            exprBuilder.Operation = BinaryExpressionBuilder.Operations.Addition;
            exprBuilder.Right     = rightExpr;

            Expression expr = exprBuilder.Get();

            Console.WriteLine(expr.GetValue());
        }
示例#3
0
        static Expression ParseExpression(TextReader reader)
        {
            SkipWhitespace(reader);

            int next = reader.Peek();

            if (next != '(')
            {
                StringBuilder stringBuilder = new StringBuilder();

                if (next == '-')
                {
                    stringBuilder.Append((char)reader.Read());
                    next = reader.Peek();
                }

                while (next != -1 && char.IsDigit((char)next))
                {
                    stringBuilder.Append((char)reader.Read());
                    next = reader.Peek();
                }

                return(new Value(int.Parse(stringBuilder.ToString())));
            }
            reader.Read();

            BinaryExpressionBuilder builder = new BinaryExpressionBuilder();

            builder.Left = ParseExpression(reader);

            SkipWhitespace(reader);
            switch (reader.Read())
            {
            case '+':
                builder.Operation = addition;
                break;

            case '-':
                builder.Operation = subtraction;
                break;

            case '*':
                builder.Operation = multiplication;
                break;

            case '/':
                builder.Operation = division;
                break;

            default:
                throw new Exception("Invalid operation");
            }

            builder.Right = ParseExpression(reader);

            SkipWhitespace(reader);
            if (reader.Read() != ')')
            {
                throw new Exception("Parentheses do not match");
            }

            return(builder.Get());
        }