anchor.diff:                      match dfaResult.FoundToken, dfaResult.Symbol with
                       | true, Choice3Of4(GroupStart(_, tokGroupIdx))
                           when currentGroup.Nesting.Contains tokGroupIdx ->
  -                            let g = groups.[int tokGroupIdx]
                               input.AdvancePastOffset(ofs, isNoiseGroup)
  -                            groupLoop isNoiseGroup (g :: groupStack)
  +                            groupLoop isNoiseGroup (tokGroupIdx :: groupStack)
                       // A symbol is found that ends the current group.
                       | true, sym when currentGroup.IsEndedBy sym ->
                           match currentGroup.EndingMode with
  
positive.code:                     let g = groups.[int tokGroupIdx]
                      let isNoiseGroup = not g.IsTerminal
                      input.AdvancePastOffset(ofs, isNoiseGroup)
                      groupLoop isNoiseGroup [g]
                      match g.ContainerSymbol with
                      // The group is a terminal. We return it.
                      | Choice1Of2 term -> newToken term
  
negative.code:         // By returning unit the compiler does
          // not translate it to an FSharpTypeFunc.
          let fail msg = ParserError(input.CurrentPosition, msg) |> ParserException |> raise |> ignore
          let rec groupLoop isNoiseGroup groupStack =
              match groupStack with
              | [] -> ()
              | g :: gs ->
                  let currentGroup = grammar.Groups.[int g]
                  let dfaResult = tokenizeDFA input
                  if dfaResult.ReachedEOF then
                      // Input ended but the current group can be ended by a newline.
  