where each rule is a TRAVERSABLE[STRING] (with each String being the name of an atom of the
PARSE_TABLE), and each agent may either be Void or a PROCEDURE[TUPLE] called when reducing the
non-terminal.
The Result is yes if the parsing succeeded, no if there was a syntax error, or maybe if the
parse could complete with some more text.
require
context /= Void
ensure
context.actions.count >= old context.actions.count
not Result.is_equal(yes) implies context.buffer.current_index = old context.buffer.current_index and then context.actions.count = old context.actions.count