示例#1
0
        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);
        }
示例#2
0
		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;
		}