class_docstr: Parser engine.
  
  The proper usage sequence is:
  
  p = Parser(grammar, [converter])  # create instance
  p.setup([start])                  # prepare for parsing
  <for each input token>:
      if p.addtoken(...):           # parse a token; may raise ParseError
          break
  root = p.rootnode                 # root of abstract syntax tree
  
  A Parser instance may be reused by calling setup() repeatedly.
  
  A Parser instance contains state pertaining to the current token
  sequence, and should not be used concurrently by different threads
  to parse separate token sequences.
  
  See driver.py for how to get input tokens by tokenizing a file or
  string.
  
  Parsing is complete when addtoken() returns True; the root of the
  abstract syntax tree can then be retrieved from the rootnode
  instance variable.  When a syntax error occurs, addtoken() raises
  the ParseError exception.  There is no error recovery; the parser
  cannot be used after a syntax error was reported (but it can be
  reinitialized by calling setup()).
class_docstr_tok: ["Parser","engine",".","The","proper","usage","sequence","is",":","p","=","Parser","(","grammar",",","[","converter","]",")","#","create","instance","p.setup","(","[","start","]",")","#","prepare","for","parsing","<","for","each","input","token",">",":","if","p.addtoken","(","...",")",":","#","parse","a","token",";","may","raise","ParseError","break","root","=","p.rootnode","#","root","of","abstract","syntax","tree","A","Parser","instance","may","be","reused","by","calling","setup","(",")","repeatedly",".","A","Parser","instance","contains","state","pertaining","to","the","current","token","sequence",",","and","should","not","be","used","concurrently","by","different","threads","to","parse","separate","token","sequences",".","See","driver.py","for","how","to","get","input","tokens","by","tokenizing","a","file","or","string",".","Parsing","is","complete","when","addtoken","(",")","returns","True",";","the","root","of","the","abstract","syntax","tree","can","then","be","retrieved","from","the","rootnode","instance","variable",".","When","a","syntax","error","occurs",",","addtoken","(",")","raises","the","ParseError","exception",".","There","is","no","error","recovery",";","the","parser","can","not","be","used","after","a","syntax","error","was","reported","(","but","it","can","be","reinitialized","by","calling","setup","(",")",")","."]
docstr: Shift a token.  (Internal)
docstr_tok: ["Shift","a","token",".","(","Internal",")"]
code: def shift(
      self, type: int, value: str, newstate: int, context: Context
  ) -> None:
      """Shift a token.  (Internal)"""
      if self.is_backtracking:
          dfa, state, _ = self.stack[-1]
          self.stack[-1] = (dfa, newstate, DUMMY_NODE)
      else:
          dfa, state, node = self.stack[-1]
          rawnode: RawNode = (type, value, context, None)
          newnode = convert(self.grammar, rawnode)
          assert node[-1] is not None
          node[-1].append(newnode)
          self.stack[-1] = (dfa, newstate, node)
  
imports: from contextlib import contextmanager
  from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Optional, Set, Tuple, Union, cast
  from blib2to3.pgen2.grammar import Grammar
  from blib2to3.pytree import NL, Context, Leaf, Node, RawNode, convert
  from .None import grammar, token, tokenize
label_desc: Use image node_id 6 for calling the Parser obj's underlying member method code with example usage: obj.shift(type, value, newstate, context) without return types