我在製作8051彙編程序。製作彙編程序的設計模式
一切之前是一個標記讀取下一個令牌,設置錯誤標誌,識別EOF等
再有就是編譯器的主循環,讀取下一個令牌和檢查有效助記符:
mnemonic= NextToken();
if (mnemonic.Error)
{
//throw some error
}
else if (mnemonic.Text == "ADD")
{
...
}
else if (mnemonic.Text == "ADDC")
{
...
}
並繼續幾例。比每種情況下的代碼更糟糕,它會檢查有效參數,然後將其轉換爲編譯代碼。現在看起來像這樣:
if (mnemonic.Text == "MOV")
{
arg1 = NextToken();
if (arg1.Error) { /* throw error */ break; }
arg2 = NextToken();
if (arg2.Error) { /* throw error */ break; }
if (arg1.Text == "A")
{
if (arg2.Text == "B")
output << 0x1234; //Example compiled code
else if (arg2.Text == "@B")
output << 0x5678; //Example compiled code
else
/* throw "Invalid parameters" */
}
else if (arg1.Text == "B")
{
if (arg2.Text == "A")
output << 0x9ABC; //Example compiled code
else if (arg2.Text == "@A")
output << 0x0DEF; //Example compiled code
else
/* throw "Invalid parameters" */
}
}
對於每個助記符我必須檢查有效的參數,然後創建正確的編譯代碼。非常類似的代碼用於檢查每種情況下每個助記符的有效參數。
那麼是否有改進此代碼的設計模式?
或者只是一個簡單的方法來實現呢?
編輯:我接受了基林的答案,感謝他。如果你有這方面的想法,我會很樂意學習它們。謝謝大家。
我的記憶大約是200 KiB,我非常高興你用這個替換了以前的面向對象的代碼!現在後續(我知道...)問題:你以前使用'Instruction8051 {public string Mnemonic {get;組; } public List Info {get;組; }}命令模式?是否有任何原因/情況我更喜歡命令模式查找表? –
Hossein
2011-04-07 20:35:40
命令模式?不 - 他們兩人都會圍着查找桌子。早期的C#代碼只是一種利用語言對泛型集合和自動屬性的支持的優勢。 – plinth 2011-04-08 12:32:16