anchor.diff:                          | LeftAssoc ->  reduceItem
                           | RightAssoc -> shiftItem
                           | NonAssoc ->
  -                           printf "state %d: shift(%d)/reduce(%s) error on nonassoc %s - assuming shift(%d)\n" kernelIdx sIdx (ntTab.OfIndex (prodTab.NonTerminal prodIdx)) (termTab.OfIndex termIdx) sIdx; 
  +                           reportConflict shiftItem reduceItem "we preffer shift on equal precedences"
                              incr shiftReduceConflicts;
                              shiftItem
                       | _ ->
  -                       printf "state %d: shift(%d)/reduce(%s) error on %s - assuming shift(%d)\n" kernelIdx sIdx (ntTab.OfIndex (prodTab.NonTerminal prodIdx)) (termTab.OfIndex termIdx) sIdx; 
  +                       reportConflict shiftItem reduceItem "we preffer shift when unable to compare precedences"
                          incr shiftReduceConflicts;
                          shiftItem
                   | ((_,Reduce prodIdx1),(_, Reduce prodIdx2)) -> 
  -                   printf "state %d: reduce(%s)/reduce(%s) error on %s - assuming reduce(%s)\n" kernelIdx (ntTab.OfIndex (prodTab.NonTerminal prodIdx1)) (ntTab.OfIndex (prodTab.NonTerminal prodIdx2)) (termTab.OfIndex termIdx) (ntTab.OfIndex (prodTab.NonTerminal (if prodIdx1 < prodIdx2 then prodIdx1 else prodIdx2))); 
  +                   "we prefer the rule earlier in the file"
  +                   |> if prodIdx1 < prodIdx2 then reportConflict itemSoFar itemNew else reportConflict itemNew itemSoFar
                      incr reduceReduceConflicts;
                      if prodIdx1 < prodIdx2 then itemSoFar else itemNew
                   | _ -> itemNew 
  
positive.code: 
              let itemNew = (precNew, actionNew) 
              let winner = 
                  match itemSoFar,itemNew with 
                  | (_,Shift s1),(_, Shift s2) -> 
                     if actionSoFar <> actionNew then 
                        printf "internal error in fsyacc: shift(%d)/shift(%d) conflict - assuming shift(%d)\n" s1 s2 s1;
                     itemSoFar
  
                  | (((precShift,Shift sIdx) as shiftItem), 
  
negative.code:     reportTime(); printfn  "returning tables."; stdout.Flush();
      if !shiftReduceConflicts > 0 then printfn  "%d shift/reduce conflicts" !shiftReduceConflicts; stdout.Flush();
      if !reduceReduceConflicts > 0 then printfn  "%d reduce/reduce conflicts" !reduceReduceConflicts; stdout.Flush();
      if !shiftReduceConflicts > 0 || !reduceReduceConflicts > 0 then printfn  "consider setting precedences explicitly using %%left %%right and %%nonassoc on terminals and/or setting explicit precedence on rules using %%prec"
  
      /// The final results
      let states = kernels |> Array.ofList 
  