code: public Token scanIdentifier() {
          if ('`' == charAt(offset)) {
              int length = getLengthUntilTerminatedChar('`');
              return new Token(Literals.IDENTIFIER, input.substring(offset, offset + length), offset + length);
          }
          if ('"' == charAt(offset)) {
              int length = getLengthUntilTerminatedChar('"');
              return new Token(Literals.IDENTIFIER, input.substring(offset, offset + length), offset + length);
          }
          if ('[' == charAt(offset)) {
              int length = getLengthUntilTerminatedChar(']');
              return new Token(Literals.IDENTIFIER, input.substring(offset, offset + length), offset + length);
          }
          int length = 0;
          while (isIdentifierChar(charAt(offset + length))) {
              length++;
          }
          String literals = input.substring(offset, offset + length);
          if (isAmbiguousIdentifier(literals)) {
              return new Token(processAmbiguousIdentifier(offset + length, literals), literals, offset + length);
          }
          return new Token(dictionary.findTokenType(literals, Literals.IDENTIFIER), literals, offset + length);
      }
docs: scan identifier.
  
  @return identifier token