//============================================================ // <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)) { } } }
//============================================================ // <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); } }
//============================================================ // <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); } }
//============================================================ // <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); } } }