':rtype: iter(Tree)
:return: an iterator of all parses that can be generated by
matching the first element of ``frontier`` against the
first token in ``rtext``.  In particular, if the first
element of ``frontier`` has the same type as the first
token in ``rtext``, then substitute the token into
``tree``; and return all parses that can be generated by
matching and expanding the remaining elements of
``frontier``.  If the first element of ``frontier`` does not
have the same type as the first token in ``rtext``, then
return empty list.
:type tree: Tree
:param tree: A partial structure for the text that is
currently being parsed.  The elements of ``tree``
that are specified by ``frontier`` have not yet been
expanded or matched.
:type rtext: list(str)
:param rtext: The portion of the text that is not yet
covered by ``tree``.
:type frontier: list of tuple of int
:param frontier: A list of the locations within ``tree`` of
all subtrees that have not yet been expanded, and all
leaves that have not yet been matched.'

def _match(self, rtext, tree, frontier):

    tree_leaf = tree[frontier[0]]
    if ((len(rtext) > 0) and (tree_leaf == rtext[0])):
        newtree = tree.copy(deep=True)
        newtree[frontier[0]] = rtext[0]
        if self._trace:
            self._trace_match(newtree, frontier[1:], rtext[0])
        for result in self._parse(rtext[1:], newtree, frontier[1:]):
            (yield result)
    elif self._trace:
        self._trace_backtrack(tree, frontier, rtext[:1])
