def atom(self):
<EOL>if self.tokens.accept(grammar.param):<EOL><INDENT>return self.param()<EOL><DEDENT>if self.tokens.accept(grammar.let):<EOL><INDENT>return self.let()<EOL><DEDENT>if self.tokens.accept(grammar.select):<EOL><INDENT>return self.select()<EOL><DEDENT>if self.tokens.accept(grammar.select_any):<EOL><INDENT>return self.select_any()<EOL><DEDENT>self.tokens.reject(grammar.sql_keyword)<EOL>if self.tokens.accept(grammar.if_if):<EOL><INDENT>return self.if_if()<EOL><DEDENT>if self.tokens.accept(grammar.prefix):<EOL><INDENT>operator = self.tokens.matched.operator<EOL>start = self.tokens.matched.start<EOL>expr = self.expression(operator.precedence)<EOL>return operator.handler(expr, start=start, end=expr.end,<EOL>source=self.original)<EOL><DEDENT>if self.tokens.accept(grammar.literal):<EOL><INDENT>return ast.Literal(self.tokens.matched.value, source=self.original,<EOL>start=self.tokens.matched.start,<EOL>end=self.tokens.matched.end)<EOL><DEDENT>if self.tokens.accept(grammar.builtin):<EOL><INDENT>return self.builtin(self.tokens.matched.value)<EOL><DEDENT>if self.tokens.accept(grammar.application):<EOL><INDENT>return self.application(<EOL>ast.Var(self.tokens.matched.value, source=self.original,<EOL>start=self.tokens.matched.start,<EOL>end=self.tokens.matched.first.end))<EOL><DEDENT>if self.tokens.accept(common_grammar.symbol):<EOL><INDENT>return ast.Var(self.tokens.matched.value, source=self.original,<EOL>start=self.tokens.matched.start,<EOL>end=self.tokens.matched.end)<EOL><DEDENT>if self.tokens.accept(common_grammar.lparen):<EOL><INDENT>start = self.tokens.matched.start<EOL>expressions = [self.expression()]<EOL>while self.tokens.accept(common_grammar.comma):<EOL><INDENT>expressions.append(self.expression())<EOL><DEDENT>self.tokens.expect(common_grammar.rparen)<EOL>if len(expressions) == <NUM_LIT:1>:<EOL><INDENT>return expressions[<NUM_LIT:0>]<EOL><DEDENT>else:<EOL><INDENT>return ast.Repeat(*expressions, source=self.original,<EOL>start=start, end=self.tokens.matched.end)<EOL><DEDENT><DEDENT>if self.tokens.accept(common_grammar.lbracket):<EOL><INDENT>return self.list()<EOL><DEDENT>if self.tokens.peek(<NUM_LIT:0>):<EOL><INDENT>return self.error(<EOL>"<STR_LIT>" % self.tokens.peek(<NUM_LIT:0>).name,<EOL>start_token=self.tokens.peek(<NUM_LIT:0>))<EOL><DEDENT>else:<EOL><INDENT>return self.error("<STR_LIT>")<EOL><DEDENT>
Parse an atom, which is most things.

        Grammar:
            atom =
                [ prefix ]
                ( select_expression
                | any_expression
                | func_application
                | let_expr
                | var
                | literal
                | list
                | "(" expression ")" ) .