我有一個有趣的問題。我需要分析源代碼並在編譯之前確定變量的類型。所以,反射不能使用!正則表達式來分析源代碼
只有五種類型:
double x = 1.23;
long x = 3;
string s='Hello World!'
bool b=true
object[] A = [1, 1+2, 'Hello', s]
的五言代碼示例:
for (i=0; i < 5; i++)
{
a=2;
b=4;
c=6;
tesstClass.Str = 'sss';
}
我決定使用正則表達式來解決這個問題。
首先,我發現與所期望可變(與它的表達式)的代碼的所有件如下:
string pattern = variable + @"[\w.]*\s*[-*+/]?=\s*[\w\s+'*/-]*\s*;";
MatchCollection mc = Regex.Matches(code, pattern);
其次,我分析使用5個正則表達式(每個類型)各匹配度:
string stringPattern = @"'[^'\r\n]*'"; //String;
string doublePattern = @"\b[0-9]+\.[0-9]+\b"; //Double
string longPattern = @"[-+]?\b\d+\b"; // Integer with a sign
string boolPattern = @"\b(false|true)\b"; // Boolean
string arrayPattern = @"\[([\w']*\s*,?\s*)*\]"; // Array
我在正則表達式中很糟糕。所以我定義了一組非常簡單的r。表達式。你能幫我改進它們嗎?
你有沒有想過使用反射來獲取變量的類型? – 2010-01-05 11:45:42
是的,但我需要在競爭之前分析代碼。所以它只是一個簡單的文字。 – user101375 2010-01-05 11:48:12
我想說反射對於源代碼檢查沒有多大幫助。 – stakx 2010-01-05 11:49:35