LARA

Interpreting LL Parsing Table

Computed parse table in 'choice' matrix, as in Building LL Parsing Table

This is the top-down parser:

var stack : Stack[GrammarSymbol]
stack.push(EOF);
stack.push(StartNonterminal);
lex = new Lexer(inputFile)
while (true) {
  X = stack.pop
  t = lex.curent
  if isTerminal(X)
    if (t==X) 
      if (X==EOF) return success
      else lex.next // eat token t
    else
      parseError("Expected " + X)
  else // non-terminal
    cs = choice(X)(t)
    cs match {
    case {i} => // exactly one choice
      rhs = p(X,i) // choose correct right-hand side
      stack.push(reverse(rhs))
    case {} => parseError("Expected element of " + unionOfAll(choice(X)))
    case _ => crash("wrong parse table, not LL(1)")
    }
}

When we write recursive descent procedures by hand, the stack is implicit in the use of recursive procedures.