Пример #1
0
        /* Run the Compiler Tool application */
        public void Run()
        {
            if (cmdOptions.NoArgs())
            {
                PrintLogo();
                this.compiler = new InteractiveCompiler();
                return;
            }
            if (cmdOptions.NoOptions())
            {
                PrintLogo();
                this.compiler = new InteractiveCompiler(cmdOptions["source"]);
                return;
            }
            this.compiler = new CLICompiler();
            /* Check command line options */
            if (cmdOptions["help"] != null)
            {
                Help();
                return;
            }
            if (cmdOptions["version"] != null)
            {
                PrintLogo();
                return;
            }
            if (cmdOptions["source"] == null)
            {
                Error("CT1008", null);
            }

            if (cmdOptions["static"] != null)
            {
                staticAssembly = true;
            }

            if (cmdOptions["listing"] != null)
            {
                /* set the listing generator */
                string outputFile = cmdOptions["source"] + ".txt";
                if (cmdOptions["output"] != null)
                {
                    outputFile = cmdOptions["output"];
                }
                //compiler.SetGenerator(new ListingGenerator(outputFile));
            }
            if (cmdOptions["target"] != null)
            {
                switch (cmdOptions["target"])
                {
                case "exe":

                    string outputFile = cmdOptions["source"];
                    if (cmdOptions["output"] != null)
                    {
                        outputFile = cmdOptions["output"];
                    }
                    PrologCodeProvider provider = new PrologCodeProvider();
                    IPrologCompiler    compiler = provider.CreateCompiler();
                    PrintLogo();
                    PrologCompilerParameters parameters = new PrologCompilerParameters();
                    parameters.GenerateExecutable = true;
                    parameters.OutputAssembly     = outputFile.Replace(".pro", ".exe");
                    PrologCompilerResults cr = compiler.CompileAssemblyFromFile(parameters, outputFile);

                    if (cr.Errors.Count > 0)
                    {
                        foreach (PrologCompilerError e in cr.Errors)
                        {
                            Console.WriteLine(e);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Successfully compiled " + outputFile);
                    }
                    // check if you need to compile into static EXE
                    if (staticAssembly)
                    {
                        ArrayList inputAssemblies = new ArrayList();
                        // Add Axiom.Runtime.dll
                        inputAssemblies.Add("Axiom.Runtime.dll");


                        // Add remaining library assemblies
                        foreach (string file in Directory.GetFiles("..\\library"))
                        {
                            inputAssemblies.Add(file);
                        }

                        StaticAssemblyCompiler assc = new StaticAssemblyCompiler(parameters.OutputAssembly, parameters.OutputAssembly, inputAssemblies);
                        assc.LinkExecutable();
                    }
                    return;

                case "dll":
                    string output = cmdOptions["source"];
                    if (cmdOptions["output"] != null)
                    {
                        output = cmdOptions["output"];
                    }
                    //PrologAssemblyCompiler asmc = new PrologAssemblyCompiler();
                    PrologCodeProvider prov = new PrologCodeProvider();
                    IPrologCompiler    comp = prov.CreateCompiler();
                    PrintLogo();
                    PrologCompilerParameters par = new PrologCompilerParameters();
                    par.GenerateExecutable = false;
                    par.OutputAssembly     = output.Replace(".pro", ".dll");
                    PrologCompilerResults r = comp.CompileAssemblyFromFile(par, output);
                    if (r.Errors.Count > 0)
                    {
                        foreach (PrologCompilerError e in r.Errors)
                        {
                            Console.WriteLine(e);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Successfully compiled " + output);
                    }
                    // check if you need to compile into static DLL
                    if (staticAssembly)
                    {
                        ArrayList inputAssemblies = new ArrayList();

                        // Add Axiom.Runtime.dll
                        inputAssemblies.Add("Axiom.Runtime.dll");


                        // Add remaining library assemblies
                        foreach (string file in Directory.GetFiles("..\\library"))
                        {
                            inputAssemblies.Add(file);
                        }

                        StaticAssemblyCompiler assc = new StaticAssemblyCompiler(par.OutputAssembly, par.OutputAssembly, inputAssemblies);
                        assc.LinkLibrary();
                    }
                    return;

                case "xml":
                    string outputXml = cmdOptions["source"];
                    if (cmdOptions["output"] != null)
                    {
                        outputXml = cmdOptions["output"];
                    }
                    PrologCodeProvider       providerXml   = new PrologCodeProvider();
                    IPrologCompiler          compilerXml   = providerXml.CreateCompiler();
                    PrologCompilerParameters parametersXml = new PrologCompilerParameters();
                    PrologCompilerResults    results       = compilerXml.CompileAbstractCodeFromFile(parametersXml, outputXml);
                    if (results.Errors.Count > 0)
                    {
                        foreach (PrologCompilerError err in results.Errors)
                        {
                            Console.WriteLine(err);
                        }
                        return;
                    }

                    string plFilename  = outputXml;
                    string xmlFilename = plFilename.Replace(".pro", ".xml");

                    GenerateXmlFile(xmlFilename, results.AssemblyFiles, results.AbstractInstructions);
                    return;

                default:
                    Error("CT1011", null);
                    break;
                }
            }
            /* debug information */
            // deferred to a future release.

            /* treat warnings as errors */
            // deferred to a future release.

            /* silent compilation */
            // deferred to a future release.


            if (cmdOptions["nologo"] == null)
            {
                PrintLogo();
            }

            if (cliErrors.Count != 0)
            {
                Errors();
                return;
            }

            /* Compile */
            //this.compiler.Compile(File.OpenText(cmdOptions["source"]));
        }