我試圖創建一個方法,它根據正則表達式檢查一個字符串並返回一個寄存器類型(mips)。問題是,我似乎無法創建正確的正則表達式。 請看看並提出建議。由於正則表達式解析器的問題
public static RegisterType CheckRegex(this string source)
{
var tempMatch = new Regex("$t0|$t1|$t2|$t3|$t4|$t5|$t6|$t7|$t8|$t9|").Match(source); //$t0 - $t9
if(tempMatch.Length == source.Length)
return RegisterType.Temporary;
var storeMatch = new Regex(@"(^\$s)+[0-9]").Match(source); //$s0 - $s9
if (storeMatch.Length == source.Length)
return RegisterType.Store;
var reservedMatch = new Regex(@"").Match(source); //$k0 - $k1
if (reservedMatch.Length == source.Length)
return RegisterType.OSReserved;
var constantMatch = new Regex(@"0-9").Match(source); //Any integer
if (constantMatch.Length == source.Length)
return RegisterType.Constant;
var memoryMatch = new Regex("").Match(source);
if (memoryMatch.Length == source.Length)
return RegisterType.Memory;
return RegisterType.Invalid;
}
UPDATE:現在一切工作正常,但不包括我的記憶正則表達式
public static RegisterType GetRegisterType(this string source)
{
if (Regex.IsMatch(source, @"\$t[0-9]"))
return RegisterType.Temporary; // $t0 - $t9
if (Regex.IsMatch(source, @"\$s[0-9]"))
return RegisterType.Store; // $s0 - $s9
if (Regex.IsMatch(source, @"\$k[0-1]"))
return RegisterType.OSReserved; // $k0 - $k1
if (Regex.IsMatch(source, @"[-+]?\b\d+\b"))
return RegisterType.Constant;
if (Regex.IsMatch(source, @"\$zero"))
return RegisterType.Special;
if (Regex.IsMatch(source, @"[a-zA-Z0-9]+\b\:"))
return RegisterType.Label;
if (Regex.IsMatch(source, @"\d+\b\(\$[s-t]\b[0-9])"))
return RegisterType.Memory;
return RegisterType.Invalid;
}
什麼部分回事?你在哪裏不匹配。注意,我相信你需要在臨時寄存器匹配表達式 – pstrjds 2012-03-09 18:15:07
中轉義'$'我還有一個問題(因爲我寫MIPS彙編已經有多年了),你的源代碼是一個完整的指令嗎?您的匹配k個寄存器的表達式是空白的?你的匹配「記憶」表達式也是一個空白的正則表達式。你可以給一些'source'的例子嗎? – pstrjds 2012-03-09 18:23:11
@pstrjds參考內存例如:lw $ t7,248($ t2) – 2012-03-09 19:46:55