/// <summary> /// コンパイル実行。 /// </summary> public void Compile() { // ソースファイルが無い場合 if (SourceFiles.Count <= 0) { // エラー throw new Exception("ソースファイルが1つも無いです。"); } // ソースファイルの読み込み List <LayerStructureFile> lstrs = new List <LayerStructureFile>(); foreach (string fileName in SourceFiles) { if (Path.GetExtension(fileName) == ".lcpp") { // .lcppをコンパイル LayerStructureFile result = CompileLCppToObjectFile(fileName); lstrs.Add(result); } else { // レイヤ構造ファイルを読み込み LayerStructureFile result = LayerStructureFile.LoadFile(fileName); lstrs.Add(result); } } // レイヤ構造ファイルのマージ LayerStructureFile mergedLSFile = _RTCOPCompiler.MergeObjectFiles(lstrs); // 出力ファイルがC++のソースコードか、レイヤ構造ファイルかを確認 bool outputIsCpp = OutputFile.EndsWith("/") || OutputFile.EndsWith("\\"); if (!outputIsCpp && (Path.GetExtension(OutputFile) == "")) { // 拡張子無しの場合フォルダと判断 outputIsCpp = true; OutputFile += "/"; } // ソースコード出力 if (outputIsCpp) { GenerateCode(mergedLSFile); } // レイヤ構造出力 else { LayerStructureFile.SaveFile(OutputFile, mergedLSFile); } }
public static void Test() { string src = @" baselayer { // ベースクラス base class Sample { public: Sample(); virtual ~Sample(); }; } "; var text = RTCOPParser.BaseLayerDefinition.TokenWithSkipComment().Many().Parse(src); //var text = PreprocessParser.DirectiveOrLine.TokenWithSkipCommentForPreprocessParser().Many().Parse(src2); //var text = RTCOPParser.BaseLayerDefinition.TokenWithSkipComment().Many().Parse(src); //var text = TokenParser.Token.TokenWithSkipComment().Many().Parse(src); //var text = PreprocessParser.Directive.TokenWithSkipCommentForPreprocessParser().Many().Parse(src); //foreach (var t in text) Console.WriteLine(t); //Console.WriteLine(text); RTCOPSourceFile f = new RTCOPSourceFile("a.lcpp", src); RTCOPPreprocessor p = new RTCOPPreprocessor(new string[0], new List <string>(), Encoding.UTF8); var f2 = p.Run(f); Console.WriteLine(f2.Text); RTCOPCompiler c = new RTCOPCompiler(null); var of = c.Compile(f2); LayerStructureFile.SaveFile(@"C:\Users\Ikuta\Desktop\aaa.lobj", of); var of2 = LayerStructureFile.LoadFile(@"C:\Users\Ikuta\Desktop\aaa.lobj"); }