anchor.diff:  
       // If there's input left to process, process it:
       if (!currentInput.isEmpty) {
  +      print('more input');
         var c = currentInput.first;
         currentState = currentState.next(c);
  -      currentInput = currentInput.skip(1);
  +      currentInput = new List.from(currentInput.skip(1));
       }
   
       // If more progress could be made, keep working.
  -    if (!currentInput.isEmpty || currentState.isReject)
  +    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();
  +      lastAcceptingState = new RejectState(inputs);
         lastAcceptingInput = null;
         return true;
       }
       return false;
     }
   
  -  void emit(token) => output.add(token);
  -
  -  State operator >>(Rule rule) => this..rules.add(rule);
  +  _State emit(token) {
  +    output.add(token);
  +    return main;
  +  }
  +  _State hidden(token) {
  +    output.add(token);
  +    return main;
  +  }
   }
  
positive.code: abstract class Rule {
    bool get accepts;
    bool get rejects;
    bool get mustAccept;
  
    State accept(List inputs);
    List<Rule> derive(input);
    List<Rule> deriveEND();
  }
  
  /// Represents a state
  abstract class _State {
  
negative.code:   }
  
    bool workStep() {
      //    print(currentState);
      //    print(currentInput);
      print(lastAcceptingInput);
      print('inputs: $inputs');
      // First, check to see if the current state must accept.
      if (currentState.mustAccept) {
        print('mustAccept');
        currentState = currentState.accept();
        lastAcceptingState = new RejectState(inputs);
        lastAcceptingInput = null;
        return true;
      }
  
      // First, check to see if the curret state accepts or rejects.
      if (currentState.isAccept) {
        print('isAccept');
        lastAcceptingState = currentState;
        lastAcceptingInput = inputs;//currentInput;
      } else if (currentState.isReject) {
        print('isReject');
        // Backtrack to the last accepting state; fail if none.
        currentState = lastAcceptingState.accept();
        currentInput = lastAcceptingInput;
        lastAcceptingState = new RejectState(inputs);
        lastAcceptingInput = null;
        return true;
      }
  
      // If at the end of the input, clean up:
      if (currentInput.isEmpty) {
        print('isEmpty');
        var terminalState = currentState.terminate();
        if (terminalState.isAccept) {
          terminalState.accept();
          return false;
        } else {
        print('not isEmpty');
          currentState = lastAcceptingState.accept();
          currentInput = lastAcceptingInput;
          lastAcceptingState = new RejectState(inputs);
          lastAcceptingInput = null;
          return true;
        }
  