anchor.diff:           match rule with
            |ToLeaf(a,b,l) -> if b = s.[k] then
                               let nonTerminals,_,_,lbl,rules = recTable.[k,0]
  -                            recTable.[k,0] <- ((a::nonTerminals),(-1,-1),(-1,-1),l,(rule::rules))
  +                            //recTable.[k,0] <- ((a::nonTerminals),(-1,-1),(-1,-1),l,(rule::rules))
  +                            recTable.[k,0] <- ((a::nonTerminals),(-1,-1),(-1,-1),(l::lbl),(rule::rules))
            |_           -> ()
      //последующие столбцы
      fillTable 0 1
  
positive.code: //recognize testGrammar1 str
  printfn "Time = %A" (System.DateTime.Now - start)
  
  recognize testGrammar_lbl1 "a*a+"
  
  //System.Console.WriteLine("Test3:")
  //recognize testGrammar2 "abcd"
  
negative.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 []
  