private PythonParser setupParser(boolean single) {
   PythonLexer lexer = new PyLexer(charStream, single);
   lexer.setErrorHandler(errorHandler);
   CommonTokenStream tokens = new CommonTokenStream(lexer);
   PythonTokenSource indentedSource = new PythonTokenSource(tokens, filename, single);
   tokens = new CommonTokenStream(indentedSource);
   PythonParser parser = new PythonParser(tokens, encoding);
   parser.setErrorHandler(errorHandler);
   parser.setTreeAdaptor(new PythonTreeAdaptor());
   return parser;
 }
 public mod parseExpression() {
   mod tree = null;
   PythonParser parser = setupParser(false);
   try {
     PythonParser.eval_input_return r = parser.eval_input();
     tree = (mod) r.tree;
   } catch (RecognitionException e) {
     // XXX: this can't happen.  Need to strip the throws from antlr
     //     generated code.
   }
   return tree;
 }
 public mod parseInteractive() {
   mod tree = null;
   PythonParser parser = setupParser(true);
   try {
     PythonParser.single_input_return r = parser.single_input();
     tree = (mod) r.tree;
   } catch (RecognitionException e) {
     // I am only throwing ParseExceptions, but "throws RecognitionException" still gets
     // into the generated code.
     System.err.println("FIXME: pretty sure this can't happen -- but needs to be checked");
   }
   return tree;
 }