Is this a correct grammar for untyped lambda calculus? I am trying to write a recursive-descent parser for untyped lambda calculus. While researching the way of formulating the grammar, I managed to put together something like this:

without left-recursion:
TERM         -&gt; APPLICATION | ABSTRACTION
ABSTRACTION  -&gt; LAMBDA LCID DOT TERM
APPLICATION  -&gt; ATOM APPLICATION'
APPLICATION' -&gt; ATOM APPLICATION' | ε       
ATOM         -&gt; LPAREN TERM RPAREN | LCID
LCID         -&gt; 'a' | 'b' | ... | 'z'
DOT          -&gt; '.'
LAMBDA       -&gt; 'λ'


I assume that for writing the parser I do not necessarily need the productions that only expand into terminals.

Can this grammar be used to write a recursive descent parser that only does 1-token lookups? What would be the resulting AST for (λx.x)(λy.y) ?
Your grammar looks fine. You can make a recursive descent parser for it.

The AST for (\x.x)(\y.y) is, if I got everything right,

term
  application
    atom
      lparen
      term
        abstraction
          lambda
          lcid
            x
          dot
          term
            application
              atom
                lcid
                  x
              application'
                eps
      rparen
    application'
      atom
        lparen
        term
          abstraction
            lambda
            lcid
              x
            dot
            term
              application
                atom
                  lcid
                    y
                application'
                  eps
        rparen
      application'
        eps