anchor.diff:          advance();
           if (isExponentSign(peek)) advance();
           if (!isDigit(peek)) error('Invalid exponent', -1);
  +        advance();
           simple = false;
         } else {
           break;
         }
  -      advance();
       }
       String string = input.substring(start, index);
       num value = simple ? int.parse(string) : double.parse(string);
  
positive.code:     String string = one;
      if (peek == code) {
        advance();
        string = two;
      }
      assert(OPERATORS.contains(string));
      return new Token(start, string)..withOp(string);
  
negative.code: 
      int start = index;
      switch (peek) {
        case $PERIOD:
          advance();
          return isDigit(peek) ? scanNumber(start) : new Token(start, '.');
        case $LPAREN:
        case $RPAREN:
        case $LBRACE:
        case $RBRACE:
        case $LBRACKET:
        case $RBRACKET:
        case $COMMA:
        case $COLON:
        case $SEMICOLON:
          return scanCharacter(start, new String.fromCharCode(peek));
        case $SQ:
        case $DQ:
          return scanString();
        case $PLUS:
        case $MINUS:
        case $STAR:
        case $SLASH:
        case $PERCENT:
        case $CARET:
        case $QUESTION:
          return scanOperator(start, new String.fromCharCode(peek));
        case $LT:
        case $GT:
        case $BANG:
        case $EQ:
          return scanComplexOperator(start, $EQ, new String.fromCharCode(peek), '=');
        case $AMPERSAND:
          return scanComplexOperator(start, $AMPERSAND, '&', '&');
        case $BAR:
          return scanComplexOperator(start, $BAR, '|', '|');
        case $TILDE:
          return scanComplexOperator(start, $SLASH, '~', '/');
        case $NBSP:
          while (isWhitespace(peek)) advance();
          return scanToken();
      }
  
      String character = new String.fromCharCode(peek);
  