Beispiel #1
0
        public IParser Build(string expression)
        {
            converters.Add(new MaximumNumberConverter(defaultMaxValue));
            if (defaultParseNegative)
            {
                processors.Add(new NegativeNumberValueProcessor());
            }


            SimpleRegexParser simpleParser = new SimpleRegexParser(converters, processors, customDelimiter.ToString(), defaultOperation);

            if (simpleParser.CanParse(expression))
            {
                return(simpleParser);
            }

            SingleCustomRegexParser singleParser = new SingleCustomRegexParser(converters, processors, customDelimiter.ToString(), defaultOperation);

            if (singleParser.CanParse(expression))
            {
                return(singleParser);
            }

            MultipleCustomRegexParser multipleParser = new MultipleCustomRegexParser(converters, processors, customDelimiter.ToString(), defaultOperation);

            if (multipleParser.CanParse(expression))
            {
                return(multipleParser);
            }

            SimpleOperationParser operationParser = new SimpleOperationParser(converters, processors, customDelimiter.ToString(), defaultOperation);

            return(operationParser);
        }
Beispiel #2
0
        public int CalculateExpression(string expression)
        {
            IParser       additionParser = null;
            string        exp            = expression;
            List <string> delimiters     = new List <string>();

            if (!string.IsNullOrEmpty(alternativeDelimiter))
            {
                delimiters.Add(alternativeDelimiter);
            }

            if (regex != null && regex.IsMatch(expression))
            {
                var match  = regex.Match(expression);
                var delims = match.Groups.Where(t => t.Name.Equals("delimiter", StringComparison.InvariantCultureIgnoreCase))
                             .SelectMany(t => t.Captures.Select(m => m.Value))
                             .ToList();

                delimiters.AddRange(delims);

                additionParser = new SimpleOperationParser(converters, valueProcessors, delimiters, operation);
                exp            = match.Groups["numbers"].Value;
            }
            else
            {
                additionParser = new SimpleOperationParser(converters, valueProcessors, delimiters, operation);
            }

            return(additionParser.CalculateExpression(exp));
        }