anchor.diff:      let new_q = parse (gt,i)
       in 
       if debug then print_climb_3 new_q;
  -    if Set.exists (fun x->x = (Item('S',[NTerm('E');Dot(' ',1)])))new_q
  +    if Set.exists (fun x->x = (Item('S',[NTerm('E');Dot(' ',1)]),1))new_q
       then new_q
       else    
       Set.union_all                            
       [Set.filter (fun x1-> 
                      Set.exists (fun (Item(ch,lst) as y) -> 
  -                                   (ItNext y) = x1
  +                                   (ItNext y) = fst x1
                                      &&(function Dot(_)::tl-> false
                                                 |[]        -> false
                                                 | _        -> true)lst
                                  )q)new_q
  -     |>Set.map (fun x1->((ItPrev (x1))))                      
  +     |>Set.map (fun x1->((ItPrev (fst x1),snd x1)))                      
       
       ;
       Set.union_all(
  -    union_from_Some[for (Item(a,hd::tl)) in new_q -> 
  +    union_from_Some[for (Item(a,hd::tl),i) in new_q -> 
                           if getText hd (1,1,1)=x && (a<>'S')&&(function Dot(_)::tl->true | _ -> false)tl
                           then Some(climb (q,a,i))
                           else None])
  
positive.code:         List.map (fun lst -> (List.map (fun (i,j,s)->(if j+1 = (List.length lst) then ((i,j),(i,-1)) else ((i,j),(i,j+1))))) lst) _items
      
  let get,_next,_print = 
      let _lex_list = ref   (Seq.to_list "a+a*a**(a+a)$")
                           //(Seq.to_list "a+a*a*(a+a)*a+a*a*(a+a)+a*a*(a+a)*a+a*a*(a+a)+a+a*a*(a+a)*a+a*a*(a+a)+(a*a*(a+a)*a+a*a*(a+a))*a+a*a*(a+a)*a+a*a*(a+a)+a*a*(a+a)*a+a*a*(a+a)+a+a*a*(a+a)*a+a*a*(a+a)+(a*a*(a+a)*a+a*a*(a+a))$")
                                        //"a+a*a*(a+a)*a+a*a*(a+a)+a*a*(a+a)*a+a*a*(a+a)+a+a*a*(a+a)*a+a*a*(a+a)+(a*a*(a+a)*a+a*a*(a+a))*a+a*a*(a+a)*a+a*a*(a+a)+a*a*(a+a)*a+a*a*(a+a)+a+a*a*(a+a)*a+a*a*(a+a)+(a*a*(a+a)*a+a*a*(a+a))+a+a*a*(a+a)*a+a*a*(a+a)+a*a*(a+a)*a+a*a*(a+a)+a+a*a*(a+a)*a+a*a*(a+a)+(a*a*(a+a)*a+a*a*(a+a))*a+a*a*(a+a)*a+a*a*(a+a)+a*a*(a+a)*a+a*a*(a+a)+a+a*a*(a+a)*a+a*a*(a+a)+(a*a*(a+a)*a+a*a*(a+a))$")
      in
      let get () =  List.hd !_lex_list
      in
      let next () = _lex_list := if !_lex_list = [] 
                                then []
  
negative.code: open Log
  
  // debug = true - печатается трасса. Иначе нет.
  let debug = false
  
  //interacive = true - ввод строки с консоли. иначе - явная подстановка тестовой строки
  let interacive = false
  