예제 #1
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="options">Options for the compiler.</param>
        public CompileAction(CompileOptions options, bool usedExternally = false)
        {
            Opcode.InitMachineCodeData();
            CompiledObject.InitTypeData();
            SafeSerializationMgr.CheckIDumperStatics();

            _usedExternally = usedExternally;
            _options        = options;

            _shared = new SafeSharedObjects();
            _shared.FunctionManager          = new FunctionManager(_shared);
            _shared.GameEventDispatchManager = new NoopGameEventDispatchManager();
            _shared.Processor     = new NoopProcessor();
            _shared.ScriptHandler = new KSScript();
            _shared.Screen        = new Screen();
            _shared.UpdateHandler = new UpdateHandler();
            _shared.VolumeMgr     = new VolumeManager();
            _shared.FunctionManager.Load();

            _compilerOptions = new CompilerOptions()
            {
                LoadProgramsInSameAddressSpace = false,
                IsCalledFromRun = false,
                FuncManager     = _shared.FunctionManager
            };

            _logger        = new CompilerLogger();
            _scriptLoader  = new KerboscriptLoader(_shared.VolumeMgr as VolumeManager, _logger, _options);
            _scriptDeleter = new KerboscriptDeleter(_options);
        }
예제 #2
0
        private void Run(string fileNameCommon)
        {
            try
            {
                Lexer grammarLexer = new Lexer(FileName);

                Console.WriteLine(MessagesHelper.InfoLexer);

                MiniJavaParser parser = new MiniJavaParser(grammarLexer.TokenStream);
                //Antlr.Runtime.Tree.CommonTree tree = parser.program().Tree;
                //Console.WriteLine();
                //Console.WriteLine(tree.ToStringTree());
                //Console.WriteLine();
                //parser.Reset();

                BaseSymbol symbol = parser.program().value;

                Console.WriteLine(MessagesHelper.InfoParser);

                //Console.WriteLine(symbol.ToStringTree());

                if (parser.HasError)
                {
                    Console.WriteLine(MessagesHelper.ErrorParser);
                    Console.WriteLine(parser.ErrorMessage);
                    Console.WriteLine(parser.ErrorPosition);
                    HasError = true;
                }
                else
                {
                    //Console.WriteLine(symbol.ToXmlTree());
                    grammarLexer.SaveToFile(string.Format("{0}{1}", fileNameCommon, LexerPostfix));
                    symbol.SaveToFile(string.Format("{0}{1}", fileNameCommon, ParserPostfix));
                    Console.WriteLine(MessagesHelper.InfoCompiler);

                    try
                    {
                        ICompilerLogger logger  = new CompilerLogger(string.Format("{0}{1}", fileNameCommon, CodegenPostfix));
                        string          exeName = string.Format("{0}.exe", fileNameCommon);
                        SharpCodeGen    codeGen = new SharpCodeGen(symbol, exeName, logger);
                        codeGen.GenerateCode();
                        logger.Save();
                        Console.WriteLine("{0}{1}{2}: [{3}]", MessagesHelper.SuccessCompiler, GrammarHelper.NewLineSymbol, MessagesHelper.Output, exeName);
                    }
                    catch (CodeGenerationException ex)
                    {
                        HasError = true;
                        Console.WriteLine("{0}{1}{2}", MessagesHelper.ErrorCompiler, GrammarHelper.NewLineSymbol, ex.CompilerMessage);
                    }
                }
            }
            catch (CompilerException ex)
            {
                Console.WriteLine("{0}{1}{2}", MessagesHelper.ErrorParser, GrammarHelper.NewLineSymbol, ex.CompilerMessage);
            }
        }
예제 #3
0
        public static Response Compile(CompileRequest request)
        {
            var logger = new CompilerLogger();

            logger.Verbosity = LoggerVerbosity.Detailed;

            var pc             = new ProjectCollection();
            var globalProperty = new Dictionary <string, string>();

            globalProperty.Add("Configuration", request.Configuration ?? "Release");
            //globalProperty.Add("Platform", "AnyCPU");
            globalProperty.Add("VisualStudioVersion", "14.0");
            if (!string.IsNullOrEmpty(request.OutputDirectory))
            {
                globalProperty.Add("OutputDirectory", request.OutputDirectory);
            }
            if (!string.IsNullOrEmpty(request.SigningKey))
            {
                globalProperty.Add("SignAssembly", "true");
                globalProperty.Add("AssemblyOriginatorKeyFile", request.SigningKey);
            }
            if (!request.SkipCodeAnalysis)
            {
                globalProperty.Add("RunCodeAnalysis", "true");
                globalProperty.Add("CodeAnalysisRuleSet", Path.Combine(BuilderAssemblyDirectory, "AllRules.ruleset"));
                globalProperty.Add("MBSBuilderPath", BuilderAssemblyDirectory);
                globalProperty.Add("CustomBeforeMicrosoftCSharpTargets", Path.Combine(BuilderAssemblyDirectory, "ImportStyleCop.targets"));
            }
            else
            {
                globalProperty.Add("RunCodeAnalysis", "false");
                globalProperty.Add("CodeAnalysisRuleSet", string.Empty);
            }

            var buildRequest = new BuildRequestData(request.SolutionPath, globalProperty, "14.0", new [] { request.Target }, null);

            var parameters = new BuildParameters(pc);

            parameters.Loggers         = new ILogger[] { logger };
            parameters.DetailedSummary = true;

            var buildResult = BuildManager.DefaultBuildManager.Build(parameters, buildRequest);

            if (buildResult.OverallResult == BuildResultCode.Failure)
            {
                logger.Messages.Add(Message.CreateError("BuildResult is false"));
            }

            return(new Response(logger.Messages));
        }
예제 #4
0
        public static Response Compile(CompileRequest request)
        {
            var logger = new CompilerLogger();
            logger.Verbosity = LoggerVerbosity.Detailed;

            var pc = new ProjectCollection();
            var globalProperty = new Dictionary<string, string>();
            globalProperty.Add("Configuration", request.Configuration ?? "Release");
            //globalProperty.Add("Platform", "AnyCPU");
            globalProperty.Add("VisualStudioVersion", "14.0");
            if (!string.IsNullOrEmpty(request.OutputDirectory))
            {
                globalProperty.Add("OutputDirectory", request.OutputDirectory);
            }
            if (!string.IsNullOrEmpty(request.SigningKey))
            {
                globalProperty.Add("SignAssembly", "true");
                globalProperty.Add("AssemblyOriginatorKeyFile", request.SigningKey);
            }
            if (!request.SkipCodeAnalysis)
            {
                globalProperty.Add("RunCodeAnalysis", "true");
                globalProperty.Add("CodeAnalysisRuleSet", Path.Combine(BuilderAssemblyDirectory, "AllRules.ruleset"));
                globalProperty.Add("MBSBuilderPath", BuilderAssemblyDirectory);
                globalProperty.Add("CustomBeforeMicrosoftCSharpTargets", Path.Combine(BuilderAssemblyDirectory, "ImportStyleCop.targets"));
            }
            else
            {
                globalProperty.Add("RunCodeAnalysis", "false");
                globalProperty.Add("CodeAnalysisRuleSet", string.Empty);
            }

            var buildRequest = new BuildRequestData(request.SolutionPath, globalProperty, "14.0", new [] { request.Target }, null);

            var parameters = new BuildParameters(pc);
            parameters.Loggers = new ILogger[] { logger };
            parameters.DetailedSummary = true;

            var buildResult = BuildManager.DefaultBuildManager.Build(parameters, buildRequest);
            if (buildResult.OverallResult == BuildResultCode.Failure)
            {
                logger.Messages.Add(Message.CreateError("BuildResult is false"));
            }

            return new Response(logger.Messages);
        }
예제 #5
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="volumeManager">Volume manager.</param>
 /// <param name="compilerOptions">Compiler ClI options.</param>
 /// <param name="deployOptions">Deployer ClI options.</param>
 /// <param name="logger">Compiler specific logger.</param>
 public KerboscriptLoader(VolumeManager volumeManager, CompilerLogger logger, CompileOptions compilerOptions)
 {
     _compilerOptions = compilerOptions;
     _volumeManager   = volumeManager;
     _logger          = logger;
 }