'Perform a single parsing operation.  If an untried match is
possible, then perform the match, and return the matched
token.  If an untried expansion is possible, then perform the
expansion, and return the production that it is based on.  If
backtracking is possible, then backtrack, and return True.
Otherwise, return None.
:return: None if no operation was performed; a token if a match
was performed; a production if an expansion was performed;
and True if a backtrack operation was performed.
:rtype: Production or String or bool'

def step(self):

    if self.untried_match():
        token = self.match()
        if (token is not None):
            return token
    production = self.expand()
    if (production is not None):
        return production
    if self.backtrack():
        self._trace_backtrack(self._tree, self._frontier)
        return True
    return None
