/// <summary>
        /// Добавляет чере AND ограничение
        /// </summary>
        /// <param name="ex">Ограничение</param>
		public void AddAnd(Expr ex)
		{
			list.Add(ex);
			list.Add(new Oper(Uslovie.AND));
			
		}
        /// <summary>
        /// Добавляет чере OR ограничение
        /// </summary>
        /// <param name="ex">Ограничение</param>
		public void AddOr(Expr ex)
		{
			list.Add(ex);
			list.Add(new Oper(Uslovie.OR));
			
		}
        /// <summary>
        /// Добавляет ограничение
        /// </summary>
        /// <param name="ex">Ограничение</param>
		public void Add(Expr ex)
		{
			list.Add(ex);
		}
        /// <summary>
        /// Добавлет ограничение и условие соединения ограничений
        /// </summary>
        /// <param name="ex">Ограничение</param>
        /// <param name="op">AND/OR</param>
		public void Add(Expr ex, Oper op)
		{
			list.Add(ex);
			list.Add(op);			
		}
        /// <summary>
        /// Создает все состояния
        /// </summary>
		private void CreateClass()
		{
			//Создаем классы
			selectClass = new Select(this);
			select_stmt = new Select_Stmt(this);
			select_stmt_1 = new Select_Stmt_1(this);
			select_stmt_2 = new Select_Stmt_2(this);
			select_point = new Select_Point(this);

			select_stmt_0 = new Select_Stmt_0(this);
			select_all = new Select_All(this);
			select_all_use = new Select_All_Use(this);
			select_stmt_as = new Select_Stmt_As(this);

			select_all_1 = new Select_All_1(this);
			select_all_word = new Select_All_Word(this);
			select_once = new Select_Once(this);

			select_key_1 = new Select_Key_1(this);
			select_key_2 = new Select_Key_2(this);
			select_key_value = new Select_Key_Value(this);
			select_key_point = new Select_Key_Point(this);
			select_key_value_2 = new Select_Key_Value_2(this);

			select_paint_1 = new Select_Paint_1(this);
			select_paint_2 = new Select_Paint_2(this);
			select_paint_col = new Select_Paint_Col(this);
			select_paint_for = new Select_Paint_For(this);
			select_paint_value = new Select_Paint_Value(this);
			select_paint_use = new Select_Paint_Use(this);
			select_paint_col_name = new Select_Paint_Col_Name(this);
			select_paint_col_point = new Select_Paint_Col_Point(this);
			select_paint_col_word = new Select_Paint_Col_Word(this);
			select_paint_other = new Select_Paint_Other(this);
			select_paint_other_use = new Select_Paint_Other_Use(this);
			select_paint_other_tag = new Select_Paint_Other_Tag(this);


			fromClass = new From(this);
			from_1 = new From_1(this);
			from_table_1 =  new From_Table_1(this);
			from_table_2 =  new From_Table_2(this);
			from_join = new From_Join(this);
			from_where = new From_Where(this);
			//from_stmt = new From_Stmt(this);

			whereClass = new Where(this);
			//where_stmt = new Where_Stmt(this);
			where_column1 = new Where_Column1(this);
			where_column2 = new Where_Column2(this);
			where_table1 = new Where_Table1(this);
			where_table2 = new Where_Table2(this);
			where_point1 = new Where_Point1(this);
			where_point2 = new Where_Point2(this);
			where_comp = new Where_Comp(this);

			//group

			this.group = new GroupMain(this);
			group_by = new Group_By(this);
			group_by_all = new Group_By_All(this);
			group_by_word = new Group_By_Word(this);
			group_contain = new Group_Contain(this);
			group_contain_value_rec = new Group_Contain_Value_Rec(this);
			group_contain_use = new Group_Contain_Use(this);
			group_contain_use_tag = new Group_Contain_Use_Tag(this);
			group_flat = new Group_Flat(this);
			group_flat_header = new Group_Flat_Header(this);
			group_flat_header_value_rec = new Group_Flat_Header_Value_Rec(this);
			group_flat_header_use = new Group_Flat_Header_Use(this);
			group_flat_header_use_tag = new Group_Flat_Header_Use_Tag(this);

			group_flat_header_func = new Group_Flat_Header_Func(this);
			group_flat_header_func_end = new Group_Flat_Header_Func_End(this);
			group_flat_header_func_next = new Group_Flat_Header_Func_Next(this);

			group_flat_footer = new Group_Flat_Footer(this);
			group_flat_footer_value_rec = new Group_Flat_Footer_Value_Rec(this);
			group_flat_footer_use = new Group_Flat_Footer_Use(this);
			group_flat_footer_use_tag = new Group_Flat_Footer_Use_Tag(this);

			group_flat_footer_func = new Group_Flat_Footer_Func(this);
			group_flat_footer_func_end = new Group_Flat_Footer_Func_End(this);
			group_flat_footer_func_next = new Group_Flat_Footer_Func_Next(this);

			group_flat_footer_value_column = new Group_Flat_Footer_Value_Column(this);
			group_flat_header_value_column = new Group_Flat_Header_Value_Column(this);
			group_contain_value_column = new Group_Contain_Value_Column(this);

			asClass = new As(this);
			//as_stmt = new As_Stmt(this);

			CurentExpr = new Expr();
			CurentOper = new Oper();
		}