Example #1
0
        static void Main(string[] args)
        {
            string path = RLParser.Program.GetPath();

            while (true)
            {
                string code = File.ReadAllText(path);
                Console.Clear();


                Action <CompileException, Context> onError = (e, l) =>
                {
                    Console.WriteLine(e);
                    Console.WriteLine("On line " + l.Lines.End);
                    Console.WriteLine();
                    Console.WriteLine();
                    Console.WriteLine();
                };
                Context     program = RLParser.RLParser.Parse(code, onError);
                SymbolTable table   = RlTypeChecker.TypeCheck(program, onError);

                var fileGenerator = new FileEvaluator(Path.GetFileNameWithoutExtension(path), program as FileContext);
                fileGenerator.GenerateAssembly(table);

                program.ConsolePrint();

                Console.ReadKey();
            }


            string aName = "Practice";

            var assemblyName    = new AssemblyName(aName);
            var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
            var moduleBuilder   = assemblyBuilder.DefineDynamicModule("MainModule", "HelloWorld.exe");
            var typeBuilder     = moduleBuilder.DefineType("Program");

            var AddMethod = typeBuilder.DefineMethod("Add", MethodAttributes.Static, typeof(int), new[] { typeof(int), typeof(int) });
            var addILGen  = AddMethod.GetILGenerator();

            addILGen.Emit(OpCodes.Ldarg_0);
            addILGen.Emit(OpCodes.Ldarg_1);
            addILGen.Emit(OpCodes.Add);
            addILGen.Emit(OpCodes.Ret);

            var methodBuilder = typeBuilder.DefineMethod("Main", MethodAttributes.Static);
            var ilGenerator   = methodBuilder.GetILGenerator();

            ilGenerator.Emit(OpCodes.Ldc_I4, 3);
            ilGenerator.Emit(OpCodes.Ldc_I4, 5);
            ilGenerator.Emit(OpCodes.Call, AddMethod);
            ilGenerator.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new[] { typeof(int) }));
            ilGenerator.Emit(OpCodes.Ret);
            typeBuilder.CreateType();

            assemblyBuilder.SetEntryPoint(methodBuilder);
            assemblyBuilder.Save("HelloWorld.exe");
        }
Example #2
0
 public ClassEvaluator(FileEvaluator parent, ClassHeaderContext header)
 {
     this.parent = parent;
     this.header = header;
 }