This is the parser we get when we write DCGs. Here the approach is more interpretive and supports nondeterminacy.
Body is a list of terminals and nonterminals.
Were we not to add the table declaration, we would get a recursive descent recognizer. But with the table declaration, we get the Earley-type recognizer of XSB as described above. The tabling reflects right through the programmed recognizer. Here we want to include the context in which a First set is computed. The definition of first above would return a list of length one for that symbol.