anchor.diff:                  'null', 'rethrow', 'return', 'super', 'switch', 'this', 'throw',
                   'true', 'try', 'var', 'void', 'while', 'with'];
   
  -/// States
  -var INIT = new Init();
  -var COMMENTS = new Comments();
  -
  -initRules(){
  -  // Keywords.
  -  for(final k in keywords){
  -    INIT.on(k).emit( new ReservedWord() );
  -  }
  -  INIT
  -//    ..on( or(keywords) ).emit( new ReservedWord() )
  -
  -    //Spaces.
  -    ..on( oneOrMore(or(['\t', ' ', NEWLINE])) ).emit(new WhiteSpace())
  -
  -    //Single line comments
  -    ..on( rx(['//', zeroOrMore(not(NEWLINE)), NEWLINE]) )
  -      .emit(new SingleLineComment())
  -
  -    //Multi line comments
  -    ..on('/*').switchTo(COMMENTS);
  -}
  -
  -commentRules(){
  -  COMMENTS
  -    ..on( not('*/') ).switchTo( COMMENTS )
  -    ..on( '/*' ).switchTo( COMMENTS++ )
  -    ..on( '*/' ).call((_) {
  -      if(COMMENTS.internalState == 1) {
  -        _.emit(new MultiLineComment(_.m,_.p));
  -        _.currentState = INIT;
  -      }
  -      else _.currentState = COMMENTS--;
  -    });
  -}
   
   class DartLexer extends Lexer {
  -  DartLexer(stream): super(INIT, stream){
  +  /// States
  +  var INIT = new Init();
  +  var COMMENTS = new Comments();
  +
  +  Lexer lexer;
  +
  +  DartLexer(stream): super(stream){
       initRules();
       commentRules();
     }
  +  initRules(){
  +    // Keywords.
  +    for(final k in keywords){
  +      //    INIT.on(k).emit( () => new ReservedWord() );
  +      INIT.on(k) <= () => new ReservedWord();
  +      INIT << k >> () => new ReservedWord();
  +      //    INIT / rule / action;
  +    }
  +
  +    //Spaces.
  +    INIT << oneOrMore(or(['\t', ' ', NEWLINE])) >> () => new WhiteSpace();
  +    //Single line comments
  +    INIT << rx(['//', zeroOrMore(not(NEWLINE)), zeroOrOne(NEWLINE)])
  +      >> () => new SingleLineComment();
  +
  +    //Multi line comments
  +    INIT.on('/*').switchTo(() => COMMENTS++);
  +  }
  +
  +  commentRules(){
  +    COMMENTS..on( '/*' ).switchTo( () => COMMENTS++ )// this is my problem
  +            ..on( not('*/') ).switchTo( COMMENTS )
  +            ..on( '*/' ).call((_) {
  +              print('COMMENT: ${COMMENTS.internalState}');
  +              if(COMMENTS.internalState == 0) {
  +                _.emit(new MultiLineComment(_.m,_.p));
  +                _.currentState = INIT;
  +              }
  +              else _.currentState = COMMENTS--;
  +            });
  +  }
   }
  
positive.code:  int internalState = 0;
    operator +(n)  {
      this..internalState += n;
      if(DEBUG) print('++ COMMENT = $internalState');
      return this;
    }
    operator -(n) {
      this..internalState -= n;
      if(DEBUG) print('-- COMMENT = $internalState');
      return this;
    }
  }
  
negative.code: import 'package:parse/lexer.dart';
  
  class ReservedWord extends Token {}
  