我想創建一個自動化工具來在函數體上面插入註釋行。想法是,我會將.CPP文件作爲文本讀取並查找函數體。一旦在.CPP文件中找到函數體,那麼我會把函數頭放在函數體上面。程序中的函數體標識
讀取和寫入文件的工作方式與普通文本文件類似,但我想知道廣義的函數體定義。即我將如何以編程方式在.CPP文件中查找函數體。否則,有沒有其他的方法可以將函數頭放在函數體的上方。
謝謝。
我想創建一個自動化工具來在函數體上面插入註釋行。想法是,我會將.CPP文件作爲文本讀取並查找函數體。一旦在.CPP文件中找到函數體,那麼我會把函數頭放在函數體上面。程序中的函數體標識
讀取和寫入文件的工作方式與普通文本文件類似,但我想知道廣義的函數體定義。即我將如何以編程方式在.CPP文件中查找函數體。否則,有沒有其他的方法可以將函數頭放在函數體的上方。
謝謝。
這裏的想法:
找到第一個開放大括號{。 然後找到匹配的大括號。 重複它
public List<string> FindFunctions(string str)
{
var ret = new List<string>();
var position = 0;
var goout = false;
while (!goout)
{
position = str.IndexOf("{", position);
if (position == -1)
break;
var str1 = GetBracedString(str.Substring(position), '{', '}','"');
position += str1.Length;
ret.Add(str1);
}
return ret;
}
public String GetBracedString(string str, char openB, char closeB, char quoteChar)
{
int i = 0;
var goout = false;
int index = -1;
var isUnpairedQoute = new Func<string, char, bool>((s, q) => s.Count(x => x == q)%2 == 1);
var braceMatch = new Func<string, char, char, bool>((s,o,c) => s.Count(x => x == o) == s.Count(x => x == c));
while (!goout)
{
index = str.IndexOf(closeB, index + 1);
var testS = str.Substring(0, index + 1);
index = isUnpairedQoute(testS,quoteChar) ? str.IndexOf(quoteChar, index) : index;
testS = str.Substring(0, index + 1);
testS = Regex.Replace(testS, String.Format("{0}.*?[{1}{2}]+?.*?{0}", quoteChar, openB, closeB),match => new string('#', match.Value.Length));
goout = braceMatch(testS,openB,closeB);
}
return str.Substring(0, index + 1);
}
可能鉤在某些C++分析器(例如clang)? – Niall 2014-10-09 12:05:25
@Niall:感謝您的回覆,但您能否提供一些關於您所談論的解析器的想法。我在自動化領域是非常新的東西。:) – 2014-10-09 12:07:51
你可以確定'{'和'}'的位置,並且如果沒有使用它的其他東西,比如'if'或'for'或其他東西,那麼它是一個功能體? – Yann 2014-10-09 12:10:26