コード例 #1
0
ファイル: ListAI.cs プロジェクト: DesViv/AIGAME
    public static Boolean init; //Check if code is complied, so that it doesn't have to do it everytime

    #endregion Fields

    #region Methods

    /*
    Compiles the files in the AI sub-dirctory
    */
    public static void initAI()
    {
        if (!init)
        {
            AIPrograms = new Dictionary<string, AIBase>();//Create the hashmap
            CSharpCodeCompiler provider = new CSharpCodeCompiler(); //Get the complier
            CompilerParameters parameters = new CompilerParameters();
            foreach (string file in Directory.GetFiles("AI"))
            {
              //For every file in the AI directory
                Debug.Log ("file: " + file);
                parameters = new CompilerParameters();//Generate new parametes
                foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
                {
                    parameters.ReferencedAssemblies.Add(asm.Location);//Link all the assmeblies to this new file that we are compiling
                }
                Debug.Log(Path.GetFileNameWithoutExtension(file));
                //Read file
                StreamReader theReader = new StreamReader(file, Encoding.Default);
                string code = theReader.ReadToEnd();
                //Actually compile
                CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
                //Check for errors and print them. It would be good to display these later.
                if (results.Errors.Count > 0)
                {
                    foreach (CompilerError CompErr in results.Errors)
                    {
                        Debug.Log("Line number " + CompErr.Line +
                            ", Error Number: " + CompErr.ErrorNumber +
                            ", '" + CompErr.ErrorText + ";");
                    }
                }
                //Create results. Note this will cause a crash if there are errors in scripts. Should change
                Assembly assembly = results.CompiledAssembly;
                Debug.Log("Assembly "+assembly);
                //Get the name of the C# script assembly.
                Type program = assembly.GetType(Path.GetFileNameWithoutExtension(file));
                //Get the constructor for that script to generate a new class
                ConstructorInfo main = program.GetConstructor(new Type[0]);
                //Convert it to an AI script
                AIBase ai = (AIBase)main.Invoke(new System.Object[0]);
                //Add to hashmap under its name.
                AIPrograms.Add(Path.GetFileNameWithoutExtension(file), ai);
            }
        }
    }
コード例 #2
0
        public void Compile(ICompilationJob job)
        {
            job.Output.WriteInfo($"----------------------------------------");
            job.Output.WriteInfo($"Parsing ..");
            // Run parser on every input file
            PParser.ProgramContext[] trees = job.InputFiles.Select(file =>
            {
                PParser.ProgramContext tree = Parse(job, file);
                job.LocationResolver.RegisterRoot(tree, file);
                return(tree);
            }).ToArray();

            job.Output.WriteInfo($"Type checking ...");
            // Run typechecker and produce AST
            Scope scope = Analyzer.AnalyzeCompilationUnit(job.Handler, trees);

            // Convert functions to lowered SSA form with explicit cloning
            foreach (TypeChecker.AST.Declarations.Function fun in scope.GetAllMethods())
            {
                IRTransformer.SimplifyMethod(fun);
            }
            job.Output.WriteInfo($"Code generation ....");
            // Run the selected backend on the project and write the files.
            System.Collections.Generic.IEnumerable <CompiledFile> compiledFiles = job.Backend.GenerateCode(job, scope);
            foreach (CompiledFile file in compiledFiles)
            {
                job.Output.WriteInfo($"Generated {file.FileName}");
                job.Output.WriteFile(file);
            }
            job.Output.WriteInfo($"----------------------------------------");

            // Compiling the generated C# code
            // TODO: This is a special case right now but needs to be factored in after the Java code path is available
            if (job.OutputLanguage == CompilerOutput.CSharp)
            {
                job.Output.WriteInfo($"Compiling {job.ProjectName}.csproj ..\n");
                CSharpCodeCompiler.Compile(job);
                job.Output.WriteInfo($"----------------------------------------");
            }
        }
コード例 #3
0
 public static void initAI()
 {
     if (!init)
     {
         AIPrograms = new Dictionary <string, AIBase>();
         CSharpCodeCompiler provider   = new CSharpCodeCompiler();
         CompilerParameters parameters = new CompilerParameters();
         foreach (string file in Directory.GetFiles("AI"))
         {
             parameters = new CompilerParameters();
             foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
             {
                 parameters.ReferencedAssemblies.Add(asm.Location);
             }
             Debug.Log(Path.GetFileNameWithoutExtension(file));
             StreamReader    theReader = new StreamReader(file, Encoding.Default);
             string          code      = theReader.ReadToEnd();
             CompilerResults results   = provider.CompileAssemblyFromSource(parameters, code);
             if (results.Errors.Count > 0)
             {
                 foreach (CompilerError CompErr in results.Errors)
                 {
                     Debug.Log("Line number " + CompErr.Line +
                               ", Error Number: " + CompErr.ErrorNumber +
                               ", '" + CompErr.ErrorText + ";");
                 }
             }
             Assembly assembly = results.CompiledAssembly;
             Debug.Log("Assembly " + assembly);
             Type            program = assembly.GetType(Path.GetFileNameWithoutExtension(file));
             ConstructorInfo main    = program.GetConstructor(new Type[0]);
             AIBase          ai      = (AIBase)main.Invoke(new System.Object[0]);
             AIPrograms.Add(Path.GetFileNameWithoutExtension(file), ai);
         }
     }
 }
コード例 #4
0
ファイル: ListAI.cs プロジェクト: AHuynh/AIGAME
 public static void initAI()
 {
     if (!init)
     {
         AIPrograms = new Dictionary<string, AIBase>();
         CSharpCodeCompiler provider = new CSharpCodeCompiler();
         CompilerParameters parameters = new CompilerParameters();
         foreach (string file in Directory.GetFiles("AI"))
         {
             parameters = new CompilerParameters();
             foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
             {
                 parameters.ReferencedAssemblies.Add(asm.Location);
             }
             Debug.Log(Path.GetFileNameWithoutExtension(file));
             StreamReader theReader = new StreamReader(file, Encoding.Default);
             string code = theReader.ReadToEnd();
             CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
             if (results.Errors.Count > 0)
             {
                 foreach (CompilerError CompErr in results.Errors)
                 {
                     Debug.Log("Line number " + CompErr.Line +
                         ", Error Number: " + CompErr.ErrorNumber +
                         ", '" + CompErr.ErrorText + ";");
                 }
             }
             Assembly assembly = results.CompiledAssembly;
             Debug.Log("Assembly "+assembly);
             Type program = assembly.GetType(Path.GetFileNameWithoutExtension(file));
             ConstructorInfo main = program.GetConstructor(new Type[0]);
             AIBase ai = (AIBase)main.Invoke(new System.Object[0]);
             AIPrograms.Add(Path.GetFileNameWithoutExtension(file), ai);
         }
     }
 }
コード例 #5
0
        public void ShouldReturnAssemblyWhenCompiled()
        {
            var sheetBuilder        = new SheetBuilder();
            var workbookBuilder     = new WorkbookBuilder(sheetBuilder);
            var assemblyCodeBuilder = new AssemblyCodeBuilder(workbookBuilder);

            const string assemblyName  = "UnitTest";
            var          assemblyCode  = assemblyCodeBuilder.Build(assemblyName, workbook);
            var          assemblyBytes = CSharpCodeCompiler.GetAssemblyBytes(assemblyName, assemblyCode).ToArray();

            Assert.NotEmpty(assemblyBytes);

            var assembly         = Assembly.Load(assemblyBytes);
            var compiledWorkbook = assembly.CreateInstance($"{assemblyName}.Workbook") as IWorkbook;

            Assert.NotNull(compiledWorkbook);

            var sheet = compiledWorkbook.GetSheet(SheetName);

            sheet.Evaluate();
            var value = sheet.GetNumeric("A1");

            Assert.Equal(84, value);
        }
コード例 #6
0
ファイル: CSharpCodeProvider.cs プロジェクト: ForNeVeR/pnet
 // Constructor.
 public CSharpCodeProvider()
 {
     csharpCodeCompiler = new CSharpCodeCompiler();
 }
コード例 #7
0
        public static Type CompileType(string code, ref bool errorInCode, ref List <CompilerError> errors)
        {
            var cSharpCodeCompiler = new CSharpCodeCompiler();

            CompilerParameters parameters = new CompilerParameters
            {
                GenerateInMemory   = true,
                GenerateExecutable = false
            };

            foreach (var assembli in AssembliesDic)
            {
                foreach (var loadDll in _assemblyList)
                {
                    if (assembli.Key != loadDll)
                    {
                        continue;
                    }

                    try
                    {
                        if (!parameters.ReferencedAssemblies.Contains(assembli.Value))
                        {
                            parameters.ReferencedAssemblies.Add(assembli.Value);
                        }
                    }
                    catch
                    {
                        //
                    }
                }
            }

            foreach (string path in GameStateData.GetAssembliesPathes())
            {
                try
                {
                    if (!parameters.ReferencedAssemblies.Contains(path))
                    {
                        parameters.ReferencedAssemblies.Add(path);
                    }
                }
                catch
                {
                    // ignored
                }
            }

            var result   = cSharpCodeCompiler.CompileAssemblyFromSource(parameters, code);
            var assembly = result.CompiledAssembly;

            if (!result.Errors.HasErrors)
            {
                return(assembly.ExportedTypes.FirstOrDefault());
            }

            foreach (CompilerError error in result.Errors)
            {
                errorInCode = true;
                errors.Add(error);
            }

            return(null);
        }