예제 #1
0
        //============================================================
        // <T>解析H文件中的模板类。</T>
        //============================================================
        public void ParserTemplate(string filePath)
        {
            FStrings strLines = FCppParser.GetLines(filePath);

            for (int n = 0; n < strLines.Count; n++)
            {
                if (FCppClass.IsTemplateClass(strLines, n))
                {
                }
            }
        }
예제 #2
0
 //============================================================
 // <T>生成MAP对象。</T>
 //
 // @param fileParserPath 需要解析的目录的路径
 //============================================================
 public void ProduceMapObject(string fileParserPath)
 {
     if (fileParserPath == "")
     {
         return;
     }
     FileInfo[] file = FCppParser.ParserDirH(fileParserPath);
     foreach (FileInfo fi in file)
     {
         ParserSingleFile(fi);
     }
 }
예제 #3
0
        //============================================================
        // <T>将被选择的文件解析为类对象数组,并解析出代码在编译器外的警告或者错误。</T>
        //
        // @param indextable 从.h文件中解析出来的类与头文件对应的MAP表
        // @param putPath XML文档的输出路径
        // @param swPrint StringWriter对象用来输出警告或者错误。
        // @param fileCpp 当前解析的文件
        // @param relativePath 被选择解析的文件夹路径
        //============================================================
        public void ParserFileCpp(FileInfo fileCpp, FCppClassesIndexTable indextable, string outPath, string relativePath, StreamWriter swPrint)
        {
            FStrings           strLines = FCppParser.GetLines(fileCpp.FullName);
            string             strClass = string.Empty;
            FArray <FCppClass> classArr = new FArray <FCppClass>();
            int start, end = CheckParaAnnotate(strLines, 0, out start);

            for (int n = 0; n < strLines.Count; n++)
            {
                if (IsInInterregional(n, start, end))
                {
                    continue;
                }
                if (FCppMethod.IsMethodInCpp(strLines, n))
                {
                    FCppMethod method   = new FCppMethod(strLines, n, GetPairNum(strLines, n));
                    string     classStr = GetClassInCpp(strLines, n);
                    strClass = classStr;
                    FFileNode node      = MakeNode(strLines, GetClassInCpp(strLines, n));
                    string    fileHpath = indextable.LookInMap(node);
                    if (fileHpath == "")
                    {
                        continue;
                    }
                    FCppClass cppClass = ParserFileH(fileHpath, classStr);
                    int       index    = ExistNo(classArr, cppClass);
                    if (index != -1)
                    {
                        classArr.Get(index).Method.Add(method);
                    }
                    else
                    {
                        cppClass.Method.Add(method);
                        classArr.Add(cppClass);
                    }
                }
            }
            ProduceXMLFile(classArr, outPath, swPrint, fileCpp, relativePath);
            if (strLines[strLines.Count - 1].Trim() != "")
            {
                string errID = "CPP07CL06E" + strLines.Count.ToString() + "L";
                string path  = fileCpp.FullName.Substring(relativePath.Length);
                string error = "[错误][" + errID.PadRight(16) + "][" + path + "(" + strLines.Count.ToString().PadRight(5) + ")]";
                swPrint.WriteLine(error);
            }
        }
예제 #4
0
        //============================================================
        // <T>解析单个文件</T>
        //
        // @param 需要解析的单个文件
        //============================================================
        public void ParserSingleFile(FileInfo file)
        {
            FStrings strLines = FCppParser.GetLines(file.FullName);
            int      start, end = CheckParaAnnotate(strLines, 0, out start);

            for (int n = 0; n < strLines.Count; n++)
            {
                if (IsInInterregional(n, start, end))
                {
                    continue;
                }
                if (FCppClass.IsClass(strLines, n))
                {
                    string   classStr = GetClassString(strLines[n]);
                    FMapNode node     = new FMapNode(classStr, file.Name);
                    AddNode(node, file.FullName);
                    n = GetPairNum(strLines, n);
                }
            }
        }