private JmespathExpression nud() {
        Token token = iterator.expect(NUD_TOKENS);
        switch (token.type) {
            case CURRENT: // Example: @
                return new CurrentExpression(token.line, token.column);
            case IDENTIFIER: // Example: foo
                // For example, "foo(" starts a function expression.
                if (iterator.peek().type == TokenType.LPAREN) {
                    iterator.expect(TokenType.LPAREN);
                    List<JmespathExpression> arguments = parseList(TokenType.RPAREN);
                    return new FunctionExpression(token.value.expectStringValue(), arguments, token.line, token.column);
                } else {
                    return new FieldExpression(token.value.expectStringValue(), token.line, token.column);
                }
            case STAR: // Example: *
                return parseWildcardObject(new CurrentExpression(token.line, token.column));
            case LITERAL: // Example: `true`
                return new LiteralExpression(token.value.getValue(), token.line, token.column);
            case LBRACKET: // Example: [1]
                return parseNudLbracket();
            case LBRACE: // Example: {foo: bar}
                return parseNudLbrace();
            case FLATTEN: // Example: [].bar
                return parseFlatten(new CurrentExpression(token.line, token.column));
            case EXPREF: // Example: sort_by(@, &foo)
                JmespathExpression expressionRef = expression(token.type.lbp);
                return new ExpressionTypeExpression(expressionRef, token.line, token.column);
            case NOT: // Example: !foo
                JmespathExpression notNode = expression(token.type.lbp);
                return new NotExpression(notNode, token.line, token.column);
            case FILTER: // Example: [?foo == bar]
                return parseFilter(new CurrentExpression(token.line, token.column));
            case LPAREN: // Example (foo)
                JmespathExpression insideParens = expression(0);
                iterator.expect(TokenType.RPAREN);
                return insideParens;
            default:
                throw iterator.syntax("Invalid nud token: " + token);
        }
    }
Tokens that can follow led tokens.
smithy-jmespath/src/main/java/software/amazon/smithy/jmespath/Parser.java