anchor.diff:                      n.rightExt
                   | :? AST as a -> a.rightExt 
                   | _ -> failwith "Unexpected type."
  -            //let family = new Family(prod, new Nodes(result, l, r, -1),l, r)
               let nodes = new Nodes(result, l, r, -1)
               let family = findFamily prod nodes l r
               family
  
positive.code:                                 currentIndex := !currentIndex + 1
                                  currentLabel := new Label(currentLabel.Value.Rule, currentLabel.Value.Position + 1)
                                  if !currentR <> null
                                  then currentN := getNodeP !currentLabel !currentN !currentR  //нужно ли тут всегда создавать упакованную ячейку или если только правый уже есть
                                  condition := false
                          else 
                              let index = getIndex(curSymbol, curToken)
  
negative.code:                     let curRight = unbox <| !currentN
                      let resTree = handleIntermidiate curRight currentLabel.Value.Rule
                      let resTree = findTree currentLabel.Value.Rule resTree.leftExt resTree.rightExt resTree
                      if resTree.leftExt = 0 && resTree.rightExt = inputLength && currentLabel.Value.Rule = parser.StartRule
                      then resultAST := Some resTree
                      pop !currentGSSNode !currentIndex resTree
          let control () =
              while not !stop do
                  if !condition then dispatcher() else processing()
          control()
                   
          match !resultAST with
              | None -> Error ("String was not parsed")
              | Some res -> 
                      let r1 = new Tree<_> (tokens, res, parser.Rules)
                      //let rr = new List<Tree<'TokenType>>()
                     // drawDot parser tokens "res.dot" gss
                      //rr.Add(r1)
                      Success (r1)       