public override IEnumerable <Token> Parse(string ETLString, TokenFactory tokenFactory) { var strs = SplitString(ETLString); List <Token> retTokens = new List <Token>(strs.Count()); Regex _matcher; ExpressionType _type; foreach (string str in strs) { try { _type = tokenIdentifiers.First(ti => { _matcher = new Regex(ti.Item1, RegexOptions.IgnoreCase); return(_matcher.IsMatch(str)); }).Item2; } catch (InvalidOperationException ex) { throw new InvalidExpressionException($"Unrecognized Token {str}", ex); } if (_type.IsOperand()) { retTokens.Add(tokenFactory.CreateValueToken(_type, Convert.ChangeType(str, ValueExpTypeToValueType[_type]))); } else if (_type.IsOperator()) { retTokens.Add(tokenFactory.CreateToken(_type)); } else if (_type.IsSpecial()) { retTokens.Add(tokenFactory.CreateSpecialToken(_type)); } else { throw new ArgumentException($"Unrecoginzed Type: {_type.ToString()}"); } } return(retTokens); }