docs: def _action(self, action):
          """do something! What you do is determined by the argument:
             1   Output A. Copy B to A. Get the next B.
             2   Copy B to A. Get the next B. (Delete A).
             3   Get the next B. (Delete B).
             action treats a string as a single character. Wow!
             action recognizes a regular expression if it is preceded by ( or , or =.
          """
          if action <= 1:
              self._outA()
  
          if action <= 2:
              self.theA = self.theB
              if self.theA == "'" or self.theA == '"':
                  while 1:
                      self._outA()
                      self.theA = self._get()
                      if self.theA == self.theB:
                          break
                      if self.theA <= '\n':
                          raise UnterminatedStringLiteral()
                      if self.theA == '\\':
                          self._outA()
                          self.theA = self._get()
  
  
          if action <= 3:
              self.theB = self._next()
              if self.theB == '/' and (self.theA == '(' or self.theA == ',' or
                                       self.theA == '=' or self.theA == ':' or
                                       self.theA == '[' or self.theA == '?' or
                                       self.theA == '!' or self.theA == '&' or
                                       self.theA == '|'):
                  self._outA()
                  self._outB()
                  while 1:
                      self.theA = self._get()
                      if self.theA == '/':
                          break
                      elif self.theA == '\\':
                          self._outA()
                          self.theA = self._get()
                      elif self.theA <= '\n':
                          raise UnterminatedRegularExpression()
                      self._outA()
                  self.theB = self._next()