class_docstr: This is the central parsing class Jinja uses.  It's passed to
  extensions and can be used to parse expressions or statements.
class_docstr_tok: ["This","is","the","central","parsing","class","Jinja","uses",".","It","'s","passed","to","extensions","and","can","be","used","to","parse","expressions","or","statements","."]
code: def __init__(
      self,
      environment: "Environment",
      source: str,
      name: t.Optional[str] = None,
      filename: t.Optional[str] = None,
      state: t.Optional[str] = None,
  ) -> None:
      self.environment = environment
      self.stream = environment._tokenize(source, name, filename, state)
      self.name = name
      self.filename = filename
      self.closed = False
      self.extensions: t.Dict[
          str,
          t.Callable[
              ["Parser"], t.Union[nodes.Node, t.List[nodes.Node]]
          ],
      ] = {}
      for extension in environment.iter_extensions():
          for tag in extension.tags:
              self.extensions[tag] = extension.parse
      self._last_identifier = 0
      self._tag_stack: t.List[str] = []
      self._end_token_stack: t.List[t.Tuple[str, ...]] = []
  
imports: import typing
  import typing
  from .None import nodes
  from .exceptions import TemplateAssertionError
  from .exceptions import TemplateSyntaxError
  from .lexer import describe_token
  from .lexer import describe_token_expr
label_desc: Use image node_id 1 to create a new Parser object  with example: obj = Parser(environment, source, name, filename, state)