Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 2
0
        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");
        }