mirror of
https://github.com/twiglet/cs2j.git
synced 2025-01-18 13:15:17 +01:00
Add extra translation steps to the pipeline to (eventually) produce Java
This commit is contained in:
parent
e4bd86900b
commit
e914af9031
@ -5,6 +5,9 @@ set -e
|
||||
cd src/cs2j/CSharp
|
||||
java -Xmx512m -jar ../../../jar/antlr-3.3.jar -make cs.g
|
||||
java -Xmx512m -jar ../../../jar/antlr-3.3.jar -make TemplateExtracter.g
|
||||
java -Xmx512m -jar ../../../jar/antlr-3.3.jar -make JavaMaker.g
|
||||
java -Xmx512m -jar ../../../jar/antlr-3.3.jar -make NetMaker.g
|
||||
java -Xmx512m -jar ../../../jar/antlr-3.3.jar -make JavaPrettyPrint.g
|
||||
cd ../../../
|
||||
xbuild
|
||||
echo 'All Done'
|
||||
|
@ -18,8 +18,8 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
class CS2J
|
||||
{
|
||||
private const string VERSION = "2009.1.1.x";
|
||||
private static DirectoryHT<TypeRepTemplate> AppEnv { get; set; }
|
||||
private static CS2JSettings cfg = new CS2JSettings();
|
||||
private static DirectoryHT<TypeRepTemplate> AppEnv { get; set; }
|
||||
private static CS2JSettings cfg = new CS2JSettings();
|
||||
|
||||
public delegate void FileProcessor(string fName);
|
||||
|
||||
@ -49,18 +49,18 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
private static void addDirectories(IList<string> strs, string rawStr) {
|
||||
private static void addDirectories(IList<string> strs, string rawStr) {
|
||||
string[] argDirs = rawStr.Split(';');
|
||||
for (int i = 0; i < argDirs.Length; i++)
|
||||
strs.Add(Path.GetFullPath(argDirs[i]).ToLower());
|
||||
}
|
||||
}
|
||||
|
||||
public static void CS2JMain(string[] args)
|
||||
{
|
||||
long startTime = DateTime.Now.Ticks;
|
||||
IList<string> remArgs = new List<string>();
|
||||
XmlTextWriter enumXmlWriter = null;
|
||||
AppEnv = new DirectoryHT<TypeRepTemplate>(null);
|
||||
IList<string> remArgs = new List<string>();
|
||||
XmlTextWriter enumXmlWriter = null;
|
||||
AppEnv = new DirectoryHT<TypeRepTemplate>(null);
|
||||
|
||||
// Use a try/catch block for parser exceptions
|
||||
try
|
||||
@ -71,36 +71,36 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
|
||||
if (cfg.Verbosity >= 2) Console.Error.WriteLine("Parsing Command Line Arguments...");
|
||||
|
||||
OptionSet p = new OptionSet ()
|
||||
.Add ("v", v => cfg.Verbosity++)
|
||||
.Add ("debug=", v => cfg.DebugLevel = Int32.Parse(v))
|
||||
.Add ("warnings", v => cfg.Warnings = true)
|
||||
.Add ("version", v => showVersion())
|
||||
.Add ("help|h|?", v => showUsage())
|
||||
.Add ("dumpcsharp", v => cfg.DumpCSharp = true)
|
||||
.Add ("dumpjava", v => cfg.DumpJava = true)
|
||||
.Add ("dumpjavasyntax", v => cfg.DumpJavaSyntax = true)
|
||||
.Add ("dumptokens", v => cfg.DisplayTokens = true)
|
||||
.Add ("D=", def => cfg.MacroDefines.Add(def))
|
||||
.Add ("dumpenums", v => cfg.DumpEnums = true)
|
||||
.Add ("enumdir=", dir => cfg.EnumDir = Path.Combine(Directory.GetCurrentDirectory(), dir))
|
||||
.Add ("dumpxmls", v => cfg.DumpXmls = true)
|
||||
.Add ("xmldir=", dir => cfg.XmlDir = Path.Combine(Directory.GetCurrentDirectory(), dir))
|
||||
.Add ("odir=", dir => cfg.OutDir = dir)
|
||||
.Add ("cheatdir=", dir => cfg.CheatDir = dir)
|
||||
.Add ("netdir=", dirs => addDirectories(cfg.NetRoot, dirs))
|
||||
.Add ("exnetdir=", dirs => addDirectories(cfg.ExNetRoot, dirs))
|
||||
.Add ("appdir=", dirs => addDirectories(cfg.AppRoot, dirs))
|
||||
.Add ("exappdir=", dirs => addDirectories(cfg.ExAppRoot, dirs))
|
||||
.Add ("exclude=", dirs => addDirectories(cfg.Exclude, dirs))
|
||||
;
|
||||
OptionSet p = new OptionSet ()
|
||||
.Add ("v", v => cfg.Verbosity++)
|
||||
.Add ("debug=", v => cfg.DebugLevel = Int32.Parse(v))
|
||||
.Add ("warnings", v => cfg.Warnings = true)
|
||||
.Add ("version", v => showVersion())
|
||||
.Add ("help|h|?", v => showUsage())
|
||||
.Add ("dumpcsharp", v => cfg.DumpCSharp = true)
|
||||
.Add ("dumpjava", v => cfg.DumpJava = true)
|
||||
.Add ("dumpjavasyntax", v => cfg.DumpJavaSyntax = true)
|
||||
.Add ("dumptokens", v => cfg.DisplayTokens = true)
|
||||
.Add ("D=", def => cfg.MacroDefines.Add(def))
|
||||
.Add ("dumpenums", v => cfg.DumpEnums = true)
|
||||
.Add ("enumdir=", dir => cfg.EnumDir = Path.Combine(Directory.GetCurrentDirectory(), dir))
|
||||
.Add ("dumpxmls", v => cfg.DumpXmls = true)
|
||||
.Add ("xmldir=", dir => cfg.XmlDir = Path.Combine(Directory.GetCurrentDirectory(), dir))
|
||||
.Add ("odir=", dir => cfg.OutDir = dir)
|
||||
.Add ("cheatdir=", dir => cfg.CheatDir = dir)
|
||||
.Add ("netdir=", dirs => addDirectories(cfg.NetRoot, dirs))
|
||||
.Add ("exnetdir=", dirs => addDirectories(cfg.ExNetRoot, dirs))
|
||||
.Add ("appdir=", dirs => addDirectories(cfg.AppRoot, dirs))
|
||||
.Add ("exappdir=", dirs => addDirectories(cfg.ExAppRoot, dirs))
|
||||
.Add ("exclude=", dirs => addDirectories(cfg.Exclude, dirs))
|
||||
;
|
||||
|
||||
//TODO: fix enum dump
|
||||
// Final argument is translation target
|
||||
remArgs = p.Parse (args);
|
||||
//TODO: fix enum dump
|
||||
// Final argument is translation target
|
||||
remArgs = p.Parse (args);
|
||||
|
||||
|
||||
// Load .Net templates
|
||||
// Load .Net templates
|
||||
foreach (string r in cfg.NetRoot)
|
||||
doFile(r, ".xml", addNetTranslation, cfg.ExNetRoot);
|
||||
|
||||
@ -110,16 +110,16 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
cfg.AppRoot.Add(remArgs[0]);
|
||||
foreach (string r in cfg.AppRoot)
|
||||
doFile(r, ".cs", addAppSigTranslation, cfg.ExAppRoot); // parse it
|
||||
if (cfg.DumpEnums) {
|
||||
enumXmlWriter = new XmlTextWriter(cfg.EnumDir, System.Text.Encoding.UTF8);
|
||||
}
|
||||
if (cfg.DumpEnums) {
|
||||
enumXmlWriter = new XmlTextWriter(cfg.EnumDir, System.Text.Encoding.UTF8);
|
||||
}
|
||||
if (cfg.DumpXmls)
|
||||
{
|
||||
// Get package name and convert to directory name
|
||||
foreach (KeyValuePair<string,TypeRepTemplate> de in AppEnv)
|
||||
{
|
||||
String xmlFName = Path.Combine(cfg.XmlDir,
|
||||
((string)de.Key).Replace('.', Path.DirectorySeparatorChar) + ".xml");
|
||||
((string)de.Key).Replace('.', Path.DirectorySeparatorChar) + ".xml");
|
||||
String xmlFDir = Path.GetDirectoryName(xmlFName);
|
||||
if (!Directory.Exists(xmlFDir))
|
||||
{
|
||||
@ -135,8 +135,8 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
if (cfg.DumpEnums)
|
||||
{
|
||||
enumXmlWriter.WriteEndElement();
|
||||
enumXmlWriter.Close();
|
||||
}
|
||||
enumXmlWriter.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -161,7 +161,7 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
// Call processFile on all files below f that have the given extension
|
||||
public static void doFile(string root, string ext, FileProcessor processFile, IList<string> excludes)
|
||||
{
|
||||
string canonicalPath = Path.GetFullPath(root);
|
||||
string canonicalPath = Path.GetFullPath(root);
|
||||
// If this is a directory, walk each file/dir in that directory
|
||||
if (!excludes.Contains(canonicalPath.ToLower()))
|
||||
{
|
||||
@ -193,16 +193,16 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
|
||||
if (cfg.Verbosity > 2) Console.WriteLine("Parsing " + Path.GetFileName(fullName));
|
||||
|
||||
ICharStream input = new ANTLRFileStream(fullName);
|
||||
ICharStream input = new ANTLRFileStream(fullName);
|
||||
|
||||
PreProcessor lex = new PreProcessor();
|
||||
lex.AddDefine(cfg.MacroDefines);
|
||||
PreProcessor lex = new PreProcessor();
|
||||
lex.AddDefine(cfg.MacroDefines);
|
||||
lex.CharStream = input;
|
||||
lex.TraceDestination = Console.Error;
|
||||
lex.TraceDestination = Console.Error;
|
||||
|
||||
CommonTokenStream tokens = new CommonTokenStream(lex);
|
||||
csParser p = new csParser(tokens);
|
||||
p.TraceDestination = Console.Error;
|
||||
p.TraceDestination = Console.Error;
|
||||
|
||||
csParser.compilation_unit_return parser_rt = p.compilation_unit();
|
||||
|
||||
@ -220,146 +220,178 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
}
|
||||
|
||||
CommonTreeNodeStream nodes = new CommonTreeNodeStream(parser_rt.Tree);
|
||||
nodes.TokenStream = tokens;
|
||||
nodes.TokenStream = tokens;
|
||||
|
||||
return nodes;
|
||||
return nodes;
|
||||
|
||||
}
|
||||
// Here's where we do the real work...
|
||||
// Here's where we do the real work...
|
||||
public static void addNetTranslation(string fullName)
|
||||
{
|
||||
Stream s = new FileStream(fullName, FileMode.Open, FileAccess.Read);
|
||||
TypeRepTemplate t = TypeRepTemplate.newInstance(s);
|
||||
TypeRepTemplate t = TypeRepTemplate.newInstance(s);
|
||||
AppEnv[t.TypeName] = t;
|
||||
}
|
||||
|
||||
// Here's where we do the real work...
|
||||
public static void addAppSigTranslation(string fullName)
|
||||
{
|
||||
if (cfg.DebugLevel > 3) Console.Out.WriteLine("Extracting type info from file {0}", fullName);
|
||||
|
||||
if (cfg.DebugLevel > 3) Console.Out.WriteLine("Extracting type info from file {0}", fullName);
|
||||
ITreeNodeStream csTree = parseFile(fullName);
|
||||
if (csTree != null)
|
||||
{
|
||||
|
||||
TemplateExtracter templateWalker = new TemplateExtracter(csTree);
|
||||
templateWalker.Filename = fullName;
|
||||
templateWalker.TraceDestination = Console.Error;
|
||||
|
||||
templateWalker.compilation_unit(cfg, AppEnv);
|
||||
TemplateExtracter templateWalker = new TemplateExtracter(csTree);
|
||||
templateWalker.Filename = fullName;
|
||||
templateWalker.TraceDestination = Console.Error;
|
||||
|
||||
templateWalker.compilation_unit(cfg, AppEnv);
|
||||
}
|
||||
}
|
||||
|
||||
// Here's where we do the real work...
|
||||
public static void translateFile(string fullName)
|
||||
{
|
||||
if (cfg.DebugLevel > 3) Console.Out.WriteLine("Translating file {0}", fullName);
|
||||
CommonTreeNodeStream csTree = parseFile(fullName);
|
||||
if (cfg.DumpCSharp && csTree != null) AntlrUtils.AntlrUtils.DumpNodes(csTree);
|
||||
long startTime = DateTime.Now.Ticks;
|
||||
if (cfg.DebugLevel > 3) Console.Out.WriteLine("Translating file {0}", fullName);
|
||||
ITreeNodeStream csTree = parseFile(fullName);
|
||||
if (cfg.DumpCSharp && csTree != null) AntlrUtils.AntlrUtils.DumpNodes((CommonTreeNodeStream)csTree);
|
||||
|
||||
if (csTree != null)
|
||||
{
|
||||
Dictionary<string, CommonTree> cus = new Dictionary<string, CommonTree>();
|
||||
JavaMaker javaMaker = new JavaMaker(csTree);
|
||||
javaMaker.Filename = fullName;
|
||||
javaMaker.TraceDestination = Console.Error;
|
||||
|
||||
JavaMaker.compilation_unit_return java = javaMaker.compilation_unit(cfg, cus);
|
||||
foreach (KeyValuePair<string, CommonTree> package in cus) {
|
||||
|
||||
CommonTreeNodeStream javaSyntaxNodes = new CommonTreeNodeStream(package.Value);
|
||||
javaSyntaxNodes.TokenStream = csTree.TokenStream;
|
||||
|
||||
NetMaker netMaker = new NetMaker(javaSyntaxNodes);
|
||||
netMaker.Filename = fullName;
|
||||
netMaker.TraceDestination = Console.Error;
|
||||
|
||||
NetMaker.type_declaration_return javaCompilationUnit = netMaker.type_declaration();
|
||||
|
||||
CommonTreeNodeStream javaCompilationUnitNodes = new CommonTreeNodeStream(javaCompilationUnit.Tree);
|
||||
javaCompilationUnitNodes.TokenStream = csTree.TokenStream;
|
||||
|
||||
JavaPrettyPrint outputMaker = new JavaPrettyPrint(javaCompilationUnitNodes);
|
||||
outputMaker.Filename = fullName;
|
||||
outputMaker.TraceDestination = Console.Error;
|
||||
|
||||
outputMaker.type_declaration();
|
||||
}
|
||||
// ITreeNodeStream javaTree = java.Tree;
|
||||
}
|
||||
|
||||
// ASTNode t = parseFile(f, s);
|
||||
// if (t != null)
|
||||
// {
|
||||
// if (showTree)
|
||||
// {
|
||||
// ASTNode r = (ASTNode)new ASTNodeFactory().create(0, "AST ROOT");
|
||||
// r.setFirstChild(t);
|
||||
// ASTFrame frame = new ASTFrame("C# AST for file [" + f + "]", r);
|
||||
// frame.ShowDialog();
|
||||
// //frame.Visible = true;
|
||||
// // System.out.println(t.toStringList());
|
||||
// }
|
||||
// ASTNode r1 = (ASTNode)new ASTNodeFactory().create(0, "AST ROOT");
|
||||
// r1.setFirstChild(t);
|
||||
// ASTFrame frame1 = new ASTFrame("C# AST for file [" + f + "]", r1);
|
||||
// if (showCSharp)
|
||||
// frame1.ShowDialog();
|
||||
// ASTNode t = parseFile(f, s);
|
||||
// if (t != null)
|
||||
// {
|
||||
// if (showTree)
|
||||
// {
|
||||
// ASTNode r = (ASTNode)new ASTNodeFactory().create(0, "AST ROOT");
|
||||
// r.setFirstChild(t);
|
||||
// ASTFrame frame = new ASTFrame("C# AST for file [" + f + "]", r);
|
||||
// frame.ShowDialog();
|
||||
// //frame.Visible = true;
|
||||
// // System.out.println(t.toStringList());
|
||||
// }
|
||||
// ASTNode r1 = (ASTNode)new ASTNodeFactory().create(0, "AST ROOT");
|
||||
// r1.setFirstChild(t);
|
||||
// ASTFrame frame1 = new ASTFrame("C# AST for file [" + f + "]", r1);
|
||||
// if (showCSharp)
|
||||
// frame1.ShowDialog();
|
||||
|
||||
// CSharpTranslator transformer = new CSharpTranslator();
|
||||
// transformer.setASTNodeClass(typeof(ASTNode).FullName);
|
||||
// transformer.setASTFactory(new ASTNodeFactory());
|
||||
// CSharpTranslator.initializeASTFactory(transformer.getASTFactory());
|
||||
// CSharpTranslator transformer = new CSharpTranslator();
|
||||
// transformer.setASTNodeClass(typeof(ASTNode).FullName);
|
||||
// transformer.setASTFactory(new ASTNodeFactory());
|
||||
// CSharpTranslator.initializeASTFactory(transformer.getASTFactory());
|
||||
|
||||
// long startTime = DateTime.Now.Ticks;
|
||||
// transformer.compilationUnit(t, null);
|
||||
// long startTime = DateTime.Now.Ticks;
|
||||
// transformer.compilationUnit(t, null);
|
||||
|
||||
// //BaseAST.setVerboseStringConversion(true, tokenNames);
|
||||
// ASTNode r2 = (ASTNode)new ASTNodeFactory().create(0, "AST ROOT");
|
||||
// r2.setFirstChild(transformer.getAST());
|
||||
// ASTFrame frame2 = new ASTFrame("Java syntax AST for file [" + f + "]", r2);
|
||||
// if (showJavaSyntax)
|
||||
// frame2.ShowDialog();
|
||||
// //BaseAST.setVerboseStringConversion(true, tokenNames);
|
||||
// ASTNode r2 = (ASTNode)new ASTNodeFactory().create(0, "AST ROOT");
|
||||
// r2.setFirstChild(transformer.getAST());
|
||||
// ASTFrame frame2 = new ASTFrame("Java syntax AST for file [" + f + "]", r2);
|
||||
// if (showJavaSyntax)
|
||||
// frame2.ShowDialog();
|
||||
|
||||
// // Take each java compilation unit (each class defn) and write it to the appropriate file
|
||||
// IEnumerator enumCU = transformer.getAST().findAllPartial((ASTNode)transformer.getASTFactory().create(CSharpParser.COMPILATION_UNIT));
|
||||
// while (enumCU.MoveNext())
|
||||
// {
|
||||
// ASTNode javaCU = (ASTNode)enumCU.Current;
|
||||
// // Take each java compilation unit (each class defn) and write it to the appropriate file
|
||||
// IEnumerator enumCU = transformer.getAST().findAllPartial((ASTNode)transformer.getASTFactory().create(CSharpParser.COMPILATION_UNIT));
|
||||
// while (enumCU.MoveNext())
|
||||
// {
|
||||
// ASTNode javaCU = (ASTNode)enumCU.Current;
|
||||
|
||||
// // Extract class/interface name
|
||||
// String claName = JavaTreeParser.getClassName(javaCU);
|
||||
// // Extract class/interface name
|
||||
// String claName = JavaTreeParser.getClassName(javaCU);
|
||||
|
||||
// // Get package name and convert to directory name
|
||||
// String nsDir = "";
|
||||
// foreach (String nsc in JavaTreeParser.getPackageName(javaCU))
|
||||
// {
|
||||
// nsDir = Path.Combine(nsDir, nsc);
|
||||
// }
|
||||
// // Get package name and convert to directory name
|
||||
// String nsDir = "";
|
||||
// foreach (String nsc in JavaTreeParser.getPackageName(javaCU))
|
||||
// {
|
||||
// nsDir = Path.Combine(nsDir, nsc);
|
||||
// }
|
||||
|
||||
// // Build destination filename for this class
|
||||
// String fName = Path.Combine(Path.Combine(outDir, nsDir), claName + ".java");
|
||||
// // Build destination filename for this class
|
||||
// String fName = Path.Combine(Path.Combine(outDir, nsDir), claName + ".java");
|
||||
|
||||
// if (cheatDir != "")
|
||||
// {
|
||||
// String cheatFile = Path.Combine(cheatDir, Path.Combine(nsDir, claName + ".java"));
|
||||
// if (File.Exists(cheatFile))
|
||||
// {
|
||||
// // the old switcheroo
|
||||
// File.Copy(cheatFile, fName, true);
|
||||
// continue;
|
||||
// }
|
||||
// if (cheatDir != "")
|
||||
// {
|
||||
// String cheatFile = Path.Combine(cheatDir, Path.Combine(nsDir, claName + ".java"));
|
||||
// if (File.Exists(cheatFile))
|
||||
// {
|
||||
// // the old switcheroo
|
||||
// File.Copy(cheatFile, fName, true);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// String ignoreMarker = Path.Combine(cheatDir, Path.Combine(nsDir, claName + ".none"));
|
||||
// if (File.Exists(ignoreMarker))
|
||||
// {
|
||||
// // Don't generate this class
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
// String ignoreMarker = Path.Combine(cheatDir, Path.Combine(nsDir, claName + ".none"));
|
||||
// if (File.Exists(ignoreMarker))
|
||||
// {
|
||||
// // Don't generate this class
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
|
||||
// NetTranslator netTx = new NetTranslator();
|
||||
// netTx.setASTNodeClass(typeof(ASTNode).FullName);
|
||||
// netTx.setASTFactory(new ASTNodeFactory());
|
||||
// NetTranslator.initializeASTFactory(netTx.getASTFactory());
|
||||
// netTx.compilationUnit(javaCU, null, appEnv);
|
||||
// NetTranslator netTx = new NetTranslator();
|
||||
// netTx.setASTNodeClass(typeof(ASTNode).FullName);
|
||||
// netTx.setASTFactory(new ASTNodeFactory());
|
||||
// NetTranslator.initializeASTFactory(netTx.getASTFactory());
|
||||
// netTx.compilationUnit(javaCU, null, appEnv);
|
||||
|
||||
// //BaseAST.setVerboseStringConversion(true, tokenNames);
|
||||
// ASTNode r3 = (ASTNode)new ASTNodeFactory().create(0, "AST ROOT");
|
||||
// r3.setFirstChild(netTx.getAST());
|
||||
// ASTFrame frame3 = new ASTFrame("Java AST for file [" + f + "]", r3);
|
||||
// if (showJava)
|
||||
// frame3.ShowDialog();
|
||||
// //BaseAST.setVerboseStringConversion(true, tokenNames);
|
||||
// ASTNode r3 = (ASTNode)new ASTNodeFactory().create(0, "AST ROOT");
|
||||
// r3.setFirstChild(netTx.getAST());
|
||||
// ASTFrame frame3 = new ASTFrame("Java AST for file [" + f + "]", r3);
|
||||
// if (showJava)
|
||||
// frame3.ShowDialog();
|
||||
|
||||
// Console.WriteLine(fName);
|
||||
// Console.WriteLine(fName);
|
||||
|
||||
// String fDir = Path.GetDirectoryName(fName);
|
||||
// if (!Directory.Exists(fDir))
|
||||
// {
|
||||
// Directory.CreateDirectory(fDir);
|
||||
// }
|
||||
// FileInfo outF = new FileInfo(fName);
|
||||
// StreamWriter w = new StreamWriter(outF.Create());
|
||||
// JavaPrettyPrinter writer = new JavaPrettyPrinter();
|
||||
// writer.compilationUnit(netTx.getAST(), w, enumXmlWriter, filter);
|
||||
// w.Close();
|
||||
// String fDir = Path.GetDirectoryName(fName);
|
||||
// if (!Directory.Exists(fDir))
|
||||
// {
|
||||
// Directory.CreateDirectory(fDir);
|
||||
// }
|
||||
// FileInfo outF = new FileInfo(fName);
|
||||
// StreamWriter w = new StreamWriter(outF.Create());
|
||||
// JavaPrettyPrinter writer = new JavaPrettyPrinter();
|
||||
// writer.compilationUnit(netTx.getAST(), w, enumXmlWriter, filter);
|
||||
// w.Close();
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
// double elapsedTime = ((DateTime.Now.Ticks - startTime) / TimeSpan.TicksPerMillisecond) / 1000.0;
|
||||
// //System.Console.Out.WriteLine(writer.ToString());
|
||||
// System.Console.Out.WriteLine("");
|
||||
// System.Console.Out.WriteLine("");
|
||||
// System.Console.Out.WriteLine("Pretty-printed {0} in: {1} seconds.", f, elapsedTime);
|
||||
// }
|
||||
double elapsedTime = ((DateTime.Now.Ticks - startTime) / TimeSpan.TicksPerMillisecond) / 1000.0;
|
||||
//System.Console.Out.WriteLine(writer.ToString());
|
||||
System.Console.Out.WriteLine("");
|
||||
System.Console.Out.WriteLine("");
|
||||
System.Console.Out.WriteLine("Pretty-printed {0} in: {1} seconds.", fullName, elapsedTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,3 +3,9 @@ csLexer.cs
|
||||
csParser.cs
|
||||
TemplateExtracter.cs
|
||||
TemplateExtracter.tokens
|
||||
NetMaker.cs
|
||||
NetMaker.tokens
|
||||
JavaMaker.cs
|
||||
JavaMaker.tokens
|
||||
JavaPrettyPrint.cs
|
||||
JavaPrettyPrint.tokens
|
||||
|
@ -45,5 +45,25 @@ namespace RusticiSoftware.Translator.CSharp
|
||||
Console.Out.WriteLine(s);
|
||||
}
|
||||
}
|
||||
|
||||
// distinguish classes with same name, but differing numbers of type arguments
|
||||
protected string mkTypeName (string name, List<String> tyargs) {
|
||||
return name + (tyargs.Count > 0 ? "'" + tyargs.Count.ToString() : "");
|
||||
}
|
||||
|
||||
protected string formatTyargs(List<string> tyargs) {
|
||||
|
||||
if (tyargs.Count == 0) {
|
||||
return "";
|
||||
}
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.Append("<");
|
||||
foreach (string t in tyargs) {
|
||||
buf.Append(t + ",");
|
||||
}
|
||||
buf.Remove(buf.Length-1,1);
|
||||
buf.Append(">");
|
||||
return buf.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1093
CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g
Normal file
1093
CSharpTranslator/antlr3/src/cs2j/CSharp/JavaMaker.g
Normal file
File diff suppressed because it is too large
Load Diff
1046
CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g
Normal file
1046
CSharpTranslator/antlr3/src/cs2j/CSharp/JavaPrettyPrint.g
Normal file
File diff suppressed because it is too large
Load Diff
1041
CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g
Normal file
1041
CSharpTranslator/antlr3/src/cs2j/CSharp/NetMaker.g
Normal file
File diff suppressed because it is too large
Load Diff
@ -69,20 +69,6 @@ scope NSContext {
|
||||
}
|
||||
}
|
||||
|
||||
protected string formatTyargs(List<string> tyargs) {
|
||||
|
||||
if (tyargs.Count == 0) {
|
||||
return "";
|
||||
}
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.Append("<");
|
||||
foreach (string t in tyargs) {
|
||||
buf.Append(t + ",");
|
||||
}
|
||||
buf.Remove(buf.Length-1,1);
|
||||
buf.Append(">");
|
||||
return buf.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
/********************************************************************************************
|
||||
@ -672,10 +658,8 @@ scope NSContext;
|
||||
{
|
||||
Debug("Processing class: " + $type_or_generic.type);
|
||||
klass.Uses = this.NameSpaceContext;
|
||||
klass.TypeName = this.ParentNameSpace + "." + $type_or_generic.type;
|
||||
klass.TypeName = this.ParentNameSpace + "." + mkTypeName($type_or_generic.type, $type_or_generic.generic_arguments);
|
||||
if ($type_or_generic.generic_arguments.Count > 0) {
|
||||
// distinguish classes with same name, but differing numbers of type arguments
|
||||
klass.TypeName+= "'" + $type_or_generic.generic_arguments.Count.ToString();
|
||||
klass.TypeParams = $type_or_generic.generic_arguments.ToArray();
|
||||
}
|
||||
// Nested types can see things in this space
|
||||
@ -848,10 +832,8 @@ scope NSContext;
|
||||
{
|
||||
Debug("Processing delegate: " + $identifier.text);
|
||||
dlegate.Uses = this.NameSpaceContext;
|
||||
dlegate.TypeName = this.ParentNameSpace + "." + $identifier.text;
|
||||
dlegate.TypeName = this.ParentNameSpace + "." + mkTypeName($identifier.text, $variant_generic_parameter_list.tyargs);
|
||||
if ($variant_generic_parameter_list.tyargs != null && $variant_generic_parameter_list.tyargs.Count > 0) {
|
||||
// distinguish classes with same name, but differing numbers of type arguments
|
||||
dlegate.TypeName+= "'" + $variant_generic_parameter_list.tyargs.Count.ToString();
|
||||
dlegate.TypeParams = $variant_generic_parameter_list.tyargs.ToArray();
|
||||
}
|
||||
dlegate.Return=$return_type.thetext;
|
||||
@ -938,10 +920,8 @@ scope NSContext;
|
||||
{
|
||||
Debug("Processing interface: " + $identifier.text);
|
||||
iface.Uses = this.NameSpaceContext;
|
||||
iface.TypeName = this.ParentNameSpace + "." + $identifier.text;
|
||||
iface.TypeName = this.ParentNameSpace + "." + mkTypeName($identifier.text, $variant_generic_parameter_list.tyargs);
|
||||
if ($variant_generic_parameter_list.tyargs != null && $variant_generic_parameter_list.tyargs.Count > 0) {
|
||||
// distinguish classes with same name, but differing numbers of type arguments
|
||||
iface.TypeName+= "'" + $variant_generic_parameter_list.tyargs.Count.ToString();
|
||||
iface.TypeParams = $variant_generic_parameter_list.tyargs.ToArray();
|
||||
}
|
||||
// Nested types can see things in this space
|
||||
@ -1024,10 +1004,8 @@ scope NSContext;
|
||||
{
|
||||
Debug("Processing struct: " + $type_or_generic.type);
|
||||
strukt.Uses = this.NameSpaceContext;
|
||||
strukt.TypeName = this.ParentNameSpace + "." + $type_or_generic.type;
|
||||
strukt.TypeName = this.ParentNameSpace + "." + mkTypeName($type_or_generic.type, $type_or_generic.generic_arguments);
|
||||
if ($type_or_generic.generic_arguments.Count > 0) {
|
||||
// distinguish structs with same name, but differing numbers of type arguments
|
||||
strukt.TypeName+= "'" + $type_or_generic.generic_arguments.Count.ToString();
|
||||
strukt.TypeParams = $type_or_generic.generic_arguments.ToArray();
|
||||
}
|
||||
// Nested types can see things in this space
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@ -66,11 +66,17 @@
|
||||
<Compile Include="Utils\TypeHelper.cs" />
|
||||
<Compile Include="CSharp\TemplateExtracter.cs" />
|
||||
<Compile Include="CLR\CS2JSettings.cs" />
|
||||
<Compile Include="CSharp\JavaMaker.cs" />
|
||||
<Compile Include="CSharp\JavaPrettyPrint.cs" />
|
||||
<Compile Include="CSharp\NetMaker.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="CSharp\csCrawl.g" />
|
||||
<None Include="CSharp\cs.g" />
|
||||
<None Include="CSharp\TemplateExtracter.g" />
|
||||
<None Include="CSharp\JavaMaker.g" />
|
||||
<None Include="CSharp\JavaPrettyPrint.g" />
|
||||
<None Include="CSharp\NetMaker.g" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="README.txt" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user