package xtc.translator.translation;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import xtc.parser.ParseException;
/**
* A translator from (a subset of) Java to (a subset of) C++.
*
* @author Robert Grimm
* @version $Revision$
*/
public class Translator {
File sourceFile;
public String ARG_ERROR = "Need Two Arguments ([Main Class] [Classpath])";
/** Create a new translator. */
public Translator() {
// Nothing to do.
}
public void run(String[] args) {
if (args.length == 2) {
// arg[0] is mainClassPath, arg[1] is classPath
String mainClassPath = args[0];
String classPath = args[1];
PackageResolver packageResolver = new PackageResolver(mainClassPath, classPath);
try {
// Collect files from packages
packageResolver.collect();
// Make protoClassManager with packageResolvers ProtoClasses
ProtoManager protoManager = new ProtoManager(packageResolver.getProtoClasses());
// Make new collector with classes from protoManager
Collector collector = new Collector(protoManager.processProtoClasses());
// Collect information and process classes to prepare for printing
collector.collect();
// Create new printHandler to handle printing
PrintHandler printHandler = new PrintHandler(collector.classes, classPath);
// Print c++ headers
printHandler.printAllHeaders();
// Print c++ .cc files
printHandler.printAllImplementations();
// Print main.cc file, using main class
printHandler.printMainFile(mainClassPath);
// Copy necessary dependencies to out file
for (File file : new File("dependencies").listFiles()) {
FileUtils.copyFileToDirectory(file, new File("out"));
}
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
} else {
System.out.println(ARG_ERROR);
}
}
/**
* Run the translator with the specified command line arguments and stuff.
*
* @param args
* The command line arguments.
*/
public static void main(String[] args) {
/*
* Run to create AST
*/
new Translator().run(args);
}
}