/* 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"]));
}