2011-09-23 12 views
7

का अध्ययन करने के लिए एक योजना दुभाषिया को कार्यान्वित करना चाहता हूं। मैं Structure and Interpretation of Computer Programs पुस्तक पढ़ रहा हूं, और मैं धीरे-धीरे एक योजना दुभाषिया को कोड करना चाहता हूं।मैं एसआईसीपी

क्या आप इस योजना के कार्यान्वयन को पढ़ने के लिए सबसे आसान (और संक्षिप्त) जानते हैं? मैं सी में

+1

एसआईसीपी पढ़ने के बाद, ऐसा लगता है कि आप योजना में अपने दुभाषिया को लिखने से अधिक प्राप्त करेंगे (या कुछ अन्य लिस्प बोली - मुझे क्लोजर पसंद है) और दुभाषिया लिखने से बाहर कुछ अभ्यास करना सी – mwd

+2

में आप एसआईसीपी में कितने दूर हैं? आप अध्याय दुभाषिया (वास्तव में एक से अधिक) और अध्याय 4 और 5 पढ़ने के दौरान एक कंपाइलर लिखेंगे। यदि आप पुस्तक को पूरा करते हैं, तो आपको वह मिल जाएगा जो आप चाहते हैं: मेटासिर्क्यूलर दुभाषिया (योजना में योजना) खूबसूरती से है कम। – spacemanaki

उत्तर

7

SICP ही कई वर्गों का ब्यौरा है एक मेटा-परिपत्र दुभाषिया का निर्माण करने के लिए कैसे एक जावास्क्रिप्ट कर देगा, लेकिन मैं सुझाव है कि आप योजना दुभाषिए पर बेहतर संसाधनों के लिए निम्न दो पुस्तकों पर एक नज़र डालें: Programming Languages: Application and Interpretation और Essentials of Programming Languages। वे दोनों पढ़ने के लिए आसान हैं और धीरे-धीरे निर्माण दुभाषियों के माध्यम से आपको मार्गदर्शन करते हैं।

4

ईसाई क्विननेक की पुस्तक लिस्प इन छोटे टुकड़े शानदार हैं। अधिक आधुनिक है कि ईओपीएल। लिस्प और स्कीम दोनों को कवर करता है, और गोररी लो-स्तरीय सामानों के बारे में जानकारी देता है जो अधिकांश किताबें छोड़ देते हैं।

+0

यह शुरुआती लोगों के लिए भी उपयुक्त नहीं है। – leppie

1

मैं केंट डाइबविग के शोध प्रबंध को पढ़ने की सिफारिश करता हूं "Three Implementation Models for Scheme"। पूरे शोध प्रबंध नहीं, लेकिन पहला भाग (अध्याय 3 तक) जहां वह ढेर-आधारित मॉडल पर चर्चा करता है, योजना के निष्पक्ष कार्यान्वयन के लिए बहुत उपयुक्त है।

एक और महान संसाधन (यदि मैं इसे सही ढंग से समझता हूं और आप इसे सी में कार्यान्वित करना चाहते हैं) Nils Holm's "Scheme 9 from Empty Space" है। यह लिंक निल्स के पेज पर है, और नीचे, पुराने डोमेन, पुस्तक के संस्करण और नए, आसानी से पढ़ने, व्यावसायिक रूप से उपलब्ध संस्करण के लिए एक लिंक है। दोनों पढ़ें और प्यार किया।

0

में एक योजना दुभाषिया मैं तुम्हें कैसे मेरे दुभाषिया काम करता है, इसका संक्षिप्त विवरण दे सकते हैं बनाता है की सिफारिश करेंगे, हो सकता है यह आप सामान्य बात की एक विचार दे सकते हैं। हालांकि उत्तर बहुत देर हो चुकी है, मुझे उम्मीद है कि यह किसी और की मदद कर सकता है, जो इस धागे पर आया है और एक सामान्य विचार चाहता है।

  1. योजना की प्रत्येक पंक्ति दर्ज करने के लिए, एक कमांड ऑब्जेक्ट बनाया गया है। यदि आदेश आंशिक है तो इसका घोंसला स्तर संग्रहीत किया जाता है (अभिव्यक्ति को पूरा करने के लिए शेष दाएं ब्रैकेट की संख्या)। यदि आदेश पूरा हो गया है तो अभिव्यक्ति ऑब्जेक्ट बनाया गया है और मूल्यांकनकर्ता को इस ऑब्जेक्ट पर निकाल दिया गया है।
  2. परिभाषित मूल्यांकनकर्ता वर्गों के 4 प्रकार, प्रत्येक आधार वर्ग मूल्यांकनकर्ता से प्राप्त

क) Define_Evaluator हैं: के लिए बयान को परिभाषित

ख) Funcall_Evaluator: अन्य उपयोगकर्ता द्वारा निर्धारित कार्यों

के प्रसंस्करण के लिए सी) Read_Evaluator: एक अभिव्यक्ति पढ़ने और इसे एक स्कीम ऑब्जेक्ट में बदलने के लिए

डी) Print_Evaluator: ऑब्जेक्ट के प्रकार के आधार पर ऑब्जेक्ट प्रिंट करता है।

ई) Eval_Evaluator: अभिव्यक्ति की वास्तविक प्रसंस्करण करता है।

3 .-> पहले प्रत्येक अभिव्यक्ति को पढ़ने वाले मूल्यांकनकर्ता का उपयोग करके पढ़ा जाता है जो अभिव्यक्ति से एक योजना वस्तु बना देगा। अभिव्यक्ति पूर्ण होने तक नेस्टेड अभिव्यक्तियों की गणना लगातार की जाती है।

-> अगला, Eval_Evaluator निकाल दिया गया है जो पहले चरण में बनाई गई योजना अभिव्यक्ति ऑब्जेक्ट को संसाधित करता है। ऐसा होता है

ए) यदि मूल्यांकन की अभिव्यक्ति एक प्रतीक है। अपना मूल्य वापस करें। इसलिए परिवर्तनीय ब्लैक उस ब्लॉक के लिए ऑब्जेक्ट वापस कर देगा।

बी) यदि मूल्यांकन की अभिव्यक्ति एक सूची है। सूची प्रिंट करें।

सी) यदि मूल्यांकन की अभिव्यक्ति एक कार्य है। फ़ंक्शन की परिभाषा की तलाश करें जो Funcall_Evaluator का उपयोग करके मूल्यांकन वापस कर देगा।

-> अंत में प्रिंट मूल्यांकनकर्ता को परिणाम मुद्रित करने के लिए निकाल दिया जाता है, यह प्रिंट आउटपुट अभिव्यक्ति के किस प्रकार पर निर्भर करेगा।

अस्वीकरण: यह कैसे मेरे दुभाषिया काम करता है, उस तरह से होना जरूरी नहीं करता है।

0

मैं एक ऐसी ही मिशन पर कई साल बाद किया गया है लेकिन, सिफारिशें: खरोंच से

  • पीटर Michaux की योजना: http://michaux.ca/articles/scheme-from-scratch-introduction, और अपने GitHub रेपो: https://github.com/petermichaux/bootstrap-scheme/blob/v0.21/scheme.c। अफसोस की बात है कि उनके शाही योजना के प्रयास बंद हो गए हैं। वीएम के वादे थे, जो स्पष्टीकरण की स्पष्टता के साथ महान रहे होंगे।
  • पीटर Norvigs lis.py: http://norvig.com/lispy.html, हालांकि पाइथन में लिखा गया है, यह बहुत समझ में आता है और एक और गतिशील, कमजोर टाइप की गई भाषा का उपयोग करने के सभी फायदे का फायदा उठाता है। उनके पास एक फॉलो अप आलेख है जो अधिक उन्नत सुविधाओं को जोड़ता है। http://howtowriteaprogram.blogspot.co.uk/2010/11/lisp-interpreter-in-90-lines-of-c.html
  • एक और पूरा कार्यान्वयन Chibi योजना है:
  • एंथोनी सी सूखी घास सी ++ में एक कार्यान्वयन बनाने के लिए एक प्रेरणा के रूप में प्रयोग किया जाता lis.py http://synthcode.com/scheme/chibi/ जो एक वी एम में शामिल करता है, लेकिन कोड आधार अभी भी बहुत बड़ी नहीं है समझने के लिए।

मैं अभी भी एक लिस्प/योजना वीएम बनाने पर अच्छी ब्लॉग पोस्ट खोज रहा हूं, जिसे जेआईटी (किसी प्रतिस्पर्धी जेएस कार्यान्वयन के लिए महत्वपूर्ण) के साथ जोड़ा जा सकता है।

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