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