anchor.diff:  
     /// Accepts the [input]
     _State accept(){
  +    print('accepting $inputs');
       var accepting = rules.where((_) => _.accepts);
       return (accepting.last).accept(inputs);
     }
  
positive.code: }
  
  class RejectState extends _State {
    RejectState(): super(null, []);
    accept() => throw new Exception("Lexing failure at: $inputs");
  }
  
  /// State to be defined by the user.
  class State extends _State {
  
    List<Rule> _rules = <Rule>[];
  
    /// Starts with empty rules and input
    State(): super([], []);
  
negative.code: 
      // If there's input left to process, process it:
      if (!currentInput.isEmpty) {
        print('more input');
        var c = currentInput.first;
        currentState = currentState.next(c);
        currentInput = new List.from(currentInput.skip(1));
      }
  
      // If more progress could be made, keep working.
      if (!currentInput.isEmpty || currentState.isReject){
        print('more progress');
        return true;
      }
  
      // Check again to see if the current state must accept.
      if (currentState.mustAccept) {
        print('mustAccept again');
        currentState = currentState.accept();
        lastAcceptingState = new RejectState(inputs);
        lastAcceptingInput = null;
        return true;
      }
      return false;
    }
  
    _State emit(token) {
      output.add(token);
      return main;
    }
    _State hidden(token) {
      output.add(token);
      return main;
    }
  }
  