public void Compile(Generator gen, String outputFile) { // Generate compiletime environment var labelMap = new Dictionary <String, String>(); foreach (String funName in fenv.getFunctionNames()) { labelMap.Add(funName, Label.Fresh()); } CEnv cenv = new CEnv(labelMap); // Compile expression e.Compile(cenv, gen); gen.Emit(Instruction.PRINTI); gen.Emit(Instruction.STOP); // Compile functions foreach (FuncDef f in fenv.getFunctions()) { cenv = new CEnv(labelMap); f.Compile(gen, cenv); } // Generate bytecode at and print to file gen.PrintCode(); int[] bytecode = gen.ToBytecode(); using (TextWriter wr = new StreamWriter(outputFile)) { foreach (int b in bytecode) { wr.Write(b); wr.Write(" "); } } }
public void Compile(Generator generator, string outputFile) { // Generate compiletime environment var labels = _functionEnvironment.GetFunctionNames().ToDictionary(funName => funName, funName => Label.Fresh()); var compilationEnvironment = new CompilationEnvironment(labels); // Compile expression _expression.Compile(compilationEnvironment, generator); generator.Emit(Instruction.PrintI); generator.Emit(Instruction.Stop); // Compile functions foreach (var functionDefinition in _functionEnvironment.GetFunctions()) { compilationEnvironment = new CompilationEnvironment(labels); functionDefinition.Compile(compilationEnvironment, generator); } // Generate bytecode at and print to file generator.PrintCode(); var bytecode = generator.ToBytecode(); using (TextWriter writer = new StreamWriter(outputFile)) { foreach (var b in bytecode) { writer.Write(b); writer.Write(" "); } } }