anchor.diff:          | LALRSymbol.Terminal _ -> false
           | LALRSymbol.Nonterminal nont -> dict.HasEmpty nont
   
  -    productions
  -    |> Seq.iter (fun {Head = x; Handle = xs} ->
  +    for {Head = x; Handle = xs} in productions do
           if xs.IsEmpty then
  -            dict.AddEmpty x |> ignore)
  +            dict.AddEmpty x |> ignore
   
       let mutable changed = true
   
  
positive.code:         let hashTerminalSet = LookaheadSet firstSets.AllTerminals.Length
          hashTerminalSet.HasHash <- true
          hashTerminalSet.Freeze()
          itemSets
          |> Seq.iter (fun itemSet ->
              itemSet.Kernel
              |> Set.iter (fun item ->
                  let closure = closure1 fGetAllProductions firstSets [item, hashTerminalSet]
                  closure
                  |> List.iter (fun {Item = closureItem; Lookahead = la} ->
                      if not closureItem.IsAtEnd then
                          match itemSet.Goto.TryGetValue(closureItem.CurrentSymbol) with
                          | true, gotoIdx ->
  
negative.code:                         item.Production.Handle
                          |> Seq.skip (item.DotPosition + 1)
                          |> getFirstSetOfSequence firstSets lookahead
                      for prod in fGetAllProductions nont do
                          q.Enqueue(LR0Item.Create prod, first)
      results.AsEnumerable()
      |> Seq.map (fun (KeyValue(k, v)) -> v.Freeze(); {Item = k; Lookahead = v})
      |> List.ofSeq
  