'Parse the sourcecode and return the abstract syntax tree.  This
tree of nodes is used by the compiler to convert the template into
executable source- or bytecode.  This is useful for debugging or to
extract information from templates.
If you are :ref:`developing Jinja2 extensions <writing-extensions>`
this gives you a good overview of the node tree generated.'

@internalcode
def parse(self, source, name=None, filename=None):

    try:
        return self._parse(source, name, filename)
    except TemplateSyntaxError:
        exc_info = sys.exc_info()
    self.handle_exception(exc_info, source_hint=source)
