LL basically means "top down".
A top down parser is something that starts with the proposition of wanting to parse the top level element in a grammar first, consumes the tokens necessary to start that element, and then proceeds to recurse "downwards" toward more detailed elements in the grammar.
The easiest way to understand top-down parsing is to implement a parser. A hypothetical example may look like:
void parseFile()
{
while(classesContinue())
{
parseClass();
}
}
void parseClass()
{
consume(Tokens.Class);
consume(Tokens.ID);
consume(Tokens.LCurly);
while(membersContinue())
{
parseMember();
}
consume(Tokens.RCurly);
}
The number in paranthesis next to LL (as in LL(1)), is the maximum number of look ahead necessary to implement any "choices" that have to be made by the parser. For example, "parseMember" may look like:
void parseMember()
{
parseTypeName();
parseID();
switch (lookAhead())
{
case Tokens.Semi:
case Token.Equals:
parseVariableDecl();
break;
default:
parseMethod();
break;
}
}
In which case the parser would be LL(1), because it requires one token of lookahead.
In any case, an LL (1) grammar is just a specification of an LL(1) parser in a formal notation, usually some variant of EBNF.
Does that help?