anchor.diff:  open Log
   
   // debug = true - печатается трасса. Иначе нет.
  -let debug = true
  +let debug = false
   
   //interacive = true - ввод строки с консоли. иначе - явная подстановка тестовой строки
   let interacive = false
  
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: 
  and parse = 
      memoize (fun (q,i) -> 
      if debug  then print_parse q i;    
      union_all
          [map (fun x -> (x,i) )(Set.filter (fun(Item(a,lst)) -> (List.hd (List.rev lst)) = Dot(' ',1))q)
           ;if (let p = get(i)in p = '$') then empty else (let x = get (i) in (*_next()*)climb (q,  (*(List.hd i)*)x,i-1))
           ;union_from_Some[for (Item(a,lst)) in Q -> match lst 
                                                      with
                                                      | NTerm('`')::[]->Some (climb (q, a,i))
  