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()); }
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()); }
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()); }