def _action(self, action):
if action <= <NUM_LIT:1>:<EOL><INDENT>self._outA()<EOL><DEDENT>if action <= <NUM_LIT:2>:<EOL><INDENT>self.theA = self.theB<EOL>if self.theA == "<STR_LIT:'>" or self.theA == '<STR_LIT:">':<EOL><INDENT>while <NUM_LIT:1>:<EOL><INDENT>self._outA()<EOL>self.theA = self._get()<EOL>if self.theA == self.theB:<EOL><INDENT>break<EOL><DEDENT>if self.theA <= '<STR_LIT:\n>':<EOL><INDENT>raise UnterminatedStringLiteral()<EOL><DEDENT>if self.theA == '<STR_LIT:\\>':<EOL><INDENT>self._outA()<EOL>self.theA = self._get()<EOL><DEDENT><DEDENT><DEDENT><DEDENT>if action <= <NUM_LIT:3>:<EOL><INDENT>self.theB = self._next()<EOL>if self.theB == '<STR_LIT:/>' and (self.theA == '<STR_LIT:(>' or self.theA == '<STR_LIT:U+002C>' or<EOL>self.theA == '<STR_LIT:=>' or self.theA == '<STR_LIT::>' or<EOL>self.theA == '<STR_LIT:[>' or self.theA == '<STR_LIT:?>' or<EOL>self.theA == '<STR_LIT:!>' or self.theA == '<STR_LIT:&>' or<EOL>self.theA == '<STR_LIT:|>' or self.theA == '<STR_LIT:;>' or<EOL>self.theA == '<STR_LIT:{>' or self.theA == '<STR_LIT:}>' or<EOL>self.theA == '<STR_LIT:\n>'):<EOL><INDENT>self._outA()<EOL>self._outB()<EOL>while <NUM_LIT:1>:<EOL><INDENT>self.theA = self._get()<EOL>if self.theA == '<STR_LIT:/>':<EOL><INDENT>break<EOL><DEDENT>elif self.theA == '<STR_LIT:\\>':<EOL><INDENT>self._outA()<EOL>self.theA = self._get()<EOL><DEDENT>elif self.theA <= '<STR_LIT:\n>':<EOL><INDENT>raise UnterminatedRegularExpression()<EOL><DEDENT>self._outA()<EOL><DEDENT>self.theB = self._next()<EOL><DEDENT><DEDENT>
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 =.