anchor.diff:              productionToStates startState endState right
           | PSeq (seq, _ , _) ->
               let entryState, exitState = newState(), newState()
  -            addEdge startState entryState Eps
  -            addEdge exitState endState.Value Eps 
  +            addEdge startState entryState Entry
  +            addEdge exitState endState.Value End
               let rec seqToStates source target = function
                   | hd :: [] -> productionToStates source target hd.rule
                   | hd :: tl -> let newstate = productionToStates source None hd.rule
  
positive.code: open Yard.Core.IL.Production
  open QuickGraph
  
  type GFGEdge =
      | Call of int   // stores matching return node
      | Scan of string
      | Eps           // other edges (Entry, Return, etc.)
      override this.ToString() =
          match this with
          | Call n -> string n
          | Scan s -> s
          | Eps -> ""
  
  type GrammarFlowGraph (ruleList : Rule.t<Source.t,Source.t> list) as this =
      inherit AdjacencyGraph<int, TaggedEdge<int, GFGEdge>>()
  
      let nonTermToStates = new Dictionary<string, int * int>()  // nonTerm -> start/end nodes
      let stateToString = new Dictionary<int, string>()          // for visualization (TODO)
  
negative.code:         count                   
      
      let addEdge source target tag = 
          this.AddEdge (new GFGEdge<_>(source, target, tag)) |> ignore
  
      let newEdges isTerm source (target : int option) (s: Source.t) =
          let final = ref dummyState
          if target.IsNone then final := newState() else final := target.Value
          if isTerm
          then addEdge source !final (Scan (mapToToken s.text))   // temporary solution
          else
              let startState, endState = nonTermToStates.[s.text]
              let returnState = ref dummyState
  