Efficient, table-driven bottom-up parsing methods for computer languages and other notations formally defined by a grammar