code: void action(int d) throws IOException, UnterminatedRegExpLiteralException,
  			UnterminatedCommentException, UnterminatedStringLiteralException {
  		switch (d) {
  		case 1:
  			out.write(theA);
  		case 2:
  			theA = theB;
  
  			if (theA == '\'' || theA == '"') {
  				for (;;) {
  					out.write(theA);
  					theA = get();
  					if (theA == theB) {
  						break;
  					}
  					if (theA <= '\n') {
  						throw new UnterminatedStringLiteralException();
  					}
  					if (theA == '\\') {
  						out.write(theA);
  						theA = get();
  					}
  				}
  			}
  			
  		case 3:
  			theB = next();
  			if (theB == '/' && (theA == '(' || theA == ',' || theA == '=' ||
                      			theA == ':' || theA == '[' || theA == '!' || 
                      			theA == '&' || theA == '|' || theA == '?' || 
                      			theA == '{' || theA == '}' || theA == ';' || 
                      			theA == '\n')) {
  				out.write(theA);
  				out.write(theB);
  				for (;;) {
  					theA = get();
  					if (theA == '/') {
  						break;
  					} else if (theA == '\\') {
  						out.write(theA);
  						theA = get();
  					} else if (theA <= '\n') {
  						throw new UnterminatedRegExpLiteralException();
  					}
  					out.write(theA);
  				}
  				theB = next();
  			}
  		}
  	}
docs: 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 =.