anchor.diff:                         match oldForm with
                          |l::ls -> if l = leftNonTerminal then //ищем первый нетерминал
                                       match x with //замена l в соответствии с правилом x
  -                                    |ToBranch(a,b,c,l) -> b::c::ls
  +                                    |ToBranch(a,b,c,l,_) -> b::c::ls
                                       |ToLeaf(a,b,l)     -> b.ToString()::ls                                
                                    else l::(newForm ls)
                          |_     -> []
  
positive.code:     //Вывод правил
      let printRules =
         (function
         | ToBranch(a,b,c,_),l -> [a; "->"; b; c; "  "; (match l with | Some t -> t | None -> "")]
         | ToLeaf(a,b,_),l     -> [a;"->";b.ToString();"  "; (match l with | Some t -> t | None -> "") ]
         >> String.concat "")
         |> List.map
  
negative.code:                                                                        
      let recognitionTable (rules,_) (s:string) = 
             
         let recTable = Microsoft.FSharp.Collections.Array2D.create s.Length s.Length ([],(0,0),(0,0),[],[],[])
         //recTable(i,l), для l > 0
  
         let newLbl ruleLbl (lbls1:List<Option<string>>) (lbls2:List<Option<string>>) : Option<string> =
  