public IEnumerable <LexicToken> Parse(InputStream input) { textInfo.Clear(); parameterExpressions.Clear(); // sorting to prevent situation when parameter 'x1' is parsed as parameter 'x' when 'x' is available, too. parameterReader.ParameterNames = parameters.OrderByDescending(s => s.Length); namedConstantReader.Constants = NamedConstants; functionReader.Functions = registeredFunctions; List <LexicToken> tokens = new List <LexicToken>(); int start = 0; do { var copy = input; foreach (var reader in lexicReaders) { LexicToken token = null; if (input.IsEmpty) { break; } start = input.Position; input = reader.TryRead(input, out token); if (token != null) { TokenInTextInfo info = new TokenInTextInfo { StartIndex = start, Length = input.Position - start, Token = token }; textInfo.Add(info); tokens.Add(token); } } if (input == copy) { throw new ParserException(String.Format("Unexpected character '{0}' in position {1}.", input.Content[0], input.Position)); } } while (!input.IsEmpty); return(tokens); }
public IEnumerable<LexicToken> Parse(InputStream input) { textInfo.Clear(); parameterExpressions.Clear(); // sorting to prevent situation when parameter 'x1' is parsed as parameter 'x' when 'x' is available, too. parameterReader.ParameterNames = parameters.OrderByDescending(s => s.Length); namedConstantReader.Constants = NamedConstants; functionReader.Functions = registeredFunctions; List<LexicToken> tokens = new List<LexicToken>(); int start = 0; do { var copy = input; foreach (var reader in lexicReaders) { LexicToken token = null; if (input.IsEmpty) break; start = input.Position; input = reader.TryRead(input, out token); if (token != null) { TokenInTextInfo info = new TokenInTextInfo { StartIndex = start, Length = input.Position - start, Token = token }; textInfo.Add(info); tokens.Add(token); } } if (input == copy) throw new ParserException(String.Format("Unexpected character '{0}' in position {1}.", input.Content[0], input.Position)); } while (!input.IsEmpty); return tokens; }