Ejemplo n.º 1
0
        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(" ");
                }
            }
        }
Ejemplo n.º 2
0
        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(" ");
                }
            }
        }
Ejemplo n.º 3
0
        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(" ");
                }
            }
        }