public Match GetMatch(string s, int pos, Token prevToken)
 {
     if (s[pos] == '(')
         return new Match(1, new Token(Bracket.Opening));
     if (s[pos] == ')')
         return new Match(1, new Token(Bracket.Closing));
     return null;
 }
        public void TestGetValue()
        {
            var token = new Token(1);
            var tree = new ExpressionTree(token, null);

            var result = tree.GetResult();

            Assert.AreEqual(1, result);
        }
 public Match GetMatch(string s, int pos, Token prevToken)
 {
     if (prevToken == null || prevToken.Type != TokenType.Number && prevToken.Type != TokenType.ClosingBracket)
     {
         return null;
     }
     if (s.Substring(pos).StartsWith(binaryOperator.Sign))
     {
         return new Match(binaryOperator.Sign.Length, new Token(binaryOperator));
     }
     return null;
 }
 public Match GetMatch(string s, int pos, Token prevToken)
 {
     if (prevToken != null && prevToken.Type != TokenType.OpeningBracket)
     {
         return null;
     }
     if (s.Substring(pos).StartsWith(unaryOperator.Sign))
     {
         return new Match(unaryOperator.Sign.Length, new Token(unaryOperator));
     }
     return null;
 }
        public void TestGetUnaryOperationResult()
        {
            var child = MockRepository.GenerateMock<IExpressionTree>();
            child.Expect(t => t.GetResult())
                    .Return(1);
            var op = MockRepository.GenerateMock<IUnaryOperator>();
            op.Expect(o => o.Apply(Arg<double>.Is.Equal(1)))
                    .Return(-1);
            var token = new Token(op);
            var tree = new ExpressionTree(token, new List<IExpressionTree> { child });

            var result = tree.GetResult();

            Assert.AreEqual(-1, result);
        }
        public Match GetMatch(string s, int pos, Token prevToken)
        {
            var numberLength = 0;
            double? number = null;
            while (pos + numberLength < s.Length)
            {
                var ss = s.Substring(pos, numberLength+1);

                double parsedNumber;
                if (!Double.TryParse(ss, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out parsedNumber))
                {
                    break;
                }

                number = parsedNumber;
                numberLength++;
            }
            if (!number.HasValue)
                return null;
            return new Match(numberLength, new Token(number.Value));
        }
 public ExpressionTree(Token token, IList<IExpressionTree> children)
 {
     this.Token = token;
     this.children = children;
 }
 public Match(int length, Token token)
 {
     Length = length;
     Token = token;
 }