class Compiler { public: Compiler(); virtual void Compile(istream&, BytecodeStream&); }; void Compiler::Compile (istream& input, BytecodeStreamk output) { Scanner scanner(input); ProgramNodeBuilder builder; Parser parser; parser.Parse(scanner, builder); RISCCodeGenerator generator(output); ProgramNode* parseTree = builder.GetRootNode(); parseTree->Traverse(generator); }