मैं 8051 असेंबलर बना रहा हूं।एक असेंबलर बनाने के लिए डिजाइन पैटर्न
सब कुछ करने से पहले एक tokenizer जो अगले टोकन पढ़ता है, त्रुटि झंडे सेट, 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 कीबी है और मैं बहुत खुश हूं कि आपने पिछले ऑब्जेक्ट-ओरिएंटेड कोड को इस के साथ बदल दिया है! अब एक फॉलो-अप (मुझे पता है ...) प्रश्न: 'Instruction8051 {सार्वजनिक स्ट्रिंग निमोनिक {get; का उपयोग कर आपका पिछला तरीका था; सेट; } सार्वजनिक सूची <निर्देशक जानकारी> जानकारी {प्राप्त करें; सेट; }} 'कमांड पैटर्न? और क्या कोई कारण/परिस्थितियां हैं जिन्हें मैं लुक-अप टेबल्स के लिए कमांड पैटर्न पसंद करता हूं? – Hossein
कमांड पैटर्न? नहीं - उनमें से दोनों को टेबल अप देखने के लिए तैयार किया गया होगा। पहले सी # कोड केवल एक है जो जेनेरिक संग्रह और ऑटो गुणों के लिए भाषा के समर्थन का लाभ उठाता है। – plinth