TokenIterator doTokenize()

in smithy-jmespath/src/main/java/software/amazon/smithy/jmespath/Lexer.java [48:146]


    TokenIterator doTokenize() {
        while (!eof()) {
            char c = peek();

            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_') {
                tokens.add(parseIdentifier());
                continue;
            }

            if (c == '-' || (c >= '0' && c <= '9')) {
                tokens.add(parseNumber());
                continue;
            }

            switch (c) {
                case '.':
                    tokens.add(new Token(TokenType.DOT, null, line, column));
                    skip();
                    break;
                case '[':
                    tokens.add(parseLbracket());
                    break;
                case '*':
                    tokens.add(new Token(TokenType.STAR, null, line, column));
                    skip();
                    break;
                case '|':
                    tokens.add(parseAlternatives('|', TokenType.OR, TokenType.PIPE));
                    break;
                case '@':
                    tokens.add(new Token(TokenType.CURRENT, null, line, column));
                    skip();
                    break;
                case ']':
                    tokens.add(new Token(TokenType.RBRACKET, null, line, column));
                    skip();
                    break;
                case '{':
                    tokens.add(new Token(TokenType.LBRACE, null, line, column));
                    skip();
                    break;
                case '}':
                    tokens.add(new Token(TokenType.RBRACE, null, line, column));
                    skip();
                    break;
                case '&':
                    tokens.add(parseAlternatives('&', TokenType.AND, TokenType.EXPREF));
                    break;
                case '(':
                    tokens.add(new Token(TokenType.LPAREN, null, line, column));
                    skip();
                    break;
                case ')':
                    tokens.add(new Token(TokenType.RPAREN, null, line, column));
                    skip();
                    break;
                case ',':
                    tokens.add(new Token(TokenType.COMMA, null, line, column));
                    skip();
                    break;
                case ':':
                    tokens.add(new Token(TokenType.COLON, null, line, column));
                    skip();
                    break;
                case '"':
                    tokens.add(parseString());
                    break;
                case '\'':
                    tokens.add(parseRawStringLiteral());
                    break;
                case '`':
                    tokens.add(parseLiteral());
                    break;
                case '=':
                    tokens.add(parseEquals());
                    break;
                case '>':
                    tokens.add(parseAlternatives('=', TokenType.GREATER_THAN_EQUAL, TokenType.GREATER_THAN));
                    break;
                case '<':
                    tokens.add(parseAlternatives('=', TokenType.LESS_THAN_EQUAL, TokenType.LESS_THAN));
                    break;
                case '!':
                    tokens.add(parseAlternatives('=', TokenType.NOT_EQUAL, TokenType.NOT));
                    break;
                case ' ':
                case '\n':
                case '\r':
                case '\t':
                    skip();
                    break;
                default:
                    throw syntax("Unexpected syntax: " + peekSingleCharForMessage());
            }
        }

        tokens.add(new Token(TokenType.EOF, null, line, column));
        return new TokenIterator(tokens);
    }