anchor.diff:                      positionGraph))
   
       //
  -    let private positionGraphs (grammar : AugmentedGrammar<'Nonterminal, 'Terminal>) =
  -        //
  -        let lr0ParserTable = Lr0.createTable grammar
  -
  +    let private positionGraphs (grammar : AugmentedGrammar<'Nonterminal, 'Terminal>) (parserTable : LrParsingTable<AugmentedNonterminal<'Nonterminal>, AugmentedTerminal<'Terminal>, unit>) =
           // Compute the Parser State Position Graph for each parser state.
  -        (Map.empty, lr0ParserTable.ParserStates)
  +        (Map.empty, parserTable.ParserStates)
           ||> Map.fold (fun parserStatePositionGraphs parserStateId parserState ->
               let pspg = positionGraph grammar.Productions parserState
               Map.add parserStateId pspg parserStatePositionGraphs)
  
positive.code:         let reachableFrom = Graph.reachable graph
  
          /// For each item in the graph, contains the set of items/actions it dominates.
          let dominated = Graph.dominators graph
  
          // Positions are not free if they can derive themselves
          // (i.e., if they have a self-loop in the graph).
  
negative.code: 
      //
      let ofAugmentedGrammar (grammar : AugmentedGrammar<'Nonterminal, 'Terminal>) =
          //
          let lr0ParserTable = Lr0.createTable grammar
  
          // Compute the parser state position graphs of the LR(0) parser states of the augmented grammar.
          let positionGraphs = positionGraphs grammar lr0ParserTable
  
          // Compute the set of non-free (forbidden or contingent) positions in the entire grammar.
          (Set.empty, positionGraphs)
  