Consider the definition of tt(input):
        verb(
    input:    
            // empty 
    | 
            input line
    ;
        )
    This definition reads as follows: em(A complete input is either an empty
string, or a complete input followed by an input line). Notice that `complete
input' is defined in terms of itself. This definition is said to be em(left
recursive) since input appears always as the leftmost symbol in the
sequence. See section ref(RECURSIVE).

The first alternative is empty because there are no symbols between the colon
and the first `tt(|)'; this means that input can match an empty string of
input (no tokens). We write the rules this way because it is legitimate to
type tt(Ctrl-d) right after you start the calculator. It's conventional to put
an empty alternative first and write the comment `tt(// empty)' in it.

The second alternate rule (tt(input line)) handles all nontrivial input. It
means em(After reading any number of lines, read one more line if
possible). The left recursion makes this rule into a loop. Since the first
alternative matches empty input, the loop can be executed zero or more times.

The parser's parsing function (tt(parse())) continues to process input until a
grammatical error is seen or the lexical analyzer says there are no more input
tokens, which occurs at end of file.

