private NPathSelectQuery ParseSelectQuery()
		{
			NPathSelectQuery query = new NPathSelectQuery();
			queries.Push(query);

			tokenizer.GetCurrentToken("select", "Select");

			NPathSelectClause selectClause = new NPathSelectClause();
			ParseSelectClause(selectClause);
			query.Select = selectClause;

			tokenizer.GetCurrentToken("from", "From");
			NPathFromClause fromClause = new NPathFromClause();
			ParseFromClause(fromClause);
			query.From = fromClause;

			if (tokenizer.GetCurrentToken().IsType("where"))
			{
				NPathWhereClause whereClause = new NPathWhereClause();
                query.Where = whereClause;
				ParseWhereClause(whereClause);
				
			}

			if (tokenizer.GetCurrentToken().IsType("order by")) // do not localize
			{
				NPathOrderByClause orderByClause = new NPathOrderByClause();
				ParseOrderByClause(orderByClause);
				query.OrderBy = orderByClause;
			}

			return query;
		}
 private void ParseFromClause(NPathFromClause fromClause)
 {
     do
     {
         tokenizer.MoveNext();
         Token classToken = tokenizer.GetCurrentToken("identifier", "Class name"); // do not localize
         NPathClassName className = new NPathClassName();
         className.Name = classToken.Text;
         fromClause.Classes.Add(className);
         tokenizer.MoveNext();
     } while (tokenizer.GetCurrentToken().IsType("comma"));
 }