anchor.diff:                                                                         
       let recognitionTable (rules,_) (s:string) = 
              
  -       let recTable = Microsoft.FSharp.Collections.Array2D.create s.Length s.Length ([],(0,0),(0,0),[],[])
  +       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> =
  
positive.code:        let recTable = recognitionTable g s
         //восстановление вывода по таблице начиная с ячейки recTable(i,l) нетерминала top
         let rec subRecognize i l top = 
            let nonTerminals,(leftI,leftL),(rightI,rightL),lbls,rs = recTable.[i,l]
            //правило вида А->_, где А = top
            let currentRuleIndex = List.findIndex (fun (ToBranch(st,_,_,l)|ToLeaf(st,_,l)) -> st = top) rs
            let currentRule = rs.[currentRuleIndex]
            let lbl = lbls.[currentRuleIndex]
            let leftNT,rightNT = 
               match currentRule with
               |ToBranch(_,left,right,l) -> left,right
               |ToLeaf(_,terminal,l)     -> terminal.ToString(),""  
            match i,l with
            | _,0 -> [(ToLeaf(top,leftNT.[0],None),lbl)]
            | _     -> (currentRule,lbl)::(subRecognize leftI leftL leftNT)@(subRecognize rightI rightL rightNT)
         let resultRules = if List.exists ((=)start) ((fun (a,_,_,_,l) -> a) recTable.[0, s.Length-1])
                           then subRecognize 0 (s.Length-1) start//если цепочка принадлежит языку L(g)
                           else []
  
         System.Console.WriteLine s
         System.Console.WriteLine "Rules:"
         printRules resultRules
         //printOutput resultRules start    
  
      member this.Recognize grammar str = recognize grammar str
  
negative.code:                        match oldForm with
                         |l::ls -> if l = leftNonTerminal then //ищем первый нетерминал
                                      match x with //замена l в соответствии с правилом x
                                      |ToBranch(a,b,c,l,_) -> b::c::ls
                                      |ToLeaf(a,b,l)     -> b.ToString()::ls                                
                                   else l::(newForm ls)
                         |_     -> []
  