示例#1
0
        public void FixExpressions(List <MathExpression> expressions)
        {
            bool listHasChanged = true;

            while (listHasChanged)
            {
                listHasChanged = false;
                for (int i = 0; i < expressions.Count; i++)
                {
                    expressions[i].Expression = expressions[i].Expression.Trim();
                    if (MathRegex.IsNumberAndOperator(expressions[i].Expression))
                    {
                        splitByOperator(expressions, expressions[i].Expression, i);
                        listHasChanged = true;
                        break;
                    }
                    if (expressions[i].IsEmpty())
                    {
                        expressions.RemoveAt(i);
                        listHasChanged = true;
                        break;
                    }
                }
            }
        }
示例#2
0
 public void SetUp()
 {
     _mathRegex = new MathRegex();
     _fixer = new ExpressionFixer();
     _lexer = new MathLexer(_fixer);
     _calculator = new Calculator();
     _calcProxy = new CalcProxy(new Validator(-100, 100),
                                    _calculator);
     _resolver = new Resolver(_lexer, new Precedence());
     _parser = new MathParser(_lexer, _resolver);
 }
示例#3
0
        private List <MathToken> createTokensFromStrings(string[] items)
        {
            List <MathToken> tokens = new List <MathToken>();

            foreach (String item in items)
            {
                if (MathRegex.IsOperator(item))
                {
                    tokens.Add(OperatorFactory.Create(item));
                }
                else
                {
                    tokens.Add(new MathNumber(item));
                }
            }
            return(tokens);
        }
示例#4
0
        public int ProcessExpression(string expression)
        {
            List <MathExpression> subExpressions = _lexer.GetExpressions(expression);
            String flatExpression = String.Empty;

            foreach (MathExpression subExp in subExpressions)
            {
                if (MathRegex.IsSubExpression(subExp.Expression))
                {
                    flatExpression += _resolver.ResolveSimpleExpression(subExp.Expression);
                }
                else
                {
                    flatExpression += " " + subExp.Expression + " ";
                }
            }
            return(_resolver.ResolveSimpleExpression(flatExpression));
        }
示例#5
0
        public int ResolveSimpleExpression(string expression)
        {
            if (!MathRegex.IsExpressionValid(expression))
            {
                throw new InvalidOperationException(expression);
            }

            List <MathToken> mathExp = _lexer.GetTokens(expression);

            while (mathExp.Count > 1)
            {
                MathOperator op = _precedence.GetMaxPrecedence(mathExp);
                op.PreviousToken = mathExp[op.Index - 1];
                op.NextToken     = mathExp[op.Index + 1];
                int result = op.Resolve();
                replaceTokensWithResult(mathExp, op.Index, result);
            }
            return(mathExp[0].Resolve());
        }
 public void SetUp()
 {
     _expressionValidator = new MathRegex();
     _fixer = new ExpressionFixer();
     _lexer = new MathLexer(_fixer);
     _calculator = new Calculator();
     _validator = new Validator(-20, 20);
     _calcProxy = new CalcProxy(_validator, _calculator);
 }
 public void SetUp()
 {
     _calculator = new Calculator();
     _validator = new Validator(-20, 20);
     _calcProxy = new CalcProxy(_validator, _calculator);
     _expressionValidator = new MathRegex();
     _fixer = new ExpressionFixer();
     _lexer = new MathLexer(_fixer);
     _precedence = new Precedence();
     _resolver = new Resolver(_lexer, _calcProxy, _precedence);
     _parser = new MathParser(_lexer, _expressionValidator, _resolver);
 }
 public ExpressionFixer()
 {
     // TODO: Complete member initialization
     _mathRegex = new MathRegex();
 }
 public ExpressionFixer(MathRegex mathRegex)
 {
     _mathRegex = mathRegex;
 }
 public MathParser(Lexer lexer, MathRegex mathRegex, Resolver resolver)
 {
     _lexer = lexer;
     _resolver = resolver;
     _mathRegex = mathRegex;
 }
 public void SetUp()
 {
     _mathRegex = new MathRegex();
 }