The basic idea of a *recursive descent parser* is to use the
current input symbol to decide which alternative to choose. Grammars
which have the property that it is possible to do this are called
LL(1) grammars.

First we introduce an end marker , for a given we define the augmented grammar where

- where is chosen s.t. ,
- where is chosen s.t. ,

Now for each nonterminal symbol we define

i.e. is the set of terminal symbols with which a word derived from may start and is the set of symbols which may occur directly after . We use the augmented grammar to have a marker for the end of the word.

For each production we define the set which are the set of symbols which indicate that we are in this alternative.

We now say **a grammar is LL(1)**, iff for each pair
with
it is the case
that