prog = (Program)prog.accept(new RenameBitVars());
    public void run(String[] args)    {        doOptions(args);        if (printHelp)        {            printUsage();            return;        }                StreamItParserFE parser = null;        Program prog = null;        Writer outWriter;        try        {            if (outputFile != null)                outWriter = new FileWriter(outputFile);            else                outWriter = new OutputStreamWriter(System.out);            outWriter.write("import streamit.*;\n");            /* Might want to check whether this is actually necessary;             * there have been complaints before. */            outWriter.write("class Complex extends Structure {\n" +                            "  public float real;\n" +                            "  public float imag;\n" +                            "}\n");            for (Iterator iter = inputFiles.iterator(); iter.hasNext(); )            {                String fileName = (String)iter.next();                InputStream inStream = new FileInputStream(fileName);                DataInputStream dis = new DataInputStream(inStream);                StreamItLex lexer = new StreamItLex(dis);                parser = new StreamItParserFE(lexer);                parser.setFilename(fileName);                prog = parser.program();                /* What's the right order for these?  Clearly generic                 * things like MakeBodiesBlocks need to happen first.                 * I don't think there's actually a problem running                 * MoveStreamParameters after DoComplexProp, since                 * this introduces only straight assignments which the                 * Java front-end can handle.  OTOH,                 * MoveStreamParameters introduces references to                 * "this", which doesn't exist. */                TempVarGen varGen = new TempVarGen();                prog = (Program)prog.accept(new MakeBodiesBlocks());                if (!libraryFormat)                    prog = (Program)prog.accept(new NoticePhasedFilters());                prog = (Program)prog.accept(new DoComplexProp(varGen));                prog = (Program)prog.accept(new TranslateEnqueue());                prog = (Program)prog.accept(new InsertIODecls(libraryFormat));                prog = (Program)prog.accept(new InsertInitConstructors());                prog = (Program)prog.accept(new MoveStreamParameters());                prog = (Program)prog.accept(new NameAnonymousFunctions());                String javaOut = (String)prog.accept(new NodesToJava(null));                outWriter.write(javaOut);            }            outWriter.flush();        }        catch (Exception e)        {            e.printStackTrace(System.err);            return;        }            }