2011-07-29 11 views
7

पर जी-मशीन स्रोत का अनुवाद करना मैं एलएसवीएम के साथ हास्केल में बैकएंड के रूप में एक साधारण आलसी कार्यात्मक भाषा को कार्यान्वित कर रहा हूं। मैंने साइमन पेटन जोन्स ("कार्यात्मक प्रोग्रामिंग भाषाओं के कार्यान्वयन" के साथ-साथ "कार्यात्मक भाषा कार्यान्वित करना: ट्यूटोरियल") द्वारा लिखी गई दो पुस्तकें पढ़ी हैं और इसके आधार पर मैंने G-Machine compiler and interpreter को लागू करने में कामयाब रहा।एलएमवीएम आईआर

अब मैं वर्तमान में जी-मशीन निर्देशों से एलएलवीएम आईआर कोड उत्पन्न करने की समस्या पर फंस गया हूं। मुख्य समस्या यह है कि जी-मशीन एक स्टैक मशीन है जबकि एलएलवीएम आईआर एक रजिस्टर मशीन है। इस प्रकार जी-मशीन को एलएलवीएम आईआर में अनुवाद करने के लिए मुझे एलएलवीएम आईआर में कुछ प्रकार के रन-टाइम स्टैक को बनाए रखना है (अगर मैं गलत हूं तो कृपया मुझे सही करें)। मैं अपने आईआर निर्देशों का उपयोग करके एलएलवीएम स्टैक पर बाद के स्टैक नोड आवंटित करने के बारे में सोच रहा था, लेकिन फिर मुझे उस स्टैक को एक लिंक्ड-लिस्ट तरीके से बनाना होगा, जहां प्रत्येक स्टैक एलिमेंट में पिछले एक पॉइंटर होता है और पहले में एक होता है नल पॉइंटर। हालांकि यह दृष्टिकोण बहुत अनुकूल नहीं है और जी-मशीन से "पुश एन" ऑपरेशन के मामले में इसे पसंदीदा ओ (1) के बजाय ओ (एन) की जटिलता होगी। अन्य विचार एकल कोशिकाओं की बजाय स्मृति के पूरे ब्लॉक आवंटित किया जा सकता है।

मेरा सवाल यह है कि क्या आप मेरी समस्या को हल करने का एक बेहतर/अलग तरीका देखते हैं।

+1

किसी भी कारणों से है? उल्लेख करने की जरूरत नहीं है कि एसटीजी से एलएलवीएम में पहले से ही एक कंपाइलर है जिसका आप उल्लेख कर सकते हैं। –

+1

खैर, जी-मशीन अच्छी और सरल है। और एक क्लासिक। – augustss

उत्तर

9

लिंक की गई सूची के ढेर न करें, वह पागल है। प्रयुक्त निश्चित मेमोरी ब्लॉक। आप एक पॉइंटर स्टैक और गैर-पॉइंटर स्टैक का उपयोग कर सकते हैं, और पॉइंटर द्वारा मेरा मतलब ढेर में इंगित करने वाला कुछ है। फिर कचरा संग्रह करना बहुत आसान है क्योंकि सभी जीसी जड़ें पॉइंटर स्टैक पर हैं।

एलएलवीएम रजिस्टरों में कुछ चीजें रखें: ढेर पॉइंटर, ढेर सीमा सूचक, दो स्टैक पॉइंटर्स।

यदि आप भाग्यशाली हैं तो एलएलवीएम ऑप्टिमाइज़र कुशल पंजीकरण संचालन में अक्षम स्टैक ऑपरेशंस को बदल देगा।

संबंधित मुद्दे