anchor.diff:  
   [<TestCase>]
   let ``LR(1) table for Grammar 3.26`` () =
  +    let expectedActionTable =
  +        Map.empty
  +        |> Table.term 1 "*" (Action <| Shift 5<_>)
  +        |> Table.term 1 "x" (Action <| Shift 4<_>)
  +
  +        |> Table.term 2 "=" (Action <| Shift 9<_>)
  +        |> Table.eof 2 (Action <| Reduce 1<_>)
  +
  +        |> Table.eof 3 (Action <| Reduce 2<_>)
  +
  +        |> Table.term 4 "=" (Action <| Reduce 3<_>)
  +        |> Table.eof 4 (Action <| Reduce 3<_>)
  +
  +        |> Table.term 5 "*" (Action <| Shift 5<_>)
  +        |> Table.term 5 "x" (Action <| Shift 4<_>)
  +
  +        |> Table.eof 6 (Action Accept)
  +
  +        |> Table.term 7 "=" (Action <| Reduce 1<_>)
  +        |> Table.eof 7 (Action <| Reduce 1<_>)
  +
  +        |> Table.term 8 "=" (Action <| Reduce 4<_>)
  +        |> Table.eof 8 (Action <| Reduce 4<_>)
  +
  +        |> Table.term 9 "*" (Action <| Shift 13<_>)
  +        |> Table.term 9 "x" (Action <| Shift 12<_>)
  +
  +        |> Table.eof 10 (Action <| Reduce 1<_>)
  +
  +        |> Table.eof 11 (Action <| Reduce 5<_>)
  +
  +        |> Table.eof 12 (Action <| Reduce 3<_>)
  +
  +        |> Table.term 13 "*" (Action <| Shift 13<_>)
  +        |> Table.term 13 "x" (Action <| Shift 12<_>)
  +        
  +        |> Table.eof 14 (Action <| Reduce 4<_>)
  +
  +    let expectedGotoTable =
  +        Map.empty
  +        |> Table.nterm 1 'E' 3
  +        |> Table.nterm 1 'S' 6
  +        |> Table.nterm 1 'V' 2
  +        
  +        |> Table.nterm 5 'E' 8
  +        |> Table.nterm 5 'V' 7
  +        
  +        |> Table.nterm 9 'E' 11
  +        |> Table.nterm 9 'V' 10
  +
  +        |> Table.nterm 13 'E' 14
  +        |> Table.nterm 13 'V' 10
  +
       let parserTable = Lr1.createTable Appel.``Grammar 3.26``
   
  -    let expectedActionTable =
  -        Map.empty
  -        |> Map.add (1<ParserStateIdentifier>, AugmentedTerminal.Terminal "*") (Action <| Shift 5<_>)
  -        |> Map.add (1<ParserStateIdentifier>, AugmentedTerminal.Terminal "x") (Action <| Shift 4<_>)
  -
  -        |> Map.add (2<ParserStateIdentifier>, AugmentedTerminal.Terminal "=") (Action <| Shift 9<_>)
  -        |> Map.add (2<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 1<_>)
  -
  -        |> Map.add (3<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 2<_>)
  -
  -        |> Map.add (4<ParserStateIdentifier>, AugmentedTerminal.Terminal "=") (Action <| Reduce 3<_>)
  -        |> Map.add (4<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 3<_>)
  -
  -        |> Map.add (5<ParserStateIdentifier>, AugmentedTerminal.Terminal "*") (Action <| Shift 5<_>)
  -        |> Map.add (5<ParserStateIdentifier>, AugmentedTerminal.Terminal "x") (Action <| Shift 4<_>)
  -
  -        |> Map.add (6<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action Accept)
  -
  -        |> Map.add (7<ParserStateIdentifier>, AugmentedTerminal.Terminal "=") (Action <| Reduce 1<_>)
  -        |> Map.add (7<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 1<_>)
  -
  -        |> Map.add (8<ParserStateIdentifier>, AugmentedTerminal.Terminal "=") (Action <| Reduce 4<_>)
  -        |> Map.add (8<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 4<_>)
  -
  -        |> Map.add (9<ParserStateIdentifier>, AugmentedTerminal.Terminal "*") (Action <| Shift 13<_>)
  -        |> Map.add (9<ParserStateIdentifier>, AugmentedTerminal.Terminal "x") (Action <| Shift 12<_>)
  -
  -        |> Map.add (10<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 1<_>)
  -
  -        |> Map.add (11<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 5<_>)
  -
  -        |> Map.add (12<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 3<_>)
  -
  -        |> Map.add (13<ParserStateIdentifier>, AugmentedTerminal.Terminal "*") (Action <| Shift 13<_>)
  -        |> Map.add (13<ParserStateIdentifier>, AugmentedTerminal.Terminal "x") (Action <| Shift 12<_>)
  -        
  -        |> Map.add (14<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 4<_>)
  -
  -    let expectedGotoTable =
  -        Map.empty
  -        |> Map.add (1<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'E') 3<_>
  -        |> Map.add (1<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'S') 6<_>
  -        |> Map.add (1<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'V') 2<_>
  -
  -        |> Map.add (5<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'E') 8<_>
  -        |> Map.add (5<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'V') 7<_>
  -
  -        |> Map.add (9<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'E') 11<_>
  -        |> Map.add (9<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'V') 10<_>
  -
  -        |> Map.add (13<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'E') 14<_>
  -        |> Map.add (13<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'V') 10<_>
  -
       // Verify the ACTION table.
       parserTable.ActionTable
       |> should equal expectedActionTable
  
positive.code: 
  [<TestCase>]
  let ``SLR table for Grammar 3.23`` () =
      let lr0ParserTable = Lr0.createTable Appel.``Grammar 3.23``
  
      let slr1ParserTable =
          let productionRuleIds = Grammar.ProductionRuleIds Appel.``Grammar 3.23``
          Slr1.upgrade (Appel.``Grammar 3.23``, lr0ParserTable, productionRuleIds)
  
      let expectedActionTable =
          Map.empty
          |> Map.add (1<ParserStateIdentifier>, AugmentedTerminal.Terminal "x") (Action <| Shift 3<_>)
  
          |> Map.add (2<ParserStateIdentifier>, AugmentedTerminal.Terminal "+") (Action <| Shift 5<_>)
          |> Map.add (2<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 1<_>)
  
          |> Map.add (3<ParserStateIdentifier>, AugmentedTerminal.Terminal "+") (Action <| Reduce 2<_>)
          |> Map.add (3<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 2<_>)
  
          |> Map.add (4<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action Accept)
  
          |> Map.add (5<ParserStateIdentifier>, AugmentedTerminal.Terminal "x") (Action <| Shift 3<_>)
  
          |> Map.add (6<ParserStateIdentifier>, AugmentedTerminal.EndOfFile) (Action <| Reduce 3<_>)
  
      let expectedGotoTable =
          Map.empty
          |> Map.add (1<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'E') 4<_>
          |> Map.add (1<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'T') 2<_>
          |> Map.add (5<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'E') 6<_>
          |> Map.add (5<ParserStateIdentifier>, AugmentedNonterminal.Nonterminal 'T') 2<_>
  
      // Verify the ACTION table.
      slr1ParserTable.ActionTable
      |> should equal expectedActionTable
  
negative.code:         | Choice1Of2 lookaheadSets ->
              Lalr1.upgrade (Appel.``Grammar 3.26``, lr0ParserTable, productionRuleIds, lookaheadSets)
  
      // Verify the ACTION table.
      lalr1ParserTable.ActionTable
      |> should equal expectedActionTable
  